动态创建了一个菜单项,得到了它handle,怎样用handle找到它并进行操作?
   用FindControl的话,因为TMenuItem不是继承自TWinControl ,强制转换后找到的是nil,后来我改用创建的时候返回name,用FindComponent找它,但创建时返回的name值都是空值,有什么方法可以解决这个问题,请大虾们指点一下,谢谢!

解决方案 »

  1.   

    干嘛不这样做: var t:tmenuitem; t:=tmenuitem.Create(nil);
     x1.Add(t);
     t.Caption:='tttttttttt';
      

  2.   

    1.怎样用handle找到它并进行操作?进行什么样的操作!
    2.创建时返回的name值都是空值?那是因为你动态创建的时候没给他取名字吧!
      

  3.   

    Api: 
    BOOL ModifyMenu(          HMENU hMnu,
        UINT uPosition,
        UINT uFlags,
        PTR uIDNewItem,
        LPCTSTR lpNewItem
    );
      

  4.   

    创建的时候你给他指定一个Name属性。
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      mm:TMenuItem;
    begin
      mm:=TMenuItem.Create(PopupMenu1);
      mm.Name :='Hello';
      PopupMenu1.Items.Add(mm);
    end;procedure TForm1.Button3Click(Sender: TObject);
    var
      mm:TMenuItem;
    begin
      mm:= (PopupMenu1.FindComponent('Hello') as TMenuItem);
      mm.Caption :='Hello';
    end;直接用form的FindComponent是找不到的,必须要用该菜单下去找。
      

  6.   

    如果没有现成的函数可用,可以用一个笨方法:遍历菜单的所有项,找到相同handle的进行操作即可
      

  7.   

    用名称好象是不行的,如果子菜单又创建了子菜单,它是可以有相同名称的,而且不知道从第几级菜单开始查找.
    to newfang(方方) :用动态数组的话该怎么做,能给个简单的demo么?
    to hthunter(核桃-每天回10个技术贴): 怎样遍历所有的菜单项?componentcunt,发现它不能遍它的下级控件的再下级控件,如何才能遍历所有项?
    谢谢!