1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtDlgs, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
oldBtnProc : TWndMethod;
Procedure MyBtnWndProc( Var msg : TMessage );
public
{ Déclarations publiques }
ABitmap:TBitmap;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ABitmap:=TBitmap.Create;
// Sauvegarde la WndProc actuelle du bouton
oldBtnProc := Button1.WindowProc;
// Affecte une nouvelle procédure de fenêtre.
Button1.WindowProc := MyBtnWndProc;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Coucou !');
end;
procedure TForm1.MyBtnWndProc(var msg: TMessage);
Var hdcBtn : HDC;
btnCanvas : TControlCanvas;
i,j:Integer;
AColor,OldColor:TColor;
Begin
OldBtnProc(msg);
If (msg.Msg = BM_SETSTATE) Or (msg.Msg = WM_PAINT) Or (msg.Msg = WM_NCPAINT) Then
Begin
btnCanvas := TControlCanvas.Create;
Try
btnCanvas.Control:=Button1;
OldColor:=TColor(GetTextColor(btnCanvas.Handle));
for i:=1 to Button1.ClientWidth-2 do
for j:=1 to Button1.ClientHeight-2 do
begin
AColor:=btnCanvas.Pixels[i,j];
if AColor<>OldColor
then btnCanvas.Pixels[i,j]:=clyellow;
end;
Finally
btnCanvas.Free;
End;
End;
End;
end. |
Partager