AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu TMainMenu

Ein Thema von bombilein · begonnen am 20. Aug 2004 · letzter Beitrag vom 22. Aug 2004
Antwort Antwort
bombilein

Registriert seit: 21. Jul 2004
18 Beiträge
 
#1

Frage zu TMainMenu

  Alt 20. Aug 2004, 10:50
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
  Mit Zitat antworten Zitat
UweR

Registriert seit: 15. Mär 2004
Ort: Bad Marienberg
219 Beiträge
 
Delphi 7 Professional
 
#2

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 11:11
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;
Gruß
UweR
  Mit Zitat antworten Zitat
bombilein

Registriert seit: 21. Jul 2004
18 Beiträge
 
#3

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 11:29
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

  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 11:32
Gibt doch bitte die Prozedur-Köpfe mit!

Was ist AOwnerMenu?

Erzeugst du MainMenue bereits zur Designzeit?

greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
bombilein

Registriert seit: 21. Jul 2004
18 Beiträge
 
#5

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 11:48
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 }
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 11:56
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
Francis Obikwelu
  Mit Zitat antworten Zitat
bombilein

Registriert seit: 21. Jul 2004
18 Beiträge
 
#7

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 13:24
Parent kann ich dort nicht setzen.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Frage zu TMainMenu

  Alt 20. Aug 2004, 16:08
Ist CMenuAndToolbar eine abgeleite Klasse? Von was abgeleitet?

greetz
mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
bombilein

Registriert seit: 21. Jul 2004
18 Beiträge
 
#9

Re: Frage zu TMainMenu

  Alt 22. Aug 2004, 23:37
hi,

CMenuAndToolbar ist abgeleitet von CXObject

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 ...



  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 06:23 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