ReWanet

[ CheatEngine ] Обращение к созданым объектам

Recommended Posts

Вот хочу узнать как узнать созданный объект чтобы его изменять не прописывая к нему каждую циферку ( надеюсь внятно написал.. )
Код LUA:

Скрытый текст

local i = 1
local b = 1

function createPointSaver()	--Это функция Создания Edit
local editLine = {};
editLine[1] = createEdit( UDF1_CEPanel2 );
editLine[2] = createEdit( UDF1_CEPanel2 );
editLine[3] = createEdit( UDF1_CEPanel2 );
editLine[4] = createEdit( UDF1_CEPanel2 );
for x = 1, #editLine do
    control_setCaption( editLine[x], "EDIT: " .. tostring( b ) );	--Параметры для Edit'ов
    control_setPosition( editLine[x], ( x * 90 ) - 75 , 15 * i )
    editLine[x].height = 16
    editLine[x].width = 80
    editLine[x].maxlength = 10
    editLine[x].font.name = "Arial"
    editLine[x].font.size = 8
    editLine[x].font.color = "0xFFFFFF"
    editLine[x].color = "0x533F3F"
    editLine[x].borderstyle = "bsNone"
    editLine[x].name = "SPoint"..b..""
    b = b + 1
end
end

function CEButton1Click(sender)	--Функция по нажатию вызывает функцию выше и создает Edit'ы
createPointSaver()
i = i + 1.5
UDF1.CELabel1.Caption = wincontrol_getControlCount(UDF1_CEPanel2)
end

 

Возьму еще одну попытку и попытаюсь выразится яснее! 
Как видно из скрипта по нажатию на [ Button1 ] идет вызов функции после чего к [ I ] добавится 1.5 ( расстояние между Edit ) в функции каждому Edit'у задается имя [ editLine[x].name = "SPoint"..b.."" ] так вот чтобы обратиться к какому либо Edit'у нужно прописывать [ UDF1.SPoint(циферка без скобок).Text = "Ля-ля-ля" ] а я хочу чтобы циферка сама подставлялась а не прописывать ее каждый раз ( допустим Обращений будет 100 и писать под 400 UDF1.blabla.blabla = "blabla" ну не комильфо ). Типа такого [ UDF1.SPoint.Text = "Ля-ля-ля" ] ( что не рабочий вариант а лишь глупый пример ). Я конечно попробовал поискать инфу но что-то лапки мешают. Поэтому вот тут эту темку и сделал :(
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не много допер :D Ошибку нашел.. Ну коротко Edit'ы ищутся но все еще задаюсь вопросом как найти сразу 4 Edit'а. Походу не надо вчера до 7 утра сидеть :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, ReWanet сказал:

Не много допер :D Ошибку нашел.. Ну коротко Edit'ы ищутся но все еще задаюсь вопросом как найти сразу 4 Edit'а. Походу не надо вчера до 7 утра сидеть :(

в луа не шарю, но по принципу C++ могу предположить такой вариант:

 

if(editLine++) - перебор всех едитов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, elvis66666 сказал:

перебор всех едитов

Да я перебор уже сделал. Выхватываю один а остальные ( 3 ) не захватываются.
Вот типа так:

for i = 0,count - 1 do
  c = component_getComponent(UDF1, i)
    if object_getClassName(c)=="TCEEdit" then
      UDF1.CELabel2.Caption = component_getName(c)	--Чтоб понять какой получаю ( Первый из списка ( В мое случаем Edit1 ))
      return c
    end
end

Сейчас думаю над захватом всех.. есть мысля как сделать но пока читаю wiki ce и про lua.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А зачем ты используешь табличные индексы, а не table.insert?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Скрытый текст

local i = 1
local b = 1

function createPointSaver()	-- Это функция Создания Edit
	local editLine = {};
	table.insert(editLine, createEdit(UDF1_CEPanel2));
	table.insert(editLine, createEdit(UDF1_CEPanel2))
	table.insert(editLine, createEdit(UDF1_CEPanel2))
	table.insert(editLine, createEdit(UDF1_CEPanel2))

	for key, value in pairs(editLine) do
		control_setCaption(value, "EDIT: " .. tostring(b));	-- Параметры для Editв
		control_setPosition(value, (key*90) - 75, 15*i);
		value.height = 16;
		value.width = 80;
		value.maxlength = 10;
		value.font.name = "Arial";
		value.font.size = 8;
		value.font.color = "0xFFFFFF";
		value.color = "0x533F3F";
		value.borderstyle = "bsNone";
		value.name = "SPoint"..b.."";
		b = b + 1;
	end
end

function CEButton1Click(sender)	-- Функция по нажатию вызывает функцию выше и создает Edit\ы
	createPointSaver()
	i = i + 1.5
	UDF1.CELabel1.Caption = wincontrol_getControlCount(UDF1_CEPanel2)
end

 

На счёт key, value in pairs(editLine) там может быть ошибка, так что глаза в оба, протестить не могу, ибо не знаю как, где находятся UDF1 элемент и его панели?

Изменено пользователем CHBS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, CHBS сказал:

ибо не знаю как, где находятся UDF1 элемент и его панели?

Ммм для чего мне это?) Я создаю и так нормально. Мне нужно найти 4 элемента и с каждым иметь возможно работать отдельно. Элементы и панели находятся в вкладке "Table -> Create Form"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
57 минут назад, ReWanet сказал:

Вот типа так:

 

Не рано ли return? For не успевает отрабатывать полностью

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, partoftheworlD сказал:

Не рано ли return? For не успевает отрабатывать полностью

Ну по логике он доходит до первого элемента с данным КлассИмя и передает его мне. For отрабатывает до первого элемента который подойдет под условия т.е. нашел элемент и передал и все. Хм..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, ReWanet сказал:

нашел элемент и передал и все

Если у тебя этот участок кода не в цикле, то он выйдет из for и не запустится для перебора других объектов, предлагаю в отдельный массив складывать, а после того как for перестанет отрабатывать все вместе выводить return тем же

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.