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

Вниз

Перехват сообщений   Найти похожие ветки 

 
Rubi   (2007-09-04 22:57) [0]

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


 
Инс ©   (2007-09-04 23:05) [1]

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


 
ANTPro ©   (2007-09-05 02:32) [2]

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


 
Инс ©   (2007-09-05 02:36) [3]


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

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


 
ANTPro ©   (2007-09-05 02:46) [4]

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

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


 
Инс ©   (2007-09-05 02:49) [5]


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

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

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.


 
Leonid Troyanovsky ©   (2007-09-05 09:23) [6]


> 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.


 
Leonid Troyanovsky ©   (2007-09-05 09:35) [7]


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

> Прав.

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

--
Regards, LVT.


 
ANTPro ©   (2007-09-05 13:14) [8]

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

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


 
Rubi   (2007-09-05 20:20) [9]

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


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

А WM_GETTEXT ?



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
15-1207574311
Дмитрий С
2008-04-07 17:18
2008.05.18
Свой протокол для IE


15-1207028851
Alien1769
2008-04-01 09:47
2008.05.18
Delphimaster выкупает один представитель...


3-1196084789
AntonUSAnoV
2007-11-26 16:46
2008.05.18
пропадает полоса прокрутки в dbgrid


4-1189112766
Rubi
2007-09-07 01:06
2008.05.18
Отправка 1 байта через com-порт


3-1197624704
novill
2007-12-14 12:31
2008.05.18
IB 7.5 Размер страницы.