gpt4 book ai didi

delphi - Delphi中动态创建子菜单

转载 作者:行者123 更新时间:2023-12-03 15:49:19 26 4
gpt4 key购买 nike

我有一个弹出菜单,我希望其中一个项目打开一个带有动态创建的列表的子菜单(它是用户定义的标志的列表)。以下是我创建菜单项的方法(FlagAs 是我想要附加子菜单的菜单项):

lNewMenuItems: array[0..flagCount] of tMenuItem;

for I := 0 to flagCount do
begin
{ Create a new menu item }
lNewMenuItems[I] := tMenuItem.Create(FlagAs);
lNewMenuItems[I].Caption := FlagNames[I];
lNewMenuItems[I].Tag := I; { Tag with the flag number }
lNewMenuItems[I].OnClick := miFlagClick;
end;

FlagAs.Add(lNewMenuItems);

miFlagClick 处理程序只是切换其发件人的选中状态:

procedure TMyForm.miFlagClick(Sender: TObject);
begin
(Sender as tMenuItem).Checked := not (Sender as tMenuItem).Checked;
end;

这些项目已完美添加,但当我单击它们时,它们不会被检查。事件处理程序正在被调用编辑:并且发送者是正确的菜单项,但下次我打开菜单时复选标记不会出现。

我做错了什么?或者我是否以错误的方式创建菜单? (注意flagCount将来可能会改变,但在代码中定义为常量)

编辑:上面的内容确实有效 - 请参阅下面我的答案

最佳答案

我在 Delphi 2009 中尝试了以下方法,效果很好:

procedure TForm5.FormCreate(Sender: TObject);
var
i : Integer;
mis : array[0..3] of TMenuItem;
begin
for i := 0 to 3 do begin
mis[i] := tMenuItem.Create(SubMenu);
NewMenu(mis[i]);
end;
SubMenu.Add(mis);
end;

procedure TForm5.NewMenu(var mi: TMenuItem);
begin
mi.Caption := 'Test';
mi.OnClick := TestClick;
end;

procedure TForm5.TestClick(Sender: TObject);
begin
(Sender as tMenuItem).Checked := not (Sender as tMenuItem).Checked;
end;

关于delphi - Delphi中动态创建子菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com