TabSheetのタブを右クリックでメニューを表示

DelphiIDEのように、PageControlのTabを右クリックしてメニューを表示する方法。

tabpopup.jpg

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;

Tips

ブログ

リンク