我有一个带子菜单的PopupMenu,一次只能检查一个项目。就我所尝试而言,GroupIndex
和RadioItem
属性在相应的子菜单之外无效。
我找到了this piece of code来检查PopupMenu及其直接的子组件,但我没有运气创建一个弹出式的各种各样的。 我需要一个快速的解决方案 - PopupMenu有4x14条目,总是遍历所有菜单,子条目不能是最好的解决方案,我想。
我是否缺少一个简单的属性,或者是迭代的艰难路径是我唯一的选择?
答案 0 :(得分:8)
将所有56项作为操作添加到一个 ActionList,并为所有GroupIndex
属性提供相同的值。
现在,以任何树状方式添加菜单项,子菜单和子子菜单,并将它们中的每一个链接到一个动作。检查一个菜单项,无论位于何处,都将自动取消选中所有其他菜单项。
Etvoilà!
答案 1 :(得分:2)
NGLN's answer更好,但如果你真的不想或不想使用ActionList,那么这个例程也会这样做:
procedure CheckMenuItem(Item: TMenuItem);
procedure UncheckMenu(Menu: TMenuItem; GroupIndex: Byte);
var
I: Integer;
begin
if Menu.RadioItem and (Menu.GroupIndex = GroupIndex) then
Menu.Checked := False;
for I := 0 to Menu.Count - 1 do
UncheckMenu(Menu[I], GroupIndex);
end;
begin
if (not Item.Checked) and Item.RadioItem and (Item.GroupIndex <> 0) then
begin
UncheckMenu(Item.GetParentMenu.Items, Item.GroupIndex);
Item.Checked := True;
end;
end;