Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objektreferenz übergeben (Self) (https://www.delphipraxis.net/125449-objektreferenz-uebergeben-self.html)

Dawn87 6. Dez 2008 03:48


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

Könnt ihr mir sagen was ich falsch gemacht habe?

Grüße
Stefan

Medium 6. Dez 2008 05:28

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:
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;
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 :)


Edit: Note to self: "delphi <> quote", grad im selben Block.
Edit2: Grammatik lässt auch schon nach. Bett...

Dawn87 6. Dez 2008 11:36

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:
MyNewObj := (MyOldObj.NewInstance as TMyObject);
ist hier übrigens ganz praktisch gewesen (für alle die das gleiche Problem haben!)

Grüße
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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