Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сообщение другой форме

3.4K
23 июля 2004 года
mag23
35 / / 04.07.2004
Знаю, что этот вопрос обсуждался не однакратно. Дайте простенький пример того, как послать текст из моего Edit в Edit на другой форме не входящий в мой проект. Caption другой формы и Edit на ней определить смогу.
3.4K
24 июля 2004 года
mag23
35 / / 04.07.2004
Цитата:
Originally posted by mag23
Знаю, что этот вопрос обсуждался не однакратно. Дайте простенький пример того, как послать текст из моего Edit в Edit на другой форме не входящий в мой проект. Caption другой формы и Edit на ней определить смогу.



Неужели никто не может помочь?
Делаю так.
HWND FF= FindWindow("TForm1", "FF");//Handle нужной формы
HWND ED=FindWindowEx(FF,NULL,"TEdit",NULL);//Handle Edit
SetWindowText(ED,"DDD");
Но ничего не происходит.
Если зделать
SetWindowText(FF,"DDD");
то паменяется Caption у формы

2.0K
24 июля 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by mag23


Неужели никто не может помочь?
Делаю так.
HWND FF= FindWindow("TForm1", "FF");//Handle нужной формы
HWND ED=FindWindowEx(FF,NULL,"TEdit",NULL);//Handle Edit
SetWindowText(ED,"DDD");
Но ничего не происходит.
Если зделать
SetWindowText(FF,"DDD");
то паменяется Caption у формы


Обсуждалось действительно много раз. Проблема вся в том что передается указатель на текст, и в адресном пространстве другой программы этот указатель не имеет смысла. Вот... А так полазь по форуму, тут где-то было то что тебе надо :)

3
25 июля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by HardMix

Обсуждалось действительно много раз. Проблема вся в том что передается указатель на текст, и в адресном пространстве другой программы этот указатель не имеет смысла. Вот... А так полазь по форуму, тут где-то было то что тебе надо :)



А причем тут указатель?
Причем тут адресное пространство другой программы?
Куда по твоему передается "указатель на текст" при вызове SetWindowText?
В адресное пространство другого процесса? :)
Тогда как же работает весь механизм оконных сообщений?
Зачем вообще тогда нужна оконная система?

To mag23:
Проблема в чем-то другом. Возможно, невалидные HWND. Ты их проверял?
Если ты хочешь получить HWND стандартного контролла Edit, то уверяю тебя, класс стандартного контрола носит название не TEdit (это из Борланда), а EDIT.

Кстати, если ты задаешь вопрос в разделе Win32 API, то пиши "окно", а не "форма". В Windows (win32) нет никаких "форм", их придумал Борланд, чтоб путать начинающих программистов. :D

2.0K
26 июля 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by Green


А причем тут указатель?
Причем тут адресное пространство другой программы?
Куда по твоему передается "указатель на текст" при вызове SetWindowText?
В адресное пространство другого процесса? :)
Тогда как же работает весь механизм оконных сообщений?
Зачем вообще тогда нужна оконная система?


Дык окно то принадлежит другой программе.
Сказано ж:

Цитата:
не входящий в мой проект.

.
Если сообщением не передается указатель на текст (я имею ввиду конкретное WM_SETWINDOWTEXT) то тогда что ж по-твоему передается? :) А когда данное сообщение посылается окну другой программы указатель теряет смысл. Сча пороюсь в мануале. Пока ничем кроме примера доказать свои слова не могу :)

6.7K
01 августа 2004 года
TylerDurden
20 / / 26.07.2004
Насчет SetWindowText:
Из MSDN :
However, SetWindowText cannot change the text of a control in another application.

И еще, от-туда же:
To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText

или, юзай SetDlgItemText(hWnd, uId,text)
В твоем случае:

SetDlgItemText(FF,GetDlgCtrlID(ED),"DDD")
2.0K
01 августа 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by TylerDurden
Насчет SetWindowText:
Из MSDN :
However, SetWindowText cannot change the text of a control in another application.

И еще, от-туда же:
To set the text of a control in another process, send the WM_SETTEXT message directly instead of calling SetWindowText

или, юзай SetDlgItemText(hWnd, uId,text)
В твоем случае:

SetDlgItemText(FF,GetDlgCtrlID(ED),"DDD")


Хм, а ты пробовал их юзать (SetDlgItemText)? Интересно, помогает?

6.7K
02 августа 2004 года
TylerDurden
20 / / 26.07.2004
Цитата:
Originally posted by HardMix

Хм, а ты пробовал их юзать (SetDlgItemText)? Интересно, помогает?


Помогает... А в чем, собственно, проблема?

2.0K
02 августа 2004 года
HardMix
78 / / 25.06.2003
Цитата:
Originally posted by TylerDurden

Помогает... А в чем, собственно, проблема?


Нет проблемы :D Говорю - интересно :)

448
02 августа 2004 года
Mr. API
105 / / 20.06.2000
Цитата:
Originally posted by Green


А причем тут указатель?
Причем тут адресное пространство другой программы?
Куда по твоему передается "указатель на текст" при вызове SetWindowText?
В адресное пространство другого процесса? :)
Тогда как же работает весь механизм оконных сообщений?
Зачем вообще тогда нужна оконная система?

To mag23:
Проблема в чем-то другом. Возможно, невалидные HWND. Ты их проверял?
Если ты хочешь получить HWND стандартного контролла Edit, то уверяю тебя, класс стандартного контрола носит название не TEdit (это из Борланда), а EDIT.

Кстати, если ты задаешь вопрос в разделе Win32 API, то пиши "окно", а не "форма". В Windows (win32) нет никаких "форм", их придумал Борланд, чтоб путать начинающих программистов. :D



Дейсвительно, каждый прцесс имеет собственное виртуальное адресное пространство, которое скрыто от других процессов.
Что же касается WM_SETTEXT, то процитирую товарища Рихтера:

Цитата:

Рассмотрим такой вызов:
SendMessage(FindWindow(NULL, "Calculator"), WM_SETTEXT, 0, (LPARAM) "A Test Caption" );
Вроде бы все достаточно безобидно определяется описатель окна Calculator и делается попытка изменить его заголовок на «A Test Caption». Но приглядимся к тому, что тут происходит. В lParam передается адрес строки (с новым заголовком), расположенной в адрес ном пространстве Вашего процесса. Получив это сообщение, оконная процедура программы Calculator берет lParam и пытается манипулировать чем-то, что, «по ее мнению», является указателем на строку с новым заголовком.
Но адрес в lParam указывает на строку в адресном пространстве Вашего процесса, а не программы Calculator. Вот Вам и долгожданная неприятность — нарушение доступа к памяти. Но если Вы все же выполните показанную ранее строку, все будет работать нормально. Что за наваждение?
А дело в том, что система отслеживает сообщения WM_SETTEXT и обрабатывает их не так, как большинство других сообщений. При вызове SendMessage внутренний код функции проверяет, не пытаетесь ли Вы послать сообщение WM_SETTEXT. Если это так, функция копирует строку из Вашего адресного пространства в проекцию файла и делает его доступным другому процессу. Затем сообщение посылается пото ку другого процесса. Когда поток-приемник готов к обработке WM_SETTEXT, он оп ределяет адрес общей проекции файла (содержащей копию строки) в адресном про странстве своего процесса. Параметру lParam присваивается значение именно этого адреса, и WM_SETTEXT направляется нужной оконной процедуре. После обработки этого сообщения, проекция файла уничтожается

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог