unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) btn1: TButton; btn2: TButton; PageControl1: TPageControl; ts1: TTabSheet; ts2: TTabSheet; procedure FormCreate(Sender: TObject); procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure AppMsg(var Msg: TMsg; var Handled: Boolean); end; var Form1: TForm1; implementation {$R *.dfm} { TForm1 } procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean); var i:integer; begin case Msg.message of WM_LBUTTONDOWN, WM_LBUTTONDBLCLK: begin //拦截PageControl控件的Tab标签切换事件 if Msg.hwnd=PageControl1.Handle then begin for i:=0 to PageControl1.PageCount-1 do begin if PtInRect(PageControl1.TabRect(i),PageControl1.ScreenToClient(Msg.pt)) then begin Handled:=true; ShowMessage(IntToStr(i)); end; end; end; //拦截Button按钮点击事件 if Msg.hwnd=btn1.Handle then begin Handled:=true; ShowMessage('bbbb'); end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage:=AppMsg; end; procedure TForm1.btn1Click(Sender: TObject); begin ShowMessage('aaaa'); end; end.