应该是最终答案吧。综合bdmh的代码 function getrect(Sender:Tobject;index:Integer):Trect; var RE:Trect; begin SendMessage(rzpagecontrol1.Handle, TCM_GETITEMRECT, I, LPARAM(@Re)); result:=Re; end; procedure TForm1.pgc1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i:Integer; R:TRect; p:TPoint; begin GetCursorPos(p); for i := 0 to pgc1.PageCount - 1 do begin R := getRect; if (R.Left<=X) and (R.Right>=X) and (R.Top<=Y) and (R.Bottom>=Y) then begin pgc1.ActivePageIndex := i; pm1.Popup(p.X,p.Y);//弹出菜单 break; end; end; end;
getRect(rzpagecontrol1,i); ok
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, RzTabs, StdCtrls,CommCtrl ;type TForm1 = class(TForm) Button1: TButton; RzPageControl1: TRzPageControl; TabSheet1: TRzTabSheet; TabSheet2: TRzTabSheet; PopupMenu1: TPopupMenu; a1: TMenuItem; b1: TMenuItem; procedure RzPageControl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } function getrect(Sender:Tobject;index:Integer):Trect; end;var Form1: TForm1;implementation{$R *.dfm} function TForm1.getrect(Sender:Tobject;index:Integer):Trect; var RE:Trect; i:Integer; begin SendMessage(RzPageControl1.Handle, TCM_GETITEMRECT, I, LPARAM(@Re)); result:=Re; end; procedure TForm1.RzPageControl1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i:Integer; R:TRect; p:TPoint; begin GetCursorPos(p); for i := 0 to RzPageControl1.PageCount - 1 do begin R := getRect(rzpagecontrol1,i); if (R.Left <=X) and (R.Right>=X) and (R.Top <=Y) and (R.Bottom>=Y) then begin RzPageControl1.ActivePageIndex := i; PopupMenu1.Popup(p.X,p.Y);//弹出菜单 break; end; end; end;end.执行不成功
var
RE:Trect;
begin
SendMessage(rzpagecontrol1.Handle, TCM_GETITEMRECT, I, LPARAM(@Re));
result:=Re;
end;
procedure TForm1.pgc1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i:Integer;
R:TRect;
p:TPoint;
begin
GetCursorPos(p);
for i := 0 to pgc1.PageCount - 1 do
begin
R := getRect;
if (R.Left<=X) and (R.Right>=X) and (R.Top<=Y) and (R.Bottom>=Y) then
begin
pgc1.ActivePageIndex := i;
pm1.Popup(p.X,p.Y);//弹出菜单
break;
end;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, RzTabs, StdCtrls,CommCtrl ;type
TForm1 = class(TForm)
Button1: TButton;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
PopupMenu1: TPopupMenu;
a1: TMenuItem;
b1: TMenuItem;
procedure RzPageControl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
function getrect(Sender:Tobject;index:Integer):Trect;
end;var
Form1: TForm1;implementation{$R *.dfm}
function TForm1.getrect(Sender:Tobject;index:Integer):Trect;
var
RE:Trect;
i:Integer;
begin
SendMessage(RzPageControl1.Handle, TCM_GETITEMRECT, I, LPARAM(@Re));
result:=Re;
end;
procedure TForm1.RzPageControl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
i:Integer;
R:TRect;
p:TPoint;
begin
GetCursorPos(p);
for i := 0 to RzPageControl1.PageCount - 1 do
begin
R := getRect(rzpagecontrol1,i);
if (R.Left <=X) and (R.Right>=X) and (R.Top <=Y) and (R.Bottom>=Y) then
begin
RzPageControl1.ActivePageIndex := i;
PopupMenu1.Popup(p.X,p.Y);//弹出菜单
break;
end;
end; end;end.执行不成功