DelphiIDEのように、PageControlのTabを右クリックしてメニューを表示する方法。
TPageControl の OnContextPopup イベントに次のように書く。ポイントは、GetHitTestInfoAt でタブがクリックされたかどうか調べること。htOnItemが返ればタブがクリックされている。
procedure TForm1.PageControl1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
var
P: TPoint;
Index: Integer;
begin
//クリックした位置はタブ?
if htOnItem in PageControl1.GetHitTestInfoAt(MousePos.X, MousePos.Y) then
begin
//タブを切り替え
Index := PageControl1.IndexOfTabAt(MousePos.X, MousePos.Y);
if PageControl1.ActivePageIndex <> Index then
PageControl1.ActivePageIndex := Index;
//ローカルな座標を画面座標に変換
P := PageControl1.ClientToScreen(MousePos);
//メニューを表示
PopupMenu1.Popup(P.X, P.Y);
Handled := True;
end;
end;