请各位高手帮忙:如何在listView中显示下拉菜单!

解决方案 »

  1.   

    GetCursorPos获得当前鼠标位置,去看看sdk帮助
      

  2.   

    应该是直接调用API函数才能实现,因为微软的软件有这样的功能
    关注ING
      

  3.   

    是不是要点击item的下面的CAPTION就显示下拉列表?
      

  4.   

    //在FORM里是全局的!
    var
      CurrItem :TListItem;
      CurrItemLeft,CurrItemRight, CurrItemTop, CurrItemBottom  :integer;
    //以下代码保存当前节点的位置,然后在ITEM的点击事件里通过这些全局变量来设置下拉列表位置!
    procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    begin
      CurrItem := Item;
      CurrItemLeft := Item.DisplayRect.left;
      CurrItemRight := Item.DisplayRect.Right;
      CurrItemTop := Item.DisplayRect.Top;
      CurrItemBottom := Item.DisplayRect.Bottom;
    end;
      

  5.   

    是的,点击caption的时候显示下拉列表
    有好方法吧,赶紧告诉小弟吧!
      

  6.   

    关联ListBox的popmenu,然后在弹出菜单的OnPopup事件控制
      

  7.   

    啊,说错了,ITEM没有单击事件的!你可以在tlistview的mousedown里通过这个事件传入的X,Y坐标和上面得到的那些全局变量,来确认位置的!
      

  8.   

    WuLoveXue(晕死,又这样) :老兄,这个好像编译不能通过,你的delphi是多少,我是6
    CurrItemLeft := Item.DisplayRect.left;
      CurrItemRight := Item.DisplayRect.Right;
      CurrItemTop := Item.DisplayRect.Top;
      CurrItemBottom := Item.DisplayRect.Bottom;
    报参数不够,麻烦再看一下谢谢
      

  9.   

    还是不行,因为的mousedown那个函数没有item参数
      

  10.   

    mousedown里不需要item参数,因为你在change事件里已经得到了当前节点,也就是全局的CurrItem!
     我的是DELPHI7,你看看帮助啦,看看DisplayRect这个方法是不是要参数!
      

  11.   

    在当前鼠标Position弹出PupupMenu不行吗?
      

  12.   

    我没有试过,不过我还是想实现像combobox下拉框的效果
    popupmemu应该没有那个效果吧
      

  13.   

    我只是想在ListView的个SubItem下面实现这个效果,其他的栏应该是只读的,这样的话,关联PopupMemu好像是不行的,有没有具体一点的好办法,提示,谢谢了!
      

  14.   

    我是想实现下拉菜单,上面有位老兄说用popmenu可以实现,我试了一下好像不行。
      

  15.   

    var
      Pos:TPoint;
    begin
    GetCursorPos(pos);
    popupmenu1.Popup(pos.X,pos.Y);
    end;
      

  16.   

    帮忙,顶
    下学期我也得自学delphi,好惨,什么都不会
      

  17.   

    procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    var
      Pos:TPoint;
    beginif ListView1.Selected<>nil then
    BEGIN
    GetCursorPos(pos);
    popupmenu1.Popup(pos.X,pos.Y);
    END;
    end;
      

  18.   

    先说明一点,本事例单击是在listview的每一次第一列出一个下拉列表框,要在其他列出现,可能要用GetCursorPos(pos);来确置了,你自己完善吧,哈哈!unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        ComboBox1: TComboBox;
        procedure FormDestroy(Sender: TObject);
        procedure ListView1Click(Sender: TObject);
      private
        FComboBox: TComboBox;
        { Private declarations }
        procedure CreateCombobox(var aComboBox:TCombobox;aLeft, aTop: integer);
        procedure MyComboBoxChange(Sender: TObject);
        procedure MyComboBoxExit(Sender: TObject);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.CreateCombobox(var aComboBox: TCombobox;
      aLeft, aTop: integer);
    begin
      aComboBox := TComboBox.Create(Self);
      aComboBox.Parent := Self;
      aComboBox.OnChange := MyComboBoxChange;
      aComboBox.OnExit := MyComboBoxExit;
      aComboBox.DropDownCount := 5;
      aComboBox.Style := csDropDown;
      aComboBox.Items.Add('字段');
      aComboBox.Items.Add('aaa');
      aComboBox.Items.Add('bbb');
      aComboBox.Items.Add('ccc');
      aComboBox.Items.Add('其他类型');
      aComboBox.Left := aLeft + ListView1.Left + 1;
      aComboBox.Top := aTop + ListView1.Top + 1;
      aComboBox.Width := 50;
      aComboBox.BringToFront;
      aComboBox.SetFocus;
    end;procedure TForm1.MyComboBoxChange(Sender: TObject);
    begin
      if Assigned(ListView1.Selected) then
        ListView1.Selected.Caption := TCombobox(Sender).Text;
    end;procedure TForm1.MyComboBoxExit(Sender: TObject);
    begin
      try
        FComboBox.Free;
      except
      end;
      FComboBox := nil;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      lp: integer;
    begin
      for lp := ComponentCount - 1 downto 0 do
      begin
        if Components[lp] is TCombobox then
        begin
          TCombobox(Components[lp]).Free;
        end;
      end;
      FComboBox := nil;
    end;procedure TForm1.ListView1Click(Sender: TObject);
    begin
      FormDestroy(Sender);
      if Assigned(ListView1.Selected) then
      CreateCombobox(FComboBox, ListView1.Selected.Left, ListView1.Selected.Top);
    end;end.