-
Перебыираю все компоненты на чужой форме и если там есть edit то добавляю в него текст. но тут создал для теста форму с 10 эдитами и обнаружил что перебираться эдиты начинаются с последнего и соответстввенно добавляться начинают с последнего и по убывающей что не верно в моем случае, как сделать чтобы перебор был с конца или как решить мой вопрос? буду благодарен за ответы. Забыл сказать что использую EnumChildWindows proc GetClassName
-
натурально, в 17-й строке ошибка.
зыж как вы достали…
--- Understanding is not required. Only obedience.
-
> AlexeyShestchenko (14.02.08 21:41)
> с последнего и соответстввенно добавляться начинают с последнего > и по убывающей что не верно в моем случае,
Вне зависимости от представлений о верности контролы перебираются в соответствии с их z-order.
Хотя, и на это я бы не закладывался, а выбрал бы более достоверный метод идентификации.
-- Regards, LVT.
-
Вот код, предложите другие "более достоверный метод идентификации." Спасибо за ответы. function proc(wnd:hWnd):boolean;stdcall;
var wndClass:array[0..255] of char;
begin
Result:=True;
GetClassName(wnd, wndClass, sizeof(wndClass));
if wndClass='TEdit' then
begin
if i = list1.Count then
Exit;
try
SendMessage(wnd,WM_SETTEXT,0,LParam(PAnsiChar(list1.Strings[i])));
inc(i);
except
end;
end;
-
> AlexeyShestchenko (14.02.08 21:58) [3]
> Вот код, предложите другие "более достоверный метод идентификации.
Мы не увидели идентификации, зависящей от z-order. И что за try-except.
-- Regards, LVT.
-
>[3] AlexeyShestchenko (2008-02-14 21:58:00) это что за класс такой — TEdit? O_o
--- Understanding is not required. Only obedience.
-
> AlexeyShestchenko (14.02.08 21:58) [3]
Да ты, брат, еще и путанник. Что за нах i.
Про досто верность, я, пожалуй, погорячился :)
-- Regards, LVT.
-
> ketmar © (14.02.08 22:09) [5]
> это что за класс такой — TEdit?
Ну, такой класс есть - дельфийский субкласс EDIT.
-- Regards, LVT.
-
что то я не нашел инфы по тому как определять у конкретного контрола его z-order...может вы знаете? ну try except забыл удалить:) а i это номер строки в list := tstringlist.create;
-
>[7] Leonid Troyanovsky © (2008-02-14 22:15:00) дык всё равно там EDIT внизу? или я не прав? (очень могу быть не прав, поправь, если что)
--- Understanding is not required. Only obedience.
-
> AlexeyShestchenko (14.02.08 22:23) [8]
> что то я не нашел инфы по тому как определять у конкретного > контрола его z-order...может вы знаете?
MSDN тебе в помощь. Однако, так не ясно, нах оный порядок потребовался.
> а i это номер строки в list := tstringlist.create;
Так и поняли, что это не описка, а баг.
-- Regards, LVT.
-
>[10] Leonid Troyanovsky © (2008-02-14 22:31:00) >так не ясно, нах оный порядок потребовался. дык. заполнение формы, вестимо (ай, Кэтмар, ай да телепат!)
--- Understanding is not required. Only obedience.
-
> ketmar © (14.02.08 22:24) [9]
> дык всё равно там EDIT внизу? или я не прав?
GetClassName покажет 'TEdit'. Ну, или то, чем именовали потомка.
-- Regards, LVT.
-
1. Почему i в моем случае баг? 2. Опишу еще раз задачу: мне нужно заполнить edit'ы в другой чужой программе. Я это вижу так при наведении курсора на первый эдит,с которого надо заполнять их, получаем его z order и передвигаемся по ним дальше и заполняем?
-
>[12] Leonid Troyanovsky © (2008-02-14 22:34:00) вот йопт. убивать-убивать-убивать…
--- Understanding is not required. Only obedience.
-
> tmar © (14.02.08 22:41) [14]
> вот йопт. убивать-убивать-убивать…
Да ладно, тут все по-честному. Ну, или как обещано.
-- Regards, LVT.
-
может по моему вопросу напишите что-нибудь полезное?
-
> AlexeyShestchenko (14.02.08 22:40) [13]
> 1. Почему i в моем случае баг?
Это в любом случае - баг. Трудно объяснять, особенно, на таком уровне подготовки.
> при наведении курсора на первый эдит,с которого надо заполнять > их, получаем его z order и передвигаемся по ним дальше и > заполняем?
При наведении курсора и заполняем указуемый эдит. Чего еще более?
-- Regards, LVT.
-
> AlexeyShestchenko (14.02.08 22:49) [16]
> может по моему вопросу напишите что-нибудь полезное?
Я, например, по любому вопросу пишу (уже давно) исключительно полезное.
Не все, правда, это могут воспринять :)
-- Regards, LVT.
-
дело в том что мне надо заполнять сразу все эдиты, а не перемещаться курсор к каждому.
-
> AlexeyShestchenko (14.02.08 23:09) [19]
> дело в том что мне надо заполнять сразу все эдиты, а не > перемещаться курсор к каждому.
Вот для этого оные эдиты и надо идентифицировать. Например, по их положению. Или, скажем, пройти их все предварительно мышью и пометить, скажем, SetProp.
-- Regards, LVT.
-
Спасибо за ответ. Делал так уже,но хотелось конечно все автоматом сделать...
-
> AlexeyShestchenko (14.02.08 23:52) [21]
> Делал так уже,но хотелось конечно все автоматом сделать.
Делов-то. Если положение контролов неизменно, то для заполняемой формы достаточно один раз составить карту, а для определения хендлов контролов использовать ChildWindowFromPoint.
Хранить же хендлы нельзя, бо возможны некие RecreateWnd. Или, следить за их валидностью с помощью хука. Хотя без хука, по всей видимости, здесь не обойтись.
-- Regards, LVT.
-
Это для конкретной программы будет, хотелось сделать более универсальной, похоже нельзя... Спасибо за ответы!
-
Не понял, почему i - баг?
> AlexeyShestchenko (14.02.08 21:58) [3] Если мне не ходит налево память, у proc должно быть больше 1 параметра.
Получаешь массивхэндлов эдитов и упорядочиваешь его в соответствии с порядком
если (Edit1.Top < Edit2.Top) or (Edit1.Top = Edit2.Top) and (Edit1.Left < Edit2.Left) то Edit1 < Edit2
-
> GrayFace (25.02.08 14:38) [24]
> Не понял, почему i - баг?
Потому, что глобальная переменная.
> Если мне не ходит налево память, у proc должно быть больше > 1 параметра.
Видимо, вторым идет List1.
-- Regards, LVT.
|