一个POPUMENU菜单,其中ITEM的内容是动态附与的,不是事先设置好的,请问这样要响应相关双击事件,并再取点击打ITEM的内容是怎样的处理的。

解决方案 »

  1.   

    动态添加的MenuItem可以给事件赋值啊
    比如Item.OnClick = XXX;
      

  2.   

    一个例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Menus;type
      TForm1 = class(TForm)
        PopupMenu1: TPopupMenu;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        procedure PopupMenuItemClick(Sender: TObject);
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    var
      iTag : Integer;procedure TForm1.FormCreate(Sender: TObject);
    begin
      PopupMenu := PopupMenu1;
      iTag := 1;
    end;procedure TForm1.PopupMenuItemClick(Sender: TObject);
    begin
      ShowMessage(Format('Tag: %d,  Caption: %s', [TMenuItem(Sender).Tag, TMenuItem(Sender).Caption]));
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      AItem : TMenuItem;
    begin
      //创建动态PopupMenu的Item
      AItem := TMenuItem.Create(PopupMenu1);
      AItem.Caption := '动态PopupMenu ' + IntToStr(iTag);
      AItem.Tag := iTag;
      AItem.OnClick := PopupMenuItemClick;
      PopupMenu1.Items.Add(AItem);
      inc(iTag);
    end;end.
      

  3.   


    procedure TForm1.HandleItemClick(Sender: tobject);
    begin
     showmessage('点击了菜单项');
    end;procedure TForm1.CreateMenu;
    begin
      //....创建菜单项代码
      MenuItem.OnClick := HandleItemClick;
    end;
      

  4.   

    harryfin就是这样可以,已经可以捕捉到了响应事件了,我也已作到了这一步,但是现在却还是没有办法判断是按下了那个添加ITEM,现在返回都是第一个值(也就是默认的值),还没有办法在响应事件去判断是按下了第几项,
     private   
        procedure myclick(Sender:   TObject);
    var
      Form1: TForm1;
      NewItem:TmenuItem;implementation{$R *.dfm}
    procedure TForm1.myclick(Sender:   TObject);
    var
    i:integer;
    begin
    showmessage(newitem.Caption);//这样的话只是返回第一项值‘5678’,不管点‘1234’也好都是返回‘5678’ {for i:=0 to Newitem.Count-1 do
    begin
     if newitem.Items[i]. then//这里不知怎样的判断,用了click属性不行 check属性也不行,不知是那个,又没有 
                                     select属性
     begin
      showmessage(newitem.Items[i].Caption);
     end;
    end;}
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
     popupmenu1.Items.Clear; NewItem:=TmenuItem.Create(self);
     NewItem.Caption:='1234';
     NewItem.OnClick:=myclick;
     Popupmenu1.Items.Insert(0,NewItem);
     
     NewItem:=TmenuItem.Create(self);
     NewItem.Caption:='3456';
     NewItem.OnClick:=Myclick;
     Popupmenu1.Items.Insert(0,NewItem); NewItem:=TmenuItem.Create(self);
     NewItem.Caption:='5678';
     NewItem.OnClick:=Myclick;
     Popupmenu1.Items.Insert(0,NewItem);  popupmenu1.Popup(button1.ClientOrigin.X,button1.ClientOrigin.Y);
     end;
    end.
      

  5.   


    procedure TForm1.myclick(Sender:  TObject); 
    var 
    i:integer; 
    begin 
    根据
      TmenuItem(Sender).Tag
      TmenuItem(Sender).Caption
    等进行判断
    end;