如何设置ListView标题栏的弹出菜单以及项目弹出菜单?

And*_*rew 7 delphi listview popupmenu

我有一个ListView ViewStyle = vsReport和两个弹出菜单:

  1. 列弹出菜单,我想在用户右键单击标题栏时打开它
  2. 当用户右键单击任何列表项/子项或项目下方的空白时,必须打开项目弹出菜单.

显示菜单最正确的方法是什么?我应该处理哪些事件?

问题是当我设置ListView.PopupMenu属性时,右键单击ListView的客户端矩形中的任何点后出现弹出菜单.

当我处理ListView.OnColumnRightClick事件时,如果仅在单击列标题后触发,则排除标题栏的可用空间(在列的右侧).

LisView.OnMouseUp只有在右键单击项目下方的空白后才会触发事件.

Ser*_*yuz 8

您不必使用PopupMenulistview 的属性,不设置它,您可以将OnContextPopup事件处理器附加到事件并根据位置启动您想要的任何弹出菜单.例:

procedure TForm1.ListViewContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  HeaderRect: TRect;
  Pos: TPoint;
begin
  GetWindowRect(ListView_GetHeader(ListView.Handle), HeaderRect);
  Pos := ListView.ClientToScreen(MousePos);
  if PtInRect(HeaderRect, Pos) then
    PopupMenuColumns.Popup(Pos.X, Pos.Y)
  else
    PopupMenuItems.Popup(Pos.X, Pos.Y);
end;
Run Code Online (Sandbox Code Playgroud)