Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
15-1205425151
Real
2008-03-13 19:19
2008.05.18
Странности с ShowModal


3-1196882052
jiny
2007-12-05 22:14
2008.05.18
Как вставить результат процедуры в селект Advantage Database


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


15-1207325337
tesseract
2008-04-04 20:08
2008.05.18
IPhone vs другие


2-1208504519
lewka-serdceed
2008-04-18 11:41
2008.05.18
список в ячейке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский