我要在TListView中当鼠标右键点击在视图空白处和TListItem上时,分别做出不同的处理,可空白处可以响应,但TListItem上无法响应鼠标右键按下的信息。要怎么做呢?

解决方案 »

  1.   

    if ListView1.Selected <>nil then
    {
    TListItem上响应鼠标右键按下的信息
    }
    else
    {
    TListItem上空白处响应鼠标右键按下的信息
    }
      

  2.   

    但这要在哪个事件处理函数中写?
    我试过在OnMouseUp事件中写,但如果在TListItem上单击鼠标右键,并不会引发该事件,反而鼠标左键单击时会引发该事件,我怀疑TListItem没把鼠标右键通知消息发给它的父控件,只发送了鼠标左键通知消息。
      

  3.   

    在OnMouseDown或OnMouseUp中写都可以的:
    procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if button=mbRight then
        if ListView1.Selected <>nil then
          {
            TListItem上响应鼠标右键按下的信息
           }
        else
          {
            TListItem上空白处响应鼠标右键按下的信息
          }end;
    —————————————————————————————————
    中国鹰派
    杀光小日本,拒绝韩日货!
      

  4.   

    在ListItem上按下鼠标右键会引发OnMouseDown事件吗?
      

  5.   

    同意: xzhifei(飞) 
    也可以:
    procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
       if ssRight in shift then
       begin
          if Listview1.GetItemAt(x,y)<>nil then
          showmessage('OnItem')
          else
          showmessage('OnOthers');
       end;
    end;
    可以引发,右键也是点击啊~
      

  6.   

    实际上我也是按xzhifei(飞) 先生所示编码,可结果就是当你在某个ListItem上按下鼠标右键时,根本不会引发OnMouseDown或OnMouseUp事件。
      

  7.   

    不信你们可以试一下。
    另外我发现Boland的Delphi和C++ Builder在win2000的NTFS下会出问题,无法保存文件,提示文件名中包含非法字符,我在另一部没有格式化成NTFS的win2000下就没有这个问题。
      

  8.   

    我发现了,要在ListItem上双击鼠标右键才会引发OnMouseUp,为什么?