Wenn Sie in Delphi-Anwendungen mit Menüs oder PopUp-Menüs arbeiten, erstellen Sie die Menüelemente in den meisten Szenarien zur Entwurfszeit. Jedes Menüelement wird durch eine TMenuItem Delphi-Klasse dargestellt. Wenn ein Benutzer ein Element auswählt (klickt), wird das OnClick-Ereignis für Sie (als Entwickler) ausgelöst, um das Ereignis zu erfassen und darauf zu reagieren.
Es kann vorkommen, dass die Menüelemente zur Entwurfszeit nicht bekannt sind, jedoch zur Laufzeit hinzugefügt werden müssen (dynamisch instanziiert)..
Angenommen, es gibt eine TPopupMenu-Komponente mit dem Namen "PopupMenu1" Wenn Sie in einem Delphi-Formular ein Element zum Popup-Menü hinzufügen möchten, können Sie einen Code wie folgt eingeben:
var
menuItem: TMenuItem;
Start
menuItem: = TMenuItem.Create (PopupMenu1);
menuItem.Caption: = 'Artikel hinzugefügt um' + TimeToStr (jetzt);
menuItem.OnClick: = PopupItemClick;
// Weisen Sie ihm einen benutzerdefinierten ganzzahligen Wert zu ...
menuItem.Tag: = GetTickCount;
PopupMenu1.Items.Add (menuItem);
Ende;
Verfahren TMenuTestForm.PopupItemClick (Absender: TObject);
var
menuItem: TMenuItem;
Start
wenn nicht (Absender ist TMenuItem) dann
Start
ShowMessage ('Hm, wenn dies nicht von Menu Click aufgerufen wurde, wer hat das aufgerufen ?!');
ShowMessage (Sender.ClassName);
Ausfahrt;
Ende;
menuItem: = TMenuItem (Absender);
ShowMessage (Format ('Auf "% s" geklickt, TAG-Wert:% d', [menuItem.Name, menuItem.Tag]));
Ende;
Die Methode "PopupItemClick" prüft zunächst, ob der Sender tatsächlich ein TMenuItem-Objekt ist. Wenn die Methode als Ergebnis eines OnClick-Ereignishandlers für ein Menüelement ausgeführt wird, wird einfach eine Dialogmeldung mit dem Tag-Wert angezeigt, der zugewiesen wurde, als das Menüelement zum Menü hinzugefügt wurde.
In realen Anwendungen benötigen Sie möglicherweise mehr Flexibilität. Nehmen wir an, dass jedes Element eine Webseite "darstellt" - ein Zeichenfolgenwert ist erforderlich, um die URL der Webseite zu speichern. Wenn der Benutzer dieses Element auswählt, können Sie den Standardwebbrowser öffnen und zu der mit dem Menüelement zugewiesenen URL navigieren.
Hier ist eine benutzerdefinierte TMenuItemExtended-Klasse, die mit einer benutzerdefinierten Zeichenfolgeneigenschaft "Value" ausgestattet ist:
Art
TMenuItemExtended = Klasse(TMenuItem)
Privat
fWert: Zeichenfolge;
veröffentlicht
Eigentum Wert : Zeichenfolge gelesen fWert schreiben fValue;
Ende;
So fügen Sie dieses "erweiterte" Menüelement einem PoupMenu1 hinzu:
var
menuItemEx: TMenuItemExtended;
Start
menuItemEx: = TMenuItemExtended.Create (PopupMenu1);
menuItemEx.Caption: = 'Erweitert hinzugefügt um' + TimeToStr (jetzt);
menuItemEx.OnClick: = PopupItemClick;
// Weisen Sie ihm einen benutzerdefinierten ganzzahligen Wert zu ...
menuItemEx.Tag: = GetTickCount;
// Dieser kann sogar einen String-Wert enthalten
menuItemEx.Value: = 'http://delphi.about.com';
PopupMenu1.Items.Add (menuItemEx);
Ende;
Jetzt muss der "PopupItemClick" geändert werden, um diesen Menüpunkt richtig zu verarbeiten:
Verfahren TMenuTestForm.PopupItemClick (Absender: TObject);
var
menuItem: TMenuItem;
Start
//… das gleiche wie oben
wenn Absender ist TMenuItemExtended dann
Start
ShowMessage (Format ('Ohoho Extended item ... hier ist der Zeichenfolgenwert:% s', [TMenuItemExtended (Sender) .Value]));
Ende;
Ende;
Das ist alles. Es liegt an Ihnen, TMenuItemExtended nach Ihren Wünschen zu erweitern. Wenn Sie benutzerdefinierte Delphi-Komponenten erstellen, suchen Sie nach Hilfe beim Erstellen Ihrer eigenen Klassen / Komponenten.
Um den Standardwebbrowser tatsächlich zu öffnen, können Sie die Value-Eigenschaft als Parameter für eine ShellExecuteEx-API-Funktion verwenden.