Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

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

Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.034 c
4-1094743108
Sur
2004-09-09 19:18
2004.10.10
clipboard


1-1095798519
][ncognito
2004-09-22 00:28
2004.10.10
New()


3-1095147625
Sirus
2004-09-14 11:40
2004.10.10
Подскажите насчет транзакций???


3-1095170802
denis24
2004-09-14 18:06
2004.10.10
dbcombobox


1-1096286189
Mar_Gel
2004-09-27 15:56
2004.10.10
Подскажите, как поменять иконку в программе во время выполнения?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский