我有一个弹出菜单,我希望其中一个项目打开一个带有动态创建列表的子菜单(它是用户定义的标志列表)。这是我创建菜单项的方式(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;
这些项目被完美地添加,但是当我点击它们时它们不会被检查。事件处理程序被称为EDIT: 并且 Sender 是正确的菜单项,但是下次我打开菜单时不会出现复选标记。
我究竟做错了什么?还是我以错误的方式创建菜单?(注flagCount
将来可能会改变,但在代码中定义为常量)
编辑:以上确实有效 - 请参阅下面的答案