ActionManager
ActionMainMenuBar
怎么动态创建菜单

解决方案 »

  1.   

    var
      NewItem: TMenuItem;
      I : integer;
    begin
      { first create the separator }
      NewItem := TMenuItem.Create(Self);
      NewItem.Caption := '-';
      { add the new item to the Windows menu }
      Windows.Add(NewItem);
      { now create and add a menu item for each form }
      for  I := 0 to Screen.FormCount-1 do
      begin
        NewItem := TMenuItem.Create(Self);
        NewItem.Caption := Screen.Forms[I].Name;
        Windows.Add(NewItem);  end;end;
      

  2.   

    procedure TMainForm.SetupMenu;
    var
      MenuItem: TMenuItem;
      ParentMenu: TComponent;
      i: Integer;
      comp: TComponent;  procedure updateMenuItem(index: integer; pMenuItem: TMenuItem);
      begin
        with pMenuItem do
        begin
         {1=Name,Parent,Caption,Hint,Shortcut,ID,WindowName,ExeName}
          Name := UserTitle(AddonMenu[index], ',', 1);
          if CaptionHandler1.LangChanger.LanguageMode = lmEnglish then
          begin
            Caption := UserTitle(AddonMenu[index], ',', 3);
            Hint := UserTitle(AddonMenu[index], ',', 4);
          end
          else
          begin
            Caption := UserTitle(AddonMenu[index], ',', 9);
            Hint := UserTitle(AddonMenu[index], ',', 10);
          end;
          if UserTitle(AddonMenu[index], ',', 5) <> EmptyStr then
            Shortcut := TextToShortCut(UserTitle(AddonMenu[index], ',', 5));
        end;
      end;
    begin
      for i := 0 to AddonMenu.Count - 1 do
      begin
        // by rex on 2 mar 2001
        comp := Self.FindComponent(UserTitle(AddonMenu[i], ',', 1));
        if Assigned(comp) then begin
          TComponent(MenuItem) := comp;
          updateMenuItem(i, MenuItem);
          continue;
        end
        else begin
          MenuItem := TMenuItem.Create(Self);  {create an item on the fly}
          updateMenuItem(i, MenuItem);
        end;
        // by rex on 2 mar 2001 end    with MenuItem do
        begin
          Enabled := True;
          Visible := True;
          Tag := i;
          OnClick := MenuOnClick;  {assign OnClick event}
          if UserTitle(AddonMenu[i], ',', 2) = EmptyStr then
            ParentMenu := nil
          else
            ParentMenu := Self.FindComponent(UserTitle(AddonMenu[i], ',', 2));
        end;
        if ParentMenu = nil then
          mnuMain.Items.Add(MenuItem)
        else
        begin
          if ParentMenu is TMainMenu then
            TMainMenu(ParentMenu).Items.Add(MenuItem)
          else if ParentMenu is TPopupMenu then
            TPopupMenu(ParentMenu).Items.Add(MenuItem)
          else
            TMenuItem(ParentMenu).Add(MenuItem);
        end;
      end;
    end;