菜单点击事件的标志或者索引,或者其它,反正是能识别是哪锅菜单发出的事件

解决方案 »

  1.   


    procedure TForm1.N11Click(Sender: TObject);
    begin
      TMenuItem(Sender).Name;//name是唯一的
    end;用name作为标识
      

  2.   

    没有其它方法了吗?
    name也不好识别啊比如 汉字&Open 被你这么一转就成带下划线的字符串了, 如果只比较 open也无法实现
      

  3.   


    TMenuItem的name一定是唯一的,
    你说的现象是TMenuItem的Caption才会有.
      

  4.   

    看你要怎么判断了 可以找个不常用的属性自己定义不然就用name也行
      

  5.   

    可以在菜单项的Tag属性里填写不同的值, 用来区分不同的菜单项, 具体方法与楼上的代码类似:
    procedure TForm1.MenuClick(Sender: TObject);
    begin
      case TMenuItem(Sender).Tag of
      1: ; //菜单项1
      2: ; //菜单项2
      .....
      end;
    end;
      

  6.   

    VCL的风格就是用Tag属性.
    API的风格就是用WM_COMMAND消息附带的Command ID,每个菜单项的id都是唯一的.用TMenuItem的Command属性就可以取得这个值.
      

  7.   


    對每個  MenuItem  的TAG賦上值,通過這個來查。
      

  8.   

    定义一个全局变量或者直接使用其本身的tag或者发消息 
      

  9.   

    不好,现在只有caption的值,其它的都要加上和管理
    菜单的内容多,数值多了麻烦
      

  10.   

    if TMenuItem(Sender)=N1 then  //N1:某个菜单项
    begin
    ...
    end;
      

  11.   

    比如要从上面讨论的各项中记录或者区分出  recent files...是不是很麻烦?本来很多的菜单项就不知道名字
    因为是这样创建的菜单const
    GraphicsCaption:array[0..10] of string=();
    item:TMenuItem;          for i := 0 to length(GraphicsCaption) - 1 do
              begin
                   Item := TMenuItem.Create(MyMenu);
                   Item.Caption := GraphicsCaption[i];
                   //Item.Name := GraphicsName[i];//这句实际不用了,所以不知道名字
                   MyMenu.Items[j].Add(Item);  
                   Item.OnClick := MyProc;
    end;
      

  12.   


    那么这个command是如何自动分配的呢?
      

  13.   

    最简单的,就用Sender本身就行了!,地址值肯定是唯一的。
    我就是这样识别的
      

  14.   

    控件的ID号是资源分配的.也就是windows exe程序的资源.
    由于VCL很好的封装了这层.各个控件的ID号是VCL管理的.你只需要用就可以了.
    如果是API编程,这些控件的ID号是需要是手工在资源文件里面分配的.