You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi:TitleBarPanel中ActionMainMenu子菜单分栏与分隔符问题

Delphi ActionMainMenuBar 子菜单分隔符与多列布局解决方案

针对你在TitleBarPanel中使用ActionMainMenuBar遇到的两个问题,以下是具体解决方法:

1. 添加子菜单分隔符

ActionMainMenuBar不支持通过设置Caption为'-'来添加分隔符,需直接创建TActionSeparatorItem并添加到子菜单的Items集合中,无需关联任何Action:

// 添加分隔符
SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.AddSeparator;

2. 设置子菜单两列布局

ActionMainMenuBar的子菜单本质是动态生成的TPopupMenu,需找到对应的菜单项并设置其Break属性为mbBarBreak。可通过SubMenuItem的MenuItem属性获取原生菜单项进行设置:

// 在目标位置设置列分隔
SubMenuItem := ActionManager.ActionBars[0].Items[0].Items[3]; // 对应SubItem_3的位置
SubMenuItem.MenuItem.Break := mbBarBreak;

修改后的完整Call_Actionmanager_SubMenu_Items过程

procedure TMainForm.Call_Actionmanager_SubMenu_Items;
var SubAction : TCustomAction;
begin
   // SubItem_1
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_1';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;

   // SubItem_2
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_2';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;
   
   // 添加分隔符
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.AddSeparator;

   // SubItem_3
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_3';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;

   // 设置列分隔(SubItem_3后开始第二列)
   SubMenuItem.MenuItem.Break := mbBarBreak;

   // SubItem_4
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_4';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;

   // SubItem_5
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_5';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;

   // SubItem_6
   SubAction := TCustomAction.Create(MainForm);
   SubAction.Caption := 'SubItem_6';
   SubmenuItem := ActionManager.ActionBars[0].Items[0].Items.Add;
   SubAction.OnExecute := MainForm.Call_Standaard_Actie;
   SubMenuItem.Action := SubAction;
end;

内容的提问来源于stack exchange,提问作者Duikert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:32:06