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