Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu TMainMenu (https://www.delphipraxis.net/28156-frage-zu-tmainmenu.html)

bombilein 20. Aug 2004 09:50


Frage zu TMainMenu
 
Hallo alle,

Ich möchte gerne bei diversen Useraktionen ein DateiMenu komplett neu aufbauen und diess auf einmal der Variable, die mein Menü beinhaltet, zuweisen/zuordnen. Für das ganze Handling mit dem Menu hab ich eine eigene Klasse geschrieben

Dafür hab ich folgendes probiert:
Delphi-Quellcode:
Interface Teil der Klasse:
Mainmenue: TMainMenu;

Implementation
CMenuAndToolbar.UpdateMainMenue();
var
  MenuNew : TMainMenu;
  MenuOld : TMainMenu;
begin
  MenuOld := Mainmenue;
  MenuNew.Items.Add(...) // Menü aufbauen
  Mainmenue := MenuNew;
  MenuNew := nil;
  FreeAndNil(MenuOld);
end;
Auch die Zuweisung mittels Assign hat nicht funktioniert. Da wurde eine Exception geworfen.

Was mache ich falsch?

Danke im Voraus

UweR 20. Aug 2004 10:11

Re: Frage zu TMainMenu
 
Hallo,

ein Fehler steckt auf jeden Fall schon mal in der Zeile wo du die neuen Items hinzufügen willst. Vor dem Aufruf solltest du die Instanz erst mal mit einem Create-Aufruf erzeugen.

Dann noch Vorsicht wenn du einfach ein Objekt einem anderen zuweist, da wird nicht das ganze Objekt sondern quasi nun ein Verweis zugewiesen. Da muß du dann wie schon richtig von dir gedacht mit assigned arbeiten. Dafür müssen aber auch beide Objekte wirklich existieren, es muß also mal mit Create erzeugt worden sein.

Ich habe es jetzt nicht ausprobiert aber ich denke so könnte es funktionieren:

Delphi-Quellcode:
  MenuOld := TMainMenue.Create(Self);
  MenuNew := TMainMenue.Create(Self);
  MenuOld.Assign(Mainmenue);
  MenuNew.Items.Add(...) // Menü aufbauen
  Mainmenue.Assign(MenuNew);
  MenuNew.Free;
  MenuOld.Free;

bombilein 20. Aug 2004 10:29

Re: Frage zu TMainMenu
 
Erstmal danke für deine Antwort.

Das Problem bei Assign ist jedoch, dass ich folgende Meldung bekommen:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Sylvio.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: 'TMainMenu kann nicht zu TMainMenu zugewiesen werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Der Code:
Delphi-Quellcode:
In der Create Methode:
Mainmenue := TMainMenu.create(AOwnerMenu); //Mainmenue ist eine Variable meiner Klasse CMenuAndToolbar

In CMenuAndToolbar.UpdateMainMenue();
  MenuOld := TMainMenu.create(AOwnerMenu);
  MenuOld.Assign(Mainmenue); <- hier kommt die Exception
:wall:
:gruebel:

mytar 20. Aug 2004 10:32

Re: Frage zu TMainMenu
 
Gibt doch bitte die Prozedur-Köpfe mit!

Was ist AOwnerMenu?

Erzeugst du MainMenue bereits zur Designzeit?

greetz
mytar :-D

bombilein 20. Aug 2004 10:48

Re: Frage zu TMainMenu
 
Prozedurkopf:

procedure CMenuAndToolbar.UpdateMainMenue();

AOWnerMenu ist vom Typ TComponent.
LEtzentdlich ist AOwnerMenu mein Hauptformular.

Das Menü wird dynamisch erzeugt, zum Zeitpunkt wo ich eine Instanz der Klasse CMenuAndToolbar erzeuge.

Delphi-Quellcode:
constructor CMenuAndToolbar.Create(AOwnerMenu_parm, AOwnerToolbar_parm: TComponent; refDataObject_parm: CDataObject; refGraphicObject_parm: CGraphObject);
begin { CMenuAndToolbar.Create }
  ASSERT(b(AOwnerMenu_parm <> nil));
  ASSERT(b(AOwnerToolbar_parm <> nil));
  ASSERT(b(refDataObject_parm <> nil));
  ASSERT(b(refGraphicObject_parm <> nil));
  inherited Create();
  // Default
  iLanguage       := ciGerman;
  // Parameter den Variablen zuweisen
  AOwnerMenu      := AOwnerMenu_parm;
  AOwnerToolbar   := AOwnerToolbar_parm;
  refDataObject   := refDataObject_parm;
  refGraphicObject := refGraphicObject_parm;

  Mainmenue       := TMainMenu.create(AOwnerMenu); <- Menü wird hier erzeugt
  UpdateMainMenue(); <- hier soll das Menü mit Items ausgefüllt werden; diese Methode wird öfters aufgerufen
end; { CMenuAndToolbar.Create }

mytar 20. Aug 2004 10:56

Re: Frage zu TMainMenu
 
Kleine Empfehlung:
Bezeichne die Parameter mit 'A...', A steht für Argument.

Delphi-Quellcode:
  FOwnerMenu      := AOwnerMenu;
  FOwnerToolbar   := AOwnerToolbar;
Musst du bei TMainMenu nicht auch den Parent setzen?

greetz
mytar :-D

bombilein 20. Aug 2004 12:24

Re: Frage zu TMainMenu
 
Parent kann ich dort nicht setzen.

mytar 20. Aug 2004 15:08

Re: Frage zu TMainMenu
 
Ist CMenuAndToolbar eine abgeleite Klasse? Von was abgeleitet?

greetz
mytar :-D

bombilein 22. Aug 2004 22:37

Re: Frage zu TMainMenu
 
hi,

CMenuAndToolbar ist abgeleitet von CXObject :D

Die ist Instititutionsintern die höchste Klasse. Die setzt direkt auf der obersten Klasse auf (Tobject, oder Cobject??)

Irgendwie hab ich das Gefühl, dass eine Verbiegung der Verzeigerung bei TMainMenu nicht möglich ist ...



:wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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