![]() |
Objektreferenz übergeben (Self)
Hallo!
Ich habe ein Problem: Und zwar habe ich iene Klasse "TComboProxy" die eine Combobox erzeugt. Dieser Combobox möchte ich gerne die Referenz auf die Instanz von TComboProxy mitgeben. TComboProxy verwaltet nämlich noch die Einträge in der Combobox.
Delphi-Quellcode:
Mit dem Code klappt dies Ansatzweise. Wenn ich jedoch 2 Instanzen von TComboProxy erzeuge (und demensprechend 2 ComboBoxen) zeigen beide Pointer (in coTemp.Tag) auf selbe Adresse.
function TComboProxy.AddControl(Parent: TWinControl): TWinControl;
var coTemp: TComboBox; begin coTemp := TComboBox.Create(Parent); coTemp.Parent := Parent; coTemp.Width := 80; coTemp.Height := 25; coTemp.Text := 'Test'; coTemp.Visible := True; coTemp.Tag := Integer(Pointer(self)); // Referenzübergabe Result := coTemp; end; Könnt ihr mir sagen was ich falsch gemacht habe? Grüße Stefan |
Re: Objektreferenz übergeben (Self)
Bist du sicher dass es wirklich ganz genau die selbe Adresse ist? Nicht nur evtl. ein Zahlendreher o.ä.? Das einzige was mir (nach jetzt 23h wach) noch einfallen würde wäre, dass du im dem ersten Proxy aus Versehen zwei Boxen erstellst. Also etwa der Art:
Delphi-Quellcode:
Die Adressen von proxy1 und proxy2 lägen aber auch nah genug beieinander um den Unterschied trotz drei Mal hinsehen übersehen zu können. Besonders um zehn vor fünf :)
var
proxy1, proxy2: TComboProxy; begin proxy1 := TComboProxy.Create; proxy2 := TComboProxy.Create; proxy1.AddControl(FooForm); proxy1.AddControl(FooForm); // und hier dank z.B. copy&paste Fehler nochmal proxy1 end; Edit: Note to self: "delphi <> quote", grad im selben Block. Edit2: Grammatik lässt auch schon nach. Bett... |
Re: Objektreferenz übergeben (Self)
Hallo Medium,
in der Tat: Der von mir gepostet Code ist korrekt und der Fehler lag ganz woanders. Ich habe ein TButtonCategories-Control und über Drag und Drop füge ich ähnlich wie im Delphi-Designer Controls in ein Panel ein. Das Problem war, dass ich pro Control immer nur eine Instanz vom Objekt hatte und nur eine Referenz übergeben habe. Ist ja auch kein Wunder das die "alle" Objekte an der selben Adresse liegen ;-) Ein
Delphi-Quellcode:
ist hier übrigens ganz praktisch gewesen (für alle die das gleiche Problem haben!)
MyNewObj := (MyOldObj.NewInstance as TMyObject);
Grüße Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 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 by Thomas Breitkreuz