![]() |
Probleme mit Objektinstanzpointer
Hallo!
Habe ein großes Problem und finde einfach nicht die richtige Lösung. Ich habe 2 verschachtelte TLists. DeviceList->ItemList Dabei Nutze ich TItem.OnDataChanged als Multicastsender. -> procedure OnDataChanged(Sender:TObject;Value:Double); Jetzt muss ich leider herausbekommen welcher Item OnDataChanged auslöst. In meiner Itemlist habe ich Items $159ADD8,$159B120 und 159B198. Aber @Sender entspricht niemals meinen Items. if Item[I] = Sender then if @Item[i] = @Sender usw. Wollte selbst forschen aber wenn ich folgendes Konstrukt mehrfach anwende. neuesItem := TItem.Create; DeviceList.ItemList.Add(neuesItem); neuesItem.Text = IntToHex(integer(@neuesItem),8); dann haben alle meine Items den gleichen Namen. Was übersehe ich die ganze Zeit. Bin lamgsam voll verwirrt. Habt Dank für jeden Hinweis. |
AW: Probleme mit Objektinstanzpointer
Hallo und Willkommen in der DP :dp:,
ich habe Dein Konstrukt noch nicht so ganz durchblickt. Sind beide Listen vom Typ TList? Und ItemList ist eine Property von DeviceList? Oder doch eher eine jedes Devices in der DeviceList? Erklär doch noch einmal die Struktur im Detail. |
AW: Probleme mit Objektinstanzpointer
Hoffe das ist eher verständlich.
Habe eine Liste mit Devices und jedes Device hat ne Liste Items. Dabei representiert Item einen Messwert-Event. Diesen muss ich gleichzeitig an verschiedene Grafische Darstellungen weiterleiten(Deswegen Multicast). Type TFormMain = class(TForm) DeviceList : TList<TDevice>; end; type TDevice = class ItemList : TList<Item>; end; type TItem = class public Text : String; end; procedure TFormMain.Create() var d:TDevice; i:Titem; begin DeviceList := TList<TDevice>.Create; d := TDevice.create; DeviceList.Add(d); i:=TItem.Create; i.Text = IntToHex(integer(@i),8); d.ItemList.add(i); end; Type TFormMain = class(TForm) DeviceList : TList<TDevice>; end; type TDevice = class ItemList : TList<Item>; end; type TItem = class public Text : String; end; procedure TFormMain.Create() var d:TDevice; i:Titem; begin DeviceList := TList<TDevice>.Create; d := TDevice.create; DeviceList.Add(d); i:=TItem.Create; i.Text = IntToHex(integer(@i),8); d.ItemList.add(i); end; |
AW: Probleme mit Objektinstanzpointer
Irgendwie ist der Code wohl versehentlich doppelt vorhanden. Und benutze bitte Delphi-Tags (entweder über die "Helm"-Schaltfläche im Editor oder händisch mittels [ delphi] und [ /delphi] ohne die Leerzeichen). Gut, Du hast also 2 generische TLists, die Hierarchie ist dann DeviceList -> TDevice -> TItemList -> TItem, habe ich das soweit richtig gelesen? Und ist das per C&P eingefügter Code, oder hast Du den händisch abgeschrieben?
|
AW: Probleme mit Objektinstanzpointer
Zitat:
Delphi-Quellcode:
i.Text = IntToHex(Integer(Pointer(i)), 8);
|
AW: Probleme mit Objektinstanzpointer
Ok langsem lerne ich.
Danke schon mal Blup. Ihc wußte das Instanzen Objekte darstellen und wollte das mach um die Adresse vergleichen zu können. Schließlich ist mein problem folgendes im EventHandler. Der Vergleich mit dem ich Quelle meines Events erwischen will passt nicht. Habe auch schon @I = @E probiert bringt nichts. Langsam habe ich den verdacht das mir die TList den Ärger bereitet.
Delphi-Quellcode:
procedure TFormChart(Sender:TObject; Value:Double)
var I:Integer; begin for I := 0 to FItemLineSeries.Count - 1 do begin if FDeviceList[I].Item = TSpsItem(Sender) then begin FItemLineSeries[I].Data.Add(data); // Wert anfügen; break; end; end; end; Hier nochmal das Grundgerüst
Delphi-Quellcode:
Type TFormMain = class(TForm)
DeviceList : TList<TDevice>; end; type TDevice = class ItemList : TList<Item>; end; type TItem = class public Text : String; end; procedure TFormMain.Create() var d:TDevice; i:Titem; begin DeviceList := TList<TDevice>.Create; d := TDevice.create; DeviceList.Add(d); i:=TItem.Create; i.Text = IntToHex(integer(@i),8); d.ItemList.add(i); end; |
AW: Probleme mit Objektinstanzpointer
Müsste es nicht
Delphi-Quellcode:
heißen? Und ich bin etwas erstaunt, dass der Compiler wegen der fehlenden Forward-Deklarationen nicht meckert. Allerdings bin ich ehrlich gesagt immer noch Newbee, was Generics angeht, vielleicht ist das da ja etwas anders.
ItemList : TList<TItem>;
|
AW: Probleme mit Objektinstanzpointer
Gut bin selber erst seit ner Woche mit Delphi drann.
Aber ItemList stellt doch noch nur den Bezeichner dar ? Also Name : GenericType<DatenType> Ach je ich will zurück an mein C# das war vorhin das 394356mal das ich var Integer:I; geschrieben hab. |
AW: Probleme mit Objektinstanzpointer
Was ich meinte: statt TList<Item> TList<TItem>, es soll ja eine Liste der Instanzen der Klasse TItem sein.
|
AW: Probleme mit Objektinstanzpointer
ach jetzt ne TItem stimmt schon :oops:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 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