Dynamiczne menu i zdarzenia

0

Jak utworzyć procedurę dla zdarzenia menu tworzonego dynamicznie?

Próbowałem tak:

nowy.click:=menuClick; //menuClick jest procedurą, która ma się wykonywać po wciśnięciu menu: "Nowy"

próbowałem też: nowy.onClick:=menuClick

próbowałem też z parametrem sender, ale nic nie działa.

0

Mozesz przypisac przy twrzeniu nowej pozycji:

New.OnClick := menuClick;//zakladajac ze New jest typu TMenuItem

Albo tak:

Menu.Items.Items[0].OnClick := menuClick;

Tu przypiszesz procke pierwszemu elementowi.
To powinno dzialac
a procedura menuClick powinna wygladac tak:

procedure menuClick(Sender: TObject);
begin
//... kodzik
end;

to musi dzialac :)

0

No tak... Po prostu ja dawałem jeszcze jako parametr sendera :P
A teraz działa

0

Zrobiłem tak żeby sprawdzić czy zareaguje na kliknięcie i pokazuje błąd

[Error] Main.pas(199): Incompatible types: 'method pointer and regular procedure'

ps. da się jakoś w mClick odczytać index klikniętego elementu?

procedure MClick(Sender : TObject);

begin
  with Sender as TMenuItem do
  begin
     showmessage('dd');
  end;
end;

procedure TAD.AddMenuItem(itemName: string; ch : integer; pl : string);
var
  NewItem: TMenuItem;
begin
  NewItem := TMenuItem.Create(nil);
  with NewItem do
  begin
    Caption := itemName;
    if ch = 1 then Checked:=true;
    OnClick := MClick;
  end;
  PopupMenu1.Items.Add(NewItem);
end;
0

Sorry nie ten wątek :D

0

MenuItemy, tak jak większość chyba kompnentów wizualnych posiadają własnośc Tag. Ustawiaj ją podczas
tworzenia na jakieś kolejne liczby, a później sprawdzaj w OnClick Tag Sender'a. Czyli na przykład taki kod:

  ShowMessage(IntToStr((Sender as TMenuItem).Tag));

1 użytkowników online, w tym zalogowanych: 0, gości: 1