unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Memo1: TMemo;
Label1: TLabel;
Panel1: TPanel;
Image1: TImage;
Image2: TImage;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées
}
procedure MonAppliMessages(var Msg: TMsg;
var Handled: Boolean);
procedure WndProc(var Message: TMessage);
override;
procedure Dispatch(var Message);override
;
procedure DefaultHandler(var Message); override
;
procedure WMLBUTTONDOWN(var Message:Tmessage);
message WM_LBUTTONDOWN;
public
{ Déclarations publiques }
procedure PanelWndProc(var Message: TMessage);
end;
var
Form1: TForm1;
OldPanelWndProc:TWndMethod;
implementation
{$R *.DFM}
procedure TForm1.MonAppliMessages(var Msg: TMsg; var
Handled: Boolean);
begin
if Msg.message=WM_LBUTTONDOWN then
begin
Edit1.text:=inttostr(Msg.wParam);
Edit2.text:=inttostr(Msg.lParam);
Edit3.text:=inttostr(Msg.time);
Edit3.color:=clBlue;
Memo1.Lines.Add('intercepté : niveau 1 - MonAppliMessages.
Hwnd='+inttostr(Msg.hwnd));
Memo1.Lines.Add( 'wParam='+Edit1.text);
Memo1.Lines.Add( 'lParam='+Edit2.text);
Memo1.Lines.Add( 'time='+Edit3.text);
end;
inherited
end;
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_LBUTTONDOWN then
begin
Edit1.text:=inttostr(Message.WParam);
Edit2.text:=inttostr(Message.LParamHi)+'/'+inttostr(Message.LParamLo);
Edit3.text:=inttostr(Message.Result);
Edit3.color:=clred;
Memo1.Lines.Add('intercepté : niveau 2 - WndProc');
Memo1.Lines.Add( 'wParam='+Edit1.text);
Memo1.Lines.Add( 'lParam='+Edit2.text);
Memo1.Lines.Add( 'result='+Edit3.text);
end;
inherited ;
end;
procedure TForm1.Dispatch(var Message);
begin
if Tmessage(Message).msg = WM_LBUTTONDOWN then
begin
Edit1.text:=inttostr(Tmessage(Message).WParam);
Edit2.text:=inttostr(Tmessage(Message).LParamHi)+'/'+inttostr(Tmessage(
Message).LParamLo);
Edit3.text:=inttostr(Tmessage(Message).Result);
Edit3.color:=clyellow;
Memo1.Lines.Add('intercepté : niveau 3 - Dispatch');
Memo1.Lines.Add( 'wParam='+Edit1.text);
Memo1.Lines.Add( 'lParam='+Edit2.text);
Memo1.Lines.Add( 'result='+Edit3.text);
end;
inherited;
end;
procedure TForm1.WMLBUTTONDOWN(var Message:Tmessage);
begin
Edit1.text:=inttostr(Message.WParam);
Edit2.text:=inttostr(Message.LParamHi)+'/'+inttostr(Message
.LParamLo);
Edit3.text:=inttostr(Message.Result);
Edit3.color:=cllime;
Memo1.Lines.Add('intercepté : niveau 4 - Proc WMLBut') ;
Memo1.Lines.Add( 'wParam='+Edit1.text);
Memo1.Lines.Add( 'lParam='+Edit2.text);
Memo1.Lines.Add( 'result='+Edit3.text);
inherited;
end;
procedure TForm1.DefaultHandler(var Message);
begin
if Tmessage(Message).msg = WM_LBUTTONDOWN then
begin
Edit1.text:=inttostr(Tmessage(Message).WParam);
Edit2.text:=inttostr(Tmessage(Message).LParamHi)+'/'+inttostr(Tmessage(
Message).LParamLo);
Edit3.text:=inttostr(Tmessage(Message).Result);
Edit3.color:=clAqua;
Memo1.Lines.Add('intercepté : niveau 5 - DefaultHandler');
Memo1.Lines.Add( 'wParam='+Edit1.text);
Memo1.Lines.Add( 'lParam='+Edit2.text);
Memo1.Lines.Add( 'result='+Edit3.text);
end;
inherited;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Edit3.color:=cllime;
Memo1.Lines.Add('intercepté : niveau 6 - gest. OnMouseDown') ;
end;
procedure TForm1.PanelWndProc(var Message: TMessage);
begin
if Message.Msg = WM_LBUTTONDOWN then
begin
Memo1.Lines.Add('intercepté : niveau WndProc du Panel') ;
Edit3.color:=clteal
end
else //obligatoire pour les autres messages
du panel non gérés ici
OldPanelWndProc(Message); //appel à
l'ancien gestionnaire=WndProc
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage:= MonAppliMessages;
OldPanelWndProc:=Panel1.WindowProc;//stockage de
l'adresse de WndProc
Panel1.WindowProc:= PanelWndProc //liaison avec
le nouveau gestionnaire
end;
end.