![]() |
Objekte verschwinden bzw. werden überschrieben ??
Hallo !!
Bin neu in Delphi, aber bin mit OOP aus PHP/Java und diversen anderen Script-Sprachen vertraut. Habe schon einige Hilfreiche Threads gelesen hier, aber habe ein Problem bei dem ich noch nicht mal weiß wonach ich suchen soll. Also falls es zu meiner Frage schon einen Thread gibt, dann bitte bescheid sagen. =) Habe eine TForm, die im Constructor mehrere Frames dynamisch erzeugt. Sprich habe ein Array, für jedes Element im Array wird ein Frame erzeugt. Diese Frames werden dann in einem Array abgelegt, dass diese Frames als Typ hat. Nach den instanziieren verschwinden die zuerst instanziierten Objekte irgendwo im Nirvana und das Array hat nur noch das zuletzt instanziierte Objekt in jedem Index. Nein, ich habe nichts beim Befüllen der Schleife falsch gemacht, denn das ganze passiert auch dann, wenn ich folgendes tue:
Delphi-Quellcode:
Hat Delphi vllt so eine Eigenart, dass man Frames oder Units whatever nur einmal instanziieren kann ?? Finde darüber aber nichts in Bücher o.ä.
O1 := TTabFrame1.Create(nil,DBConnect1,1); //TTabFrame1 ist von TFrame abgeleitet. *
ShowMessage(O1.GetFTabRandom); // << gibt 1 aus O2 := TTabFrame1.Create(nil,DBConnect1,2); // ShowMessage(O2.GetFTabRandom); // << gibt 2 aus ShowMessage(O1.GetFTabRandom); // << gibt 2 aus !!!! ShowMessage(O2.GetFTabRandom); // << gibt 2 aus //* Der 3. Parameter wird im Contructor in ner Var gespeichert und kann über GetFTabRandom ausgelesen werden. Das gleiche mit einer selbstdefinierten Klasse funktioniert wunderbar. Nur bei diesen Frames nicht.... o.O Für Eure Hilfe im Voraus vielen dank... delphino |
Re: Objekte verschwinden bzw. werden überschrieben ??
Hallo delphino,
erstmal Herzlich Willkommen. Ich habe Frames normalerweise in eine TObjectList reingeschrieben und mich dann zu Tode gecastet, aber folgendes Beispiel funktioniert bei mir auch:
Delphi-Quellcode:
Anschliessend habe ich 5 Frames im Array. Mit einer ObjectList siehts aehnlich aus:
var MyFrames: array of TSomeFrame;
//.. SetLength(MyFrames, 5); for i := 0 to 4 do MyFrames[i] := TSomeFrame.Create(Self);
Delphi-Quellcode:
Zeig bitte mal den Code, bei dem du die Frames ins array schreibst.
var MyFrames: TObjectList;
//.. for i := 0 to 4 do MyFrames.Add(TSomeFrame.Create(Self)); Greetz alcaeus |
Re: Objekte verschwinden bzw. werden überschrieben ??
Hi alcaeus,
danke für die schnelle Antwort. Nun, also der Fehler mit dem Überschreiben der Objekte scheint am Übergebenen Owner also dem TComponent zu liegen. Du hattest in Deinen Code-Beispielen immer "Self" dafür verwendet. Ich habe "nil" benutzt. Nun ergibt sich ein Folgefehler, denn nun meckert der Compiler beim befüllen des Arrays, dass eine Komponente mit dem Namen TabFrame1 schon existieren würde. Muss ich nun jedem neuen TabFrame, dass ich instantiiere einen unique Namen zuweisen ? Gruß delphino |
Re: Objekte verschwinden bzw. werden überschrieben ??
OMG, okay, brutaler Anfängerfehler. :lol:
Und zwar hatte ich FTabRandom und den DatenbankHandle etc. unter "var" nach der type deklaration deklariert. Scheinbar sind das bei Delphi dann so ne Art Klassenvariable. Also sowas, was ich in PHP z.b. mit "::" machen würde. Nun bringt er beim Auslesen des Arrays die richtigen Angaben. Aber der Tip mit "Self" war aber glaube ich trotzdem ganz heiß. Muss mal nachlesen was der Owner überhaupt bringt. Thx a lot !!! delphino |
Re: Objekte verschwinden bzw. werden überschrieben ??
Zitat:
Soweit ich weis, gibt es 3 Geltungsbereiche: :arrow: Global (Im gloibalen var Abschnitt) :arrow: Klassenvar. (im private (oder anderem) Teil deklariert) :arrow: "Prozedurvariablen" zwischen Prozedurkopf und begin. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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