最近使用ListView遇到一个问题;首先我给ListView的PopupMenu设置了一个PopupMenu控件(PopupMenu01);
然后在 ListView的 ColumnRightClick(标题的右键事件中)加入:var
  p : TPoint;
begin
  p := TListView(Sender).ClientToScreen(Point);
  PopupMenu02.Popup(p.X,p.Y);
end;但是在实际的效果中,在ListView在vsReport模式下在标题点击右键之后,在弹出的右键菜单中
点击一项,原本在ListView设置的PopupMenu01也会弹出来;后来试了一个方法,把ListView的PopupMenu属性去掉,改为在ListView的MouseUp事件来实现
对应的右键菜单功能,代码如下:var
  p : TPoint;
begin
  if Button = mbRight then
  begin
    p := TListView(Sender).ClientToScreen(Point(X,Y));
    PopupMenu01.Popup(p.X,p.Y);
  end;
end;按上面的方式修改后,开始的问题可以解决,但是新的问题又出现了,就是我点击ListItem之后,右键
弹不出来了,只有选中空白的地方点击鼠标右键才会有右键菜单;问题就是上面描述的,请大家帮忙支招,谢谢;

解决方案 »

  1.   

    使用一个PopupMenu01,
    在PopupMenu1Popup(Sender: TObject);事件中根据不同的需要设置每个菜单项TMenuItem的visible属性
      

  2.   

    使用了一个比较麻烦的办法解决了:
    首先在ListView的 ColumnRightClick(标题的右键事件中)加入:var
      p : TPoint;
    begin
      p := TListView(Sender).ClientToScreen(Point);
      PopupMenu02.Popup(p.X,p.Y);
      PopupMenu01.Tag := 1;
    end;在ListView的 MouseMove 事件恢复对应的标志
    begin
      PopupMenu01.Tag := 0;
    end;在对应PopupMenu01 的OnPopup 事件中 判断对应的标志信息:if PopupMenu01.Tag = 1 then
     Abort;通过上面的方法就可以实现,不过有点麻烦,不知道是否还有其他更好的方法来处理;