OnClick от TButtonItem возвращает отправителя TCategoryButtons - PullRequest
0 голосов
/ 18 января 2019

В настоящее время я пробую компонент TSplitView в Delphi 10 Seattle.Структура выглядит следующим образом:

enter image description here

Со второй категорией TButton я пытаюсь создать элементы программно со следующим кодом:

procedure TMainF.DynamicMenuButtonClick(Sender: TObject);
begin
  if sender is TButtonItem then //false
    ShowMessage('Sender is TButtonItem'); 

  if sender is TCategoryButtons then //true
    ShowMessage('Sender is TCategoryButtons'); 
end;

procedure TMainF.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to 10 do begin
    catMenuItems.Categories[1].Items[i] := TButtonItem.Create(catMenuItems.Categories[1].Items);
    catMenuItems.Categories[1].Items[i].Caption := 'Something';
    catMenuItems.Categories[1].Items[i].OnClick := DynamicMenuButtonClick;
  end;
end;

В процедуре «DynamicMenuButtonClick» я хочу получить информацию о том, какая кнопка была нажата, проблема в том, что отправитель типа TCategoryButtons не сообщает мне об этом.Теперь мне было интересно, пропускаю ли я что-то или это действительно просто невозможно.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

TCategoryButtons предоставляет событие OnButtonClicked, которое дает вам TButtonItem. Возможно, это может быть полезно здесь.

TCatButtonEvent = procedure(Sender: TObject; const Button: TButtonItem) of object;
0 голосов
/ 18 января 2019

Проблема в том, что отправитель типа TCategoryButtons не говорит мне, что

Да, это так. Используйте SelectedItem свойство TCategoryButtons в вашем обработчике событий.

procedure TForm1.DynamicMenuButtonClick(Sender: TObject);
var
    categoryButtons: TCategoryButtons;
begin
    categoryButtons := (Sender as TCategoryButtons);
    Memo1.Lines.Add(categoryButtons.SelectedItem.Caption);
end;
...