![]() |
Frage zu TMenuItem.Create
Ich möchte zur Laufzeit in einem PopupMenü 'MeinPopupMenue' unter dem Menüeintrag 'DieserMenueEintrag' ein Untermenü erstellen. Muss dann bei der Erzeugung des neuen Untermenüeintrages dieser der Popupmenü-Komponente 'MeinPopupMenue' oder dem Menüeintrag 'DieserMenueEintrag' zugewiesen werden?:
Delphi-Quellcode:
In der Delphi-Hilfe steht:
NewItem := TMenuItem.Create(MeinPopupMenue);
//oder: NewItem := TMenuItem.Create(DieserMenueEintrag); Zitat:
|
Re: Frage zu TMenuItem.Create
Zitat:
|
Re: Frage zu TMenuItem.Create
Hi,
normalerweise sollte der MenuItem dem Formular gehören. Dieses gibt den Item auch wieder frei. Folgende Vorgehensweise würde ich wählen:
Delphi-Quellcode:
Cu, Frank
Var
NewItem: TMenuItem; begin // Self, also Form ist Owner und damit für die Freigabe zuständig... NewItem := TMenuItem.Create(Self); NewItem.Caption := 'New Item'; // der neue MenuItem wir ins Menü integriert ExistingMenuItem.Add(NewItem); end; |
Re: Frage zu TMenuItem.Create
Zitat:
|
Re: Frage zu TMenuItem.Create
Zitat:
Die eingefügte Komponente wird dann in der Liste Components des Formulares aufgenommen und beim Zerstören des Formulares freigegeben. Ich kann natürlich auch das PopupMenu als Owner im Constructor übergeben, da auch TPopupMenu von TComponent abgeleitet ist und damit eine Liste von Komponenten verwalten kann. Eine Freigabe des Menuitem ist damit auch gesichert. Ich halte mich nur gern an das Konzept von Delphi. Wichtig ist aber, dass man Owner und Parent nicht verwechselt und bewusst einsetzt. Cu, Frank |
Re: Frage zu TMenuItem.Create
Ach ja,
der Nachteil, wenn man nicht das Formular als Owner übergibt: Man kann nichtr mehr alle Komponenten des Formulares in einer einfachen Schleife iterieren,
Delphi-Quellcode:
da ja das Formular den MenuItem dann nicht in der Liste verwaltet.
for i := 0 to Pred(ComponentCount) do
if Components[i] is TMenuItem then ...; Das muss man dan rekursiv über alle Components erledigen. Frank |
Re: Frage zu TMenuItem.Create
Das sehe ich in diesem Fall als kein Problem an, wenn man nicht viele Menüs pro Form hat.
|
Re: Frage zu TMenuItem.Create
Zitat:
Aber wenn man ein einheitliches Konzept von Anfang an fährt, spart man sich für die Zukunft unter Umständen eine Menge Sucharbeit. ... du hast sicher auch Owner statt Parent schreiben wollen... :wink: Frank |
Re: Frage zu TMenuItem.Create
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz