Конференция "WinAPI" » порядок нахождения
 
  • AlexeyShestchenko (14.02.08 21:41) [0]
    Перебыираю все компоненты на чужой форме и если там есть edit то добавляю в него текст. но тут создал для теста форму с 10 эдитами и обнаружил что перебираться эдиты начинаются с последнего и соответстввенно добавляться начинают с последнего и по убывающей что не верно в моем случае, как сделать чтобы перебор был с конца или как решить мой вопрос?
    буду благодарен за ответы.
    Забыл сказать что использую
    EnumChildWindows
    proc
    GetClassName
  • ketmar © (14.02.08 21:48) [1]
    натурально, в 17-й строке ошибка.

    зыж как вы достали…

    ---
    Understanding is not required. Only obedience.
  • Leonid Troyanovsky © (14.02.08 21:51) [2]

    > AlexeyShestchenko   (14.02.08 21:41)  

    > с последнего и соответстввенно добавляться начинают с последнего
    > и по убывающей что не верно в моем случае,

    Вне зависимости от представлений о верности
    контролы перебираются в соответствии с их z-order.

    Хотя, и на это я бы не закладывался, а выбрал бы
    более достоверный метод идентификации.

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 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 © (14.02.08 22:08) [4]

    > AlexeyShestchenko   (14.02.08 21:58) [3]

    > Вот код, предложите другие "более достоверный метод идентификации.

    Мы не увидели идентификации, зависящей от z-order.
    И что за try-except.

    --
    Regards, LVT.
  • ketmar © (14.02.08 22:09) [5]
    >[3] AlexeyShestchenko (2008-02-14 21:58:00)
    это что за класс такой — TEdit? O_o

    ---
    Understanding is not required. Only obedience.
  • Leonid Troyanovsky © (14.02.08 22:13) [6]

    > AlexeyShestchenko   (14.02.08 21:58) [3]

    Да ты, брат, еще и путанник.
    Что за нах i.

    Про досто верность, я, пожалуй, погорячился :)

    --
    Regards, LVT.
  • Leonid Troyanovsky © (14.02.08 22:15) [7]

    > ketmar ©   (14.02.08 22:09) [5]

    > это что за класс такой — TEdit?

    Ну, такой класс есть - дельфийский субкласс EDIT.

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 22:23) [8]
    что то я не нашел инфы по тому как определять у конкретного контрола его z-order...может вы знаете?
    ну try except забыл удалить:)
    а i это номер строки в list := tstringlist.create;
  • ketmar © (14.02.08 22:24) [9]
    >[7] Leonid Troyanovsky © (2008-02-14 22:15:00)
    дык всё равно там EDIT внизу? или я не прав? (очень могу быть не прав, поправь, если что)

    ---
    Understanding is not required. Only obedience.
  • Leonid Troyanovsky © (14.02.08 22:31) [10]

    > AlexeyShestchenko   (14.02.08 22:23) [8]

    > что то я не нашел инфы по тому как определять у конкретного
    > контрола его z-order...может вы знаете?

    MSDN тебе в помощь.
    Однако, так не ясно, нах оный порядок потребовался.

    > а i это номер строки в list := tstringlist.create;

    Так и поняли, что это не описка, а баг.

    --
    Regards, LVT.
  • ketmar © (14.02.08 22:33) [11]
    >[10] Leonid Troyanovsky © (2008-02-14 22:31:00)
    >так не ясно, нах оный порядок потребовался.

    дык. заполнение формы, вестимо (ай, Кэтмар, ай да телепат!)

    ---
    Understanding is not required. Only obedience.
  • Leonid Troyanovsky © (14.02.08 22:34) [12]

    > ketmar ©   (14.02.08 22:24) [9]

    > дык всё равно там EDIT внизу? или я не прав?

    GetClassName покажет 'TEdit'.
    Ну, или то, чем именовали потомка.

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 22:40) [13]
    1. Почему i в моем случае баг?
    2. Опишу еще раз задачу: мне нужно заполнить edit'ы в другой чужой программе. Я это вижу так при наведении курсора на первый эдит,с которого надо заполнять их, получаем его z order и передвигаемся по ним дальше и заполняем?
  • ketmar © (14.02.08 22:41) [14]
    >[12] Leonid Troyanovsky © (2008-02-14 22:34:00)
    вот йопт. убивать-убивать-убивать…

    ---
    Understanding is not required. Only obedience.
  • Leonid Troyanovsky © (14.02.08 22:45) [15]

    > tmar ©   (14.02.08 22:41) [14]

    > вот йопт. убивать-убивать-убивать…

    Да ладно, тут все по-честному.
    Ну, или как обещано.

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 22:49) [16]
    может по моему вопросу напишите что-нибудь полезное?
  • Leonid Troyanovsky © (14.02.08 22:51) [17]

    > AlexeyShestchenko   (14.02.08 22:40) [13]

    > 1. Почему i в моем случае баг?

    Это в любом случае - баг.
    Трудно объяснять, особенно, на таком уровне подготовки.

    > при наведении курсора на первый эдит,с которого надо заполнять
    > их, получаем его z order и передвигаемся по ним дальше и
    > заполняем?

    При наведении курсора и заполняем указуемый эдит.
    Чего еще более?

    --
    Regards, LVT.
  • Leonid Troyanovsky © (14.02.08 22:54) [18]

    > AlexeyShestchenko   (14.02.08 22:49) [16]

    > может по моему вопросу напишите что-нибудь полезное?

    Я, например, по любому вопросу пишу (уже давно)
    исключительно полезное.

    Не все, правда, это могут воспринять :)

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 23:09) [19]
    дело в том что мне надо заполнять сразу все эдиты, а не перемещаться курсор к каждому.
  • Leonid Troyanovsky © (14.02.08 23:22) [20]

    > AlexeyShestchenko   (14.02.08 23:09) [19]

    > дело в том что мне надо заполнять сразу все эдиты, а не
    > перемещаться курсор к каждому.

    Вот для этого оные эдиты и надо идентифицировать.
    Например, по их положению.
    Или, скажем, пройти их все предварительно мышью и пометить,
    скажем, SetProp.

    --
    Regards, LVT.
  • AlexeyShestchenko (14.02.08 23:52) [21]
    Спасибо за ответ.
    Делал так уже,но хотелось конечно все автоматом сделать...
  • Leonid Troyanovsky © (15.02.08 11:00) [22]

    > AlexeyShestchenko   (14.02.08 23:52) [21]

    > Делал так уже,но хотелось конечно все автоматом сделать.

    Делов-то.
    Если положение контролов неизменно, то для заполняемой формы
    достаточно один раз составить карту, а для определения хендлов
    контролов использовать ChildWindowFromPoint.

    Хранить же хендлы нельзя, бо возможны некие RecreateWnd.
    Или, следить за их валидностью с помощью хука.
    Хотя без хука, по всей видимости, здесь не обойтись.

    --
    Regards, LVT.
  • AlexeyShestchenko (15.02.08 15:50) [23]
    Это для конкретной программы будет, хотелось сделать более универсальной, похоже нельзя...
    Спасибо за ответы!
  • GrayFace (25.02.08 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 © (25.02.08 15:13) [25]

    > GrayFace   (25.02.08 14:38) [24]

    > Не понял, почему i - баг?

    Потому, что глобальная переменная.

    > Если мне не ходит налево память, у proc должно быть больше
    > 1 параметра.

    Видимо, вторым идет List1.

    --
    Regards, LVT.
 
Конференция "WinAPI" » порядок нахождения
Есть новые Нет новых   [134431   +15][b:0][p:0.001]