У меня есть всплывающее меню, и я хочу, чтобы один из пунктов открыл подменю с динамически создаваемым списком (это список пользовательских флагов). Вот как я создаю пункты меню (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
может измениться в будущем, но определяется как константа в коде)
РЕДАКТИРОВАТЬ: вышеописанное действительно работает - см. Мой ответ ниже