Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Hi Leute,
ich bastel zZ nen kleines Grundgerüsst für ne GUI. Irgendwie habe ich aber ein Problem. Zu erst aber mal wie meine GUI aufgebaut ist:
TGLComponent <- Basisklasse
TGLLabel <- Wird von Basisklasse abgeleitet
TGLWindow <- Wird auch von Basisklasse abgeleitet
alle haben einen constructor Create wo der erste parameter ein Pointer auf eine TGLComponent ist
TGLLabel-constructor ruft als erstes den von TGLComponent auf und dann das eigene Zeugs
TGLWindow hat ne private Instanz von TGLLabel. Im TGLWindow constructor wird auch erst per "inherited Create(Parameterliste...);" der Konstruktor von TGLComponent aufgerufen. Danach kommt wieder eigenes zeug und dann wird der Konstrukter vom TGLLabel aufgerufen so dass der Methoden-Stack so aus sieht wenn ich im "tiefsten" konstrukter bei TGLWindow bin
TGLWindow.Create(const p:PGLComponent;...)
. |-->TGLComponent.Create(const p:PGLComponent;...)
. |-->TGLLabel.Create(const p:PGLComponent;...) //Hier ist p = @TGLComponent(Self)
........... |--> TGLComponent.Create(const p:PGLComponent;...) //Laut Delphi kommt hier auch die Speicheradresse p= @TGLComponent(Self) an,
in TGLComponent.Create(const p:PGLComponent) ist gleich die allererste Zeile
FParent:=p;
FParent ist auch vom Typ PGLComponent
wenn ich mir jetzt den durchlauf des Label konstruierens mit dem Debugger angucke dann hab ich folgendes Problem:
p hatte z.B. die Speicheradresse $12FDBC, hat es auch noch wenn FParent:=p; aufgerufen wird, allerdings wird FParent nicht wie erwartet auf $12FDBC gesetzt sondern (in diesem Beispiel) auf $1000315
constructor TGLLabel.Create(const p: PGLComponent; id:integer;dc:longWord; x, y, w, h:integer;
t: PTexture);
begin
inherited Create(p,id,x,y,w,h,t);//Konstruktor von TGLComponent aufrufen
...
end;
constructor TGLComponent.Create(const p: PGLComponent; id, x, y, w,
h:integer; t: PTexture);
begin
inherited Create;
FParent:=p;//Hier tritt der Fehler auf, statt p in FParent zu schreiben, landet dort irgendeine Speicheradresse <!-- s:( --><img src=\"{SMILIES_PATH}/icon_sad.gif\" alt=\":(\" title=\"Sad\" /><!-- s:( -->
...
end;
Ich hoffe ihr könnt mir helfen, ich verzweifel langsam
Wer mehr Code-Schnipsel brauch, einfach bescheid sagen ...
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Also Klassen sind selbst schon Pointer, wenn du also PGLComponent = ^TGLComponent definierst, dann ist das ein Pointer auf einen Pointer. Das ist vollkommen unnötig und bringt wie man sieht nur Probleme mit sich. Du kannst FParent einfach als TGLComponent deklarieren, ist einfacher und funktioniert. Dann kannst du dir auch böses Zeug wie @TGLComponent(Self) sparen
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.