重载控件的WndProc方法,让它相应WM_LBUTTONDOWN消息。只要是从TControl继承的,都有这个方法。这算不算修改控件?

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
        FOldWndProc: TWndMethod;
        procedure NewWndProc(var Msg: TMessage);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.FormCreate(Sender: TObject);
    begin
      FOldWndProc := Edit1.WindowProc;
      Edit1.WindowProc := NewWndProc;
    end;procedure TForm1.NewWndProc(var Msg: TMessage);
    begin
      if Msg.Msg = WM_LBUTTONDOWN then
        Caption := 'MouseDown!';
      FOldWndProc(Msg);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Caption := 'Click!';
    end;end.