Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   dynamisches PopUp-Menü (https://www.delphipraxis.net/191592-dynamisches-popup-menue.html)

Sugar 31. Jan 2017 07:21

dynamisches PopUp-Menü
 
Hallo Forum,

ich möchte ein PopUp-Menü dynamisch erstellen und eine Reihe von Personennamen als menu-Items darstellen. Das funktioniert soweit auch.

for I := 0 to TeamTBL.RecordCount -1 do
begin
A := TMenuItem.Create(Self);
A.AutoCheck := True;
A.Caption := SL[I];
A.OnClick := Was hier tun??
MeinPopUpMenu.Items.Add(A);
end;
....

Dann ist das PopUp gefüllt mit ein Paar Namen. Ich möchte nun, dass ich beim Click auf ein MenuItem den Namen (die Caption) auswerten kann. Weiß aber nicht wie ich das zustande bringen kann.

Ich bin dankbar für jeden Hinweis.

Gruß
Sugar

DeddyH 31. Jan 2017 07:25

AW: dynamisches PopUp-Menü
 
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
    ...
  private
    procedure DoOnPopupClick(Sender: TObject);
    ...
  end;

...

procedure TDeinForm.DoOnPopupClick(Sender: TObject);
begin
  if Sender is TMenuItem then
    ShowMessage(TMenuItem(Sender).Caption);
end;
Diese Methode sollte sich zuweisen lassen und kann dann Deinerseits angepasst werden.

Sugar 31. Jan 2017 07:47

AW: dynamisches PopUp-Menü
 
Vielen Dank,

ich werde das mal ausprobieren.

Slipstream 31. Jan 2017 08:31

AW: dynamisches PopUp-Menü
 
Zitat:

Zitat von Sugar (Beitrag 1360424)
Hallo Forum, ich möchte ein PopUp-Menü dynamisch erstellen und eine Reihe von Personennamen als menu-Items darstellen. Das funktioniert soweit auch.

Du könntest dich auch fragen: Was trage ich im Objektinspektor ein, wenn ich einem Menüpunkt eine Ereignisbehandlung zuweisen möchte. Ja, richtig, eine Methode deines Formulars, das unterhalb der Type-Anweisung deklariert wird. Mit einem Doppelklick im OI auf das gewünschte Ereignis erstellt Delphi automatisch einen Methodenrumpf. Das musst du beim selbsterstellen natürlich selber machen.

Dann ist mir noch was aufgefallen: Du iterierst durch eine Datenmenge mit einer For-Schleife. Eleganter wäre es jedoch, wenn du dazu die Möglichkeiten Datenbank verwendest:
Delphi-Quellcode:
Var
  TeamName : String;
Begin
  TeamTBL.First;
  While Not TeamTBL.EOF Do
  Begin
    TeamName := TeamTBL.FieldByName('TNAME').AsString;
    ...
    TeamTBL.Next;
  End;

Jumpy 31. Jan 2017 08:55

AW: dynamisches PopUp-Menü
 
Zumal du scheinbar über die Grenzen eines Recordsets iterierst, die Daten aber aus eine Stringlist kommen SL[i]? Dann benutz doch nur die Stringlist. Du könntest dem Menü-Item dann im Tag noch das "i" mitgeben, was deine Auswertung dann vllt. einfacher macht:

Delphi-Quellcode:
if Sender is TMenuItem then
    ShowMessage(SL[TMenuItem(Sender).Tag]);
In dem Beispiel ist es jetzt nicht einfacher, aber je nachdem was du machen willst...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf