![]() |
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:
Auch die Zuweisung mittels Assign hat nicht funktioniert. Da wurde eine Exception geworfen.
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; Was mache ich falsch? Danke im Voraus |
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; |
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:
:wall:
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 :gruebel: |
Re: Frage zu TMainMenu
Gibt doch bitte die Prozedur-Köpfe mit!
Was ist AOwnerMenu? Erzeugst du MainMenue bereits zur Designzeit? greetz mytar :-D |
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 } |
Re: Frage zu TMainMenu
Kleine Empfehlung:
Bezeichne die Parameter mit 'A...', A steht für Argument.
Delphi-Quellcode:
Musst du bei TMainMenu nicht auch den Parent setzen?
FOwnerMenu := AOwnerMenu;
FOwnerToolbar := AOwnerToolbar; greetz mytar :-D |
Re: Frage zu TMainMenu
Parent kann ich dort nicht setzen.
|
Re: Frage zu TMainMenu
Ist CMenuAndToolbar eine abgeleite Klasse? Von was abgeleitet?
greetz mytar :-D |
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 02:29 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