Главная страница
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.043 c
6-1092001822
-=Iton=-
2004-08-09 01:50
2004.12.26
Firewall


1-1103010929
Gek1
2004-12-14 10:55
2004.12.26
Переход на Delphi 2005


14-1102600410
Kirill
2004-12-09 16:53
2004.12.26
Пропали компоненты


1-1102820968
Rooster
2004-12-12 06:09
2004.12.26
проблема с TTreeView


1-1102582279
Maxim_S~~
2004-12-09 11:51
2004.12.26
прогресс при загрузке программы