Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.11;
Скачать: CL | DM;

Вниз

порядок нахождения   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2009.01.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
15-1226856379
DillerXX
2008-11-16 20:26
2009.01.11
А почему корпус компьютера


8-1188381068
hahol
2007-08-29 13:51
2009.01.11
Эквалайзер


2-1228066243
lewka
2008-11-30 20:30
2009.01.11
Компоненты NMStrmServ и TNMStrm


2-1227705341
MS
2008-11-26 16:15
2009.01.11
Указатель на тип string


2-1227711457
ekto
2008-11-26 17:57
2009.01.11
запрос