有一菜单,我已经把他作成树型,但我要把菜单的时间付给树性,该如何做呢?
是不是要先找到点机接点的TEXT,在和菜单中所有的CAPTION做比较呢?for i:=0 to mainmenu1.Items.Count -1 do
begin
if treeview1.Selected.Text =mainmenu1.Items [i].Caption then
begin
mainmenu1.Items[i].Click ;//这里应该怎么写??
end;

解决方案 »

  1.   

    在转换的时候使用NODE的对象指针
    for i:=0 to mainmenu1.Items.Count -1 do
      treeview1.addchildobject(nil,mainmenu1.items[i].caption,mainmenu1.items[i]);
    在treeview的onchange事件中
      TMenuItem(Node.Data).click;
      

  2.   

    MainMenu1.Items这里面只包含一级菜单~~要搜索完需要用递归~~参考如下代码~~procedure TForm1.TreeView1Click(Sender: TObject);
    var
      vNodeText: string;  function pScanMenuItem(mMenuItem: TMenuItem): Boolean;
      var
        J: Integer;
      begin
        Result := SameText(StripHotkey(mMenuItem.Caption), vNodeText);
        if Result then
          mMenuItem.Click
        else for J := 0 to mMenuItem.Count - 1 do
          if pScanMenuItem(mMenuItem[J]) then Break;
      end;var
      I: Integer;
    begin
      if not Assigned(TTreeView(Sender).Selected) then Exit;
      vNodeText := TTreeView(Sender).Selected.Text;
      for I := 0 to MainMenu1.Items.Count - 1 do
        if pScanMenuItem(MainMenu1.Items[I]) then Break;
    end;
      

  3.   

    我上面的写法没有错吗?
    mainmenu1.Items[i].Click 
    好象没有触发到相应的事件呢?
      

  4.   

    function Tfrm_NewShortCut.MenuItemToTreeNode(mMenuItem: TMenuItem;
      mTreeView: TTreeView; mTreeNode: TTreeNode): Boolean;
    var
      I                 : Integer;
      vTreeNode         : TTreeNode;
      NodeEx            : TTreeNodeEx;
    begin
      Result := False;
      if (not Assigned(mTreeView)) or (not Assigned(mMenuItem)) then
        Exit;
      try
        for I := 0 to Pred(mMenuItem.Count) do
          if mMenuItem[I].Visible then
          begin
            if StripHotkey(mMenuItem[I].Caption) <> '-' then
            begin
              NodeEx := TTreeNodeEx.Create;
              NodeEx.Name := mMenuItem[i].Name;
              NodeEx.Text := StripHotkey(mMenuItem[I].Caption);
              vTreeNode := mTreeView.Items.AddChildObject(mTreeNode,
                StripHotkey(mMenuItem[I].Caption), NodeEx);
              vTreeNode.ImageIndex := mMenuItem[I].ImageIndex;
              vTreeNode.SelectedIndex := mMenuItem[I].ImageIndex;
              MenuItemToTreeNode(mMenuItem[I], mTreeView, vTreeNode);
            end;
          end;
      except
        Exit;
      end;
      Result := True;
    end;
      

  5.   

    这个贴的只是我的部分代码,这个是转化的关键函数,关于树型调用menu的click事件,你可以采用搜索menu的 name 属性,然后直接执行它。
      TTreeNodeEx = class
      public
        Name, Text: string;
      end;ListItemOnClick(Frm_Main.MainMenu1.Items, mName);function tfrm_Desktop.ListItemOnClick(mMenuItem: TMenuItem; mName: string):
      Boolean;
    var
      I                 : Integer;
    begin
      Result := False;  if (not Assigned(mMenuItem)) then
        Exit;
      try
        for I := 0 to Pred(mMenuItem.Count) do
          if mMenuItem[I].Visible then
            if mMenuItem[I].Caption <> '-' then
            begin
              if mMenuItem[I].Name = mName then
              begin
                mMenuItem[I].Click;
                break;
              end
              else
                ListItemOnClick(mMenuItem[I], mName);
            end;
      except
        Exit;
      end;
      Result := True;
    end;