У меня есть всплывающее меню, и я хочу, чтобы один из элементов открывал подменю с динамически созданным списком (это список определенных пользователем флагов). Вот как я создаю пункты меню (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
может измениться в будущем, но определено как константа в коде)
EDIT: приведенное выше действительно работает — см. мой ответ ниже