Форум: "WinAPI";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
ВнизПерехват сообщений Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c