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

Вниз

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

 
SeZuka ©   (2004-12-08 10:59) [0]

Мастера, подскажите. Пишу свой компонент, который должен следить за визуальными компонентами на форме, т.е. перехватывать события типа изменения их состояния, положения и размеров. Как это сделать?


 
Игорь Шевченко ©   (2004-12-08 11:03) [1]

Например, так:

unit HSControlMessagePumpHook;

interface
uses
 HSObjectList, Controls, Messages;

type
 THSControlMessagePumpHook = class
 private
   FControl : TControl;
   FOldWndProc : TWndMethod;
   procedure HookWndProc (var Message : TMessage);
 public
   constructor Create (AControl : TControl);
 end;

 THSControlMessagePumpHookList = class(THSObjectList)
 end;

const EnableMsgHook = true;

implementation
uses
 Windows, SysUtils, MessageLogger;

{ THSControlMessagePumpHook }

constructor THSControlMessagePumpHook.Create(AControl: TControl);
begin
 FControl := AControl;
 FOldWndProc := FControl.WindowProc;
 FControl.WindowProc := HookWndProc;
end;

procedure THSControlMessagePumpHook.HookWndProc(var Message: TMessage);
begin
 if Assigned(FControl) and (FControl IS TWinControl) and
    TWinControl(FControl).HandleAllocated then
   LogMessage(Format("%s.WndProc", [FControl.Name]),
              TWinControl(FControl).Handle, Message.Msg,
              Message.WParam, Message.LParam)
 else
   LogMessage(Format("%s.WndProc", [FControl.Name]),
              0, Message.Msg,
              Message.WParam, Message.LParam);
 FOldWndProc(Message);
 LogMsgReturn(Format("%s.WndProc", [FControl.Name]), Message);
end;

end.


И в нужной форме я перекрываю метод .Loaded


type
 TForm1 = class(TForm)
....
 protected
   procedure Loaded; override;
....
 end;

.....

procedure TForm1.Loaded;
var
 I: Integer;
begin
 inherited;
 if EnableMsgHook then begin
   FHooks := THSControlMessagePumpHookList.Create;
   FHooks.Add(THSControlMessagePumpHook.Create(Self));
   for I:=0 to Pred(ComponentCount) do
     if Components[I] is TControl then
       FHooks.Add(THSControlMessagePumpHook.Create(TControl(Components[I])));
 end;
end;
/CODE>

С уважением,


 
SeZuka ©   (2004-12-08 11:19) [2]

2 Игорь Шевченко ©   (08.12.04 11:03) [1]
Спасибо! Буду пробовать.



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

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

Наверх




Память: 0.47 MB
Время: 0.025 c
4-1099941230
FLEA_ZNTU
2004-11-08 22:13
2004.12.26
История запусков приложения


3-1101392577
kaktus
2004-11-25 17:22
2004.12.26
Delphi и MySQL


3-1101295409
VitaWED
2004-11-24 14:23
2004.12.26
Название столбца.


9-1093801048
Sewix
2004-08-29 21:37
2004.12.26
Вывод текста в OpenGL


11-1084117134
a_legayda@mtu-net.ru
2004-05-09 19:38
2004.12.26
TKOLTabControl