Când lucrați cu meniuri sau meniuri PopUp în aplicațiile Delphi, în majoritatea scenariilor, creați elementele de meniu la timpul de proiectare. Fiecare element de meniu este reprezentat de o clasă TMenuItem Delphi. Când un utilizator selectează (face clic) pe un element, evenimentul OnClick este tras pentru ca dvs. (ca dezvoltator) să preiați evenimentul și să răspundă la acesta.
Pot exista situații în care elementele din meniu nu sunt cunoscute la momentul proiectării, dar trebuie adăugate la timpul de execuție (instantaneu dinamic).
Să presupunem că există o componentă TPopupMenu numită "PopupMenu1" pe un formular Delphi, pentru a adăuga un element în meniul pop-up, puteți scrie o bucată de cod ca:
var
menuItem: TMenuItem;
începe
menuItem: = TMenuItem.Create (PopupMenu1);
menuItem.Caption: = 'Element adăugat la' + TimeToStr (acum);
menuItem.OnClick: = PopupItemClick;
// atribuiți-i o valoare integrală personalizată ...
menuItem.Tag: = GetTickCount;
PopupMenu1.Items.Add (meniul Item);
Sfârșit;
procedură TMenuTestForm.PopupItemClick (Expeditor: TObject);
var
menuItem: TMenuItem;
începe
dacă nu (Expeditor este TMenuItem) apoi
începe
ShowMessage ('Hm, dacă acest lucru nu a fost apelat de Menu Click, cine a sunat asta ?!');
ShowMessage (Sender.ClassName);
Ieșire;
Sfârșit;
menuItem: = TMenuItem (expeditor);
ShowMessage (Format ('Faceți clic pe "% s", valoarea TAG:% d', [menuItem.Name, menuItem.Tag]));
Sfârșit;
Metoda „PopupItemClick” verifică mai întâi dacă Expeditorul este de fapt un obiect TMenuItem. Dacă metoda este executată ca urmare a unui element de meniu Manipulator de eveniment OnClick, arătăm pur și simplu un mesaj de dialog cu valoarea Tag care este atribuită atunci când elementul de meniu a fost adăugat în meniu.
În aplicațiile din lumea reală, este posibil / aveți nevoie de mai multă flexibilitate. Să spunem că fiecare articol va „reprezenta” o pagină web - o valoare de șir ar fi necesară pentru a deține adresa URL a paginii web. Când utilizatorul selectează acest element, puteți deschide browserul web implicit și puteți naviga la adresa URL atribuită cu elementul de meniu.
Iată o clasă personalizată TMenuItemExtended echipată cu un șir personalizat „Valoare” proprietate:
tip
TMenuItemExtended = clasă(TMenuItem)
privat
fValue: şir;
publicat
proprietate Valoare: șir citit fValue scrie fValue;
Sfârșit;
Iată cum puteți adăuga acest element de meniu „extins” la un PoupMenu1:
var
menuItemEx: TMenuItemExtended;
începe
menuItemEx: = TMenuItemExtended.Create (PopupMenu1);
menuItemEx.Caption: = 'Extins adăugat la' + TimeToStr (acum);
menuItemEx.OnClick: = PopupItemClick;
// atribuiți-i o valoare integrală personalizată ...
menuItemEx.Tag: = GetTickCount;
// acesta poate păstra chiar și o valoare de șir
menuItemEx.Value: = 'http://delphi.about.com';
PopupMenu1.Items.Add (meniulItemEx);
Sfârșit;
Acum, „PopupItemClick” trebuie modificat pentru a procesa corect acest element de meniu:
procedură TMenuTestForm.PopupItemClick (Expeditor: TObject);
var
menuItem: TMenuItem;
începe
//… la fel ca mai sus
dacă expeditor este TMenuItemExtended apoi
începe
ShowMessage (Format ('Elogiu extins Ohoho ... aici este valoarea șirului:% s', [TMenuItemExtended (Expeditor). Valoare]));
Sfârșit;
Sfârșit;
Asta e tot. Depinde de dvs. să extindeți TMenuItemExtended conform nevoilor dvs. Crearea de componente Delphi personalizate este locul de căutare a ajutorului pentru crearea propriilor clase / componente.
Pentru a deschide de fapt browserul Web implicit, puteți utiliza proprietatea Value ca parametru pentru o funcție API ShellExecuteEx.