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

Вниз

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

 
alex732   (2004-08-31 10:26) [0]

Добрый день, Мастера! Такая задача: Есть приложение Progs  форма ProgsWindow которго содержит TMemo - Memo1... необходимо в это мемо передать из другого приложения некий текст - к примеру "TEST" и показать эту форму... Я делаю следующим образом:

 PHandle := FindWindow(nil, "ProgWindow");// нахожу хендл окна по названию
 if PHandle <> 0 then
    begin
      CHandle := FindWindowEx(PHandle, 0, nil, "Memo1"); //пытаюсь найти хендл дочернего окна
      SetWindowText(CHandle, PChar("TEST"));
      ShowWindow(PHandle,SW_SHOWNORMAL);
    end;

Но не определяется CHandle... Он остается = 0... Почему? Расскажите ПЛИЗЗ!


 
inic ©   (2004-08-31 10:37) [1]

Должен заранее сказать, что не уверен в ответе.
Вроде как Memo1 - это имя компонента, не более того (не имя окна в WinAPI понятии). А вот класс - TMemo, может по нему искать.


 
alex732   (2004-08-31 10:48) [2]

> inic
Похоже что так оно и есть... Попробовал поискать по классу - хендл определился...  Тогда конкретизирую : на этой форме не одно, а два Мемо - Memo1 и Memo2...  Как тогда мне послать текст в нужное мне - Memo1?


 
inic ©   (2004-08-31 11:15) [3]

Судя по всему, по ID тоже искать бесполезно, ибо при каждом запуске он изменяется, тогда могу подсказать немного дурацкий способ - брать координаты всех мемо и искать например самый верхний или какой нужен.


 
Игорь Шевченко ©   (2004-08-31 11:55) [4]


> Судя по всему, по ID тоже искать бесполезно, ибо при каждом
> запуске он изменяется


Точно ?


 
inic ©   (2004-08-31 13:12) [5]

Точно ?
Взглянул на сурсы, Нет...

Вот, что в Controls.pas: TWinControl.CreateWnd():


if (GetWindowLong(FHandle, GWL_STYLE) and WS_CHILD <> 0) and
 (GetWindowLong(FHandle, GWL_ID) = 0) then
    SetWindowLong(FHandle, GWL_ID, FHandle);

Из этого следует, что если мы где-то не задали ID для нашего компонента (например, в конструкторе), то его ID будет равен его хендлу.

Конечно, если программа ProgsWindow - принадлежит alex732, то он может ее переделать с указанием четких ID (боюсь придется сабклассить TMemo).


 
Игорь Шевченко ©   (2004-08-31 14:33) [6]

inic ©   (31.08.04 13:12) [5]


> Конечно, если программа ProgsWindow - принадлежит alex732,
> то он может ее переделать с указанием четких ID


Сомневаюсь, что это ему поможет, так как Handle ему и надо найти, а если ID ему равен, то что аргумент для поиска неизвестен. Я думаю, что если обе программы ЕГО, то можно предусмотреть сообщение, посылаемой главному окну чужой программы, результатом которого будет Handle нужного контрола :)


 
GuAV ©   (2004-08-31 15:00) [7]

А не можно ли рассчитывать на то что порядок в EnumChildWinows будет одинаковым?


 
Игорь Шевченко ©   (2004-08-31 15:10) [8]

GuAV ©   (31.08.04 15:00) [7]

Порядок в EnumChildWindows зависит от Z-order"а дочерних окон, так что если его никто не меняет от запуска к запуску, то порядок будет один и тот же. Но вроде, для связи двух своих программ можно и попроще метод придумать.


 
GuAV ©   (2004-08-31 15:35) [9]


> Порядок в EnumChildWindows зависит от Z-order"а дочерних
> окон, так что если его никто не меняет от запуска к запуску,
> то порядок будет один и тот же.

Тогда понятно. То, что Z-order в VCL сохраняется - это даже я вижу :)

> Но вроде, для связи двух своих программ можно и попроще
> метод придумать.

Здесь Ваше если :)
> если обе программы ЕГО


 
alex732   (2004-08-31 18:18) [10]

Все получилось! Спасибо всем, кто помогал!


 
GrayFace ©   (2004-08-31 18:21) [11]

Можно GWL_USERDATA менять.



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.024 c
14-1095459260
123
2004-09-18 02:14
2004.10.10
ЭВМ былых времен.


1-1095952653
Prokop
2004-09-23 19:17
2004.10.10
TquikcReport


4-1094636556
HeKTO
2004-09-08 13:42
2004.10.10
Подскажите функцию определения координат чужого окна..забыл...


14-1095739399
R.O.O.T
2004-09-21 08:03
2004.10.10
Бесконечное сжатие


3-1095056516
Uran
2004-09-13 10:21
2004.10.10
Не идет выборка в EasyTable