加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:16:24 所属栏目:大数据 来源:网络整理
导读:我有一个带ViewStyle = vsReport的ListView和两个弹出菜单: 列弹出菜单,我想在用户右键单击标题栏时打开它 项目弹出菜单,必须在用户右键单击任何列表项/子项或项目下方的空白时打开. 显示菜单的最正确方法是什么?我应该处理哪些事件? 问题是当我设置ListV
我有一个带ViewStyle = vsReport的ListView和两个弹出菜单:

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

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

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

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

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

解决方法

您不必使用listview的PopupMenu属性,保持未设置状态,并且可以将处理程序附加到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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读