AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Frage zu TMenuItem.Create

Ein Thema von PeterPanino · begonnen am 24. Jun 2006 · letzter Beitrag vom 24. Jun 2006
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 16:12
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:
NewItem := TMenuItem.Create(MeinPopupMenue);
//oder:
NewItem := TMenuItem.Create(DieserMenueEintrag);
In der Delphi-Hilfe steht:

Zitat:
constructor Create(AOwner: TComponent); AOwner bezeichnet die Eigentümerkomponente, die für die Freigabe des Menüeintrags zuständig ist.
Es steht aber nicht da, wer dann die erzeugten Untermenüeinträge freigibt: Die Popupmenü-Komponente oder der Menüeintrag, unter dem das Untermenü erstellt wird?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 16:17
Zitat:
Es steht aber nicht da, wer dann die erzeugten Untermenüeinträge freigibt
dafür ist der parent zuständig, also die Komponente, die du dem Konstruktor übergeben hast.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 16:30
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:
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;
Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 16:51
Zitat von dataspider:
normalerweise sollte der MenuItem dem Formular gehören.
Wieso dem Formular? Sollte ein MenuItem nicht dem Menü gehören?
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 17:11
Zitat von PeterPanino:
Wieso dem Formular? Sollte ein MenuItem nicht dem Menü gehören?
Wenn man in Delphi ein Formular erzeugt und Komponenten drauflegt, so weist auch Delphi den Komponenten als Owner immer das Formular zu, auch wenn der Parent z.B. ein Panel ist.
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
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 17:15
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:
for i := 0 to Pred(ComponentCount) do
   if Components[i] is TMenuItem then
     ...;
da ja das Formular den MenuItem dann nicht in der Liste verwaltet.
Das muss man dan rekursiv über alle Components erledigen.

Frank
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 17:17
Das sehe ich in diesem Fall als kein Problem an, wenn man nicht viele Menüs pro Form hat.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 17:30
Zitat von mkinzler:
Das sehe ich in diesem Fall als kein Problem an, wenn man nicht viele Menüs pro Form hat.
Ich wollte auch nicht rüberbringen, dass es ein Problem ist.
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...

Frank
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Frage zu TMenuItem.Create

  Alt 24. Jun 2006, 17:33
Zitat:
... du hast sicher auch Owner statt Parent schreiben wollen... Wink
Natürlich, den übergibt man ja auch im Konstruktor.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz