Как добавить выпадающее меню к элементу действия во время выполнения
Я использую следующий метод для создания ActionClient с действием во время выполнения.
procedure TMainForm.AddToProjectHistory(Path: string);
var
NewOption: TAction;
ActionClient: TActionClientItem;
begin
NewOption := TAction.Create(self);
NewOption.ActionList := ActionManager1;
NewOption.Caption := Path;
NewOption.OnExecute := ProjectHistoryExecute;
ActionClient := TActionClientItem(aToolBarFile.ActionClient.Items[0].Items.Add);
ActionClient.Action := NewOption;
ActionClient.Caption := Path;
end;
Это прекрасно работает, если в списке уже есть элемент, но не работает вообще, если его нет
Например, если я добавлю элемент во время разработки, я могу добавить больше элементов во время выполнения
Но если я ничего не добавляю во время разработки, нет раскрывающегося списка для отображения списка элементов, после добавления элементов раскрывающийся список не появляется.
Этого не нужно делать с Действиями, но остальная часть системы меню использует действия, и я не думаю, что могу добавить стандартные MenuItems в выпадающий список действий.
Delphi 2005
2 ответа
VCL автоматически создает кнопки управления типа, который зависит от того, есть ли у элемента дочерние элементы. По умолчанию (и в зависимости от настройки стиля ActionManager) для ActionClientItem, который имеет дочерние элементы, TXPStyleDropDownBtn
кнопка создана, и для бездетного ActionClientItem, TXPStyleButton
создано.
Поэтому, когда первый дочерний элемент добавляется во время выполнения, кнопка имеет неправильный тип. Изменение типа этой кнопки потребует уничтожения текущей кнопки и полного и ручного создания новой кнопки. Это должно быть возможно, но не пытались, потому что:
Действительно самое простое решение - обмануть VCL, добавив дочерний элемент во время разработки, и удалить этот элемент при создании формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
aToolBarFile.ActionClient.Items[0].Items[0].Free;
end;
Если вы создадите actionclient типа "context", ему не нужно будет менять тип кнопки. Меню откроется, когда вы щелкнете правой кнопкой мыши по кнопке.