Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Внизпорядок нахождения Найти похожие ветки
← →
AlexeyShestchenko (2008-02-14 21:41) [0]Перебыираю все компоненты на чужой форме и если там есть edit то добавляю в него текст. но тут создал для теста форму с 10 эдитами и обнаружил что перебираться эдиты начинаются с последнего и соответстввенно добавляться начинают с последнего и по убывающей что не верно в моем случае, как сделать чтобы перебор был с конца или как решить мой вопрос?
буду благодарен за ответы.
Забыл сказать что использую
EnumChildWindows
proc
GetClassName
← →
ketmar © (2008-02-14 21:48) [1]натурально, в 17-й строке ошибка.
зыж как вы достали…
---
Understanding is not required. Only obedience.
← →
Leonid Troyanovsky © (2008-02-14 21:51) [2]
> AlexeyShestchenko (14.02.08 21:41)
> с последнего и соответстввенно добавляться начинают с последнего
> и по убывающей что не верно в моем случае,
Вне зависимости от представлений о верности
контролы перебираются в соответствии с их z-order.
Хотя, и на это я бы не закладывался, а выбрал бы
более достоверный метод идентификации.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 21:58) [3]Вот код, предложите другие "более достоверный метод идентификации."
Спасибо за ответы.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;
← →
Leonid Troyanovsky © (2008-02-14 22:08) [4]
> AlexeyShestchenko (14.02.08 21:58) [3]
> Вот код, предложите другие "более достоверный метод идентификации.
Мы не увидели идентификации, зависящей от z-order.
И что за try-except.
--
Regards, LVT.
← →
ketmar © (2008-02-14 22:09) [5]>[3] AlexeyShestchenko (2008-02-14 21:58:00)
это что за класс такой — TEdit? O_o
---
Understanding is not required. Only obedience.
← →
Leonid Troyanovsky © (2008-02-14 22:13) [6]
> AlexeyShestchenko (14.02.08 21:58) [3]
Да ты, брат, еще и путанник.
Что за нах i.
Про досто верность, я, пожалуй, погорячился :)
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-02-14 22:15) [7]
> ketmar © (14.02.08 22:09) [5]
> это что за класс такой — TEdit?
Ну, такой класс есть - дельфийский субкласс EDIT.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 22:23) [8]что то я не нашел инфы по тому как определять у конкретного контрола его z-order...может вы знаете?
ну try except забыл удалить:)
а i это номер строки в list := tstringlist.create;
← →
ketmar © (2008-02-14 22:24) [9]>[7] Leonid Troyanovsky © (2008-02-14 22:15:00)
дык всё равно там EDIT внизу? или я не прав? (очень могу быть не прав, поправь, если что)
---
Understanding is not required. Only obedience.
← →
Leonid Troyanovsky © (2008-02-14 22:31) [10]
> AlexeyShestchenko (14.02.08 22:23) [8]
> что то я не нашел инфы по тому как определять у конкретного
> контрола его z-order...может вы знаете?
MSDN тебе в помощь.
Однако, так не ясно, нах оный порядок потребовался.
> а i это номер строки в list := tstringlist.create;
Так и поняли, что это не описка, а баг.
--
Regards, LVT.
← →
ketmar © (2008-02-14 22:33) [11]>[10] Leonid Troyanovsky © (2008-02-14 22:31:00)
>так не ясно, нах оный порядок потребовался.
дык. заполнение формы, вестимо (ай, Кэтмар, ай да телепат!)
---
Understanding is not required. Only obedience.
← →
Leonid Troyanovsky © (2008-02-14 22:34) [12]
> ketmar © (14.02.08 22:24) [9]
> дык всё равно там EDIT внизу? или я не прав?
GetClassName покажет "TEdit".
Ну, или то, чем именовали потомка.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 22:40) [13]1. Почему i в моем случае баг?
2. Опишу еще раз задачу: мне нужно заполнить edit"ы в другой чужой программе. Я это вижу так при наведении курсора на первый эдит,с которого надо заполнять их, получаем его z order и передвигаемся по ним дальше и заполняем?
← →
ketmar © (2008-02-14 22:41) [14]>[12] Leonid Troyanovsky © (2008-02-14 22:34:00)
вот йопт. убивать-убивать-убивать…
---
Understanding is not required. Only obedience.
← →
Leonid Troyanovsky © (2008-02-14 22:45) [15]
> tmar © (14.02.08 22:41) [14]
> вот йопт. убивать-убивать-убивать…
Да ладно, тут все по-честному.
Ну, или как обещано.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 22:49) [16]может по моему вопросу напишите что-нибудь полезное?
← →
Leonid Troyanovsky © (2008-02-14 22:51) [17]
> AlexeyShestchenko (14.02.08 22:40) [13]
> 1. Почему i в моем случае баг?
Это в любом случае - баг.
Трудно объяснять, особенно, на таком уровне подготовки.
> при наведении курсора на первый эдит,с которого надо заполнять
> их, получаем его z order и передвигаемся по ним дальше и
> заполняем?
При наведении курсора и заполняем указуемый эдит.
Чего еще более?
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-02-14 22:54) [18]
> AlexeyShestchenko (14.02.08 22:49) [16]
> может по моему вопросу напишите что-нибудь полезное?
Я, например, по любому вопросу пишу (уже давно)
исключительно полезное.
Не все, правда, это могут воспринять :)
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 23:09) [19]дело в том что мне надо заполнять сразу все эдиты, а не перемещаться курсор к каждому.
← →
Leonid Troyanovsky © (2008-02-14 23:22) [20]
> AlexeyShestchenko (14.02.08 23:09) [19]
> дело в том что мне надо заполнять сразу все эдиты, а не
> перемещаться курсор к каждому.
Вот для этого оные эдиты и надо идентифицировать.
Например, по их положению.
Или, скажем, пройти их все предварительно мышью и пометить,
скажем, SetProp.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-14 23:52) [21]Спасибо за ответ.
Делал так уже,но хотелось конечно все автоматом сделать...
← →
Leonid Troyanovsky © (2008-02-15 11:00) [22]
> AlexeyShestchenko (14.02.08 23:52) [21]
> Делал так уже,но хотелось конечно все автоматом сделать.
Делов-то.
Если положение контролов неизменно, то для заполняемой формы
достаточно один раз составить карту, а для определения хендлов
контролов использовать ChildWindowFromPoint.
Хранить же хендлы нельзя, бо возможны некие RecreateWnd.
Или, следить за их валидностью с помощью хука.
Хотя без хука, по всей видимости, здесь не обойтись.
--
Regards, LVT.
← →
AlexeyShestchenko (2008-02-15 15:50) [23]Это для конкретной программы будет, хотелось сделать более универсальной, похоже нельзя...
Спасибо за ответы!
← →
GrayFace (2008-02-25 14:38) [24]Не понял, почему 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
← →
Leonid Troyanovsky © (2008-02-25 15:13) [25]
> GrayFace (25.02.08 14:38) [24]
> Не понял, почему i - баг?
Потому, что глобальная переменная.
> Если мне не ходит налево память, у proc должно быть больше
> 1 параметра.
Видимо, вторым идет List1.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c