Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перехват сообщений [D7, WinXP]


Rubi ©   (2007-09-04 22:57:00) 

Я посылаю сообщение в Edit: SendMessage(EditWnd, WM_SETTEXT, 0, Integer(PChar(Txt))); при этом мне надо отследить, получило ли окно это сообщение. Может можно сделать хуками, но не понимаю как написать функцию фильтрации. Если кто может, подскажите пожайлуста. А может еще как можно отследить.


Undri   (2007-09-07 13:12:00) [1]

А WM_GETTEXT ?


Rubi   (2007-09-05 20:20:00) [2]

Функция SendMessage действительно возвращает 1, но, как правильно сказал ANTPro, это означает, что функция обработана. А как можно узнать, что ее предназначение выполнено. То есть отражен ли данный текст в поле EditWnd (это текстовое поле). GetWindowText не помогает.


ANTPro   (2007-09-05 13:14:00) [3]

> [5] Инс ©   (05.09.07 02:49)

Да, я это и сказал.


Leonid Troyanovsky   (2007-09-05 09:35:00) [4]


> Leonid Troyanovsky ©   (05.09.07 09:23) [6]

> Прав.

Конечно, это так, если контрол не сабклассирован,
т.е., не меняет значения, возвращаемого DefWindowProc.

--
Regards, LVT.


Leonid Troyanovsky   (2007-09-05 09:23:00) [5]


> ANTPro ©   (05.09.07 02:32) [2]

> Скорей всего имелось введу реакция на сообщение... SendMessage
> вернет 1, если все прошло хорошо %)

Прав.
Но, правильнее проверять <> 0, т.к., для WM_SETTEXT
The return value is TRUE if the text is set.

Ну, и пока другой поток не обработает сообщение,
результат не вернется. Т.е., в общем случае, надо
использовать SendMessageTimeout.

--
Regards, LVT.


Инс   (2007-09-05 02:49:00) [6]


> так я понимаю?

Вот код, который демонстрирует то, как надо понимать мои слова:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   procedure WMUser(var Mes: TMessage); message WM_USER;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Caption:=IntToStr(SendMessage(Handle,WM_USER,0,0));
end;

procedure TForm1.WMUser(var Mes: TMessage);
begin
 Mes.Result:=15; // Установи здесь 0, 1, 100 - что угодно. Результат увидишь
end;

end.


ANTPro   (2007-09-05 02:46:00) [7]

> [3] Инс ©   (05.09.07 02:36)
> Не прав, конечно. SendMessage всегда возвращает результат
> оконной функции.

Т.е., была обработанна она или нет, а вот выполнено ли ее предназначение - это уже другой вопрос, так я понимаю?


Инс   (2007-09-05 02:36:00) [8]


> Или я не прав?

Не прав, конечно. SendMessage всегда возвращает результат оконной функции.


ANTPro   (2007-09-05 02:32:00) [9]

Скорей всего имелось введу реакция на сообщение... SendMessage вернет 1, если все прошло хорошо %)
Или я не прав?


Инс   (2007-09-04 23:05:00) [10]

Что значит отследить? Естественно получит, если вы дескриптор окна верный укажете. А проверить это можно с помощью IsWindow


Наверх

Титульная страница Поиск, карта сайта Написать письмо