Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Objekt kopieren mittels RTTI? (https://www.delphipraxis.net/133998-objekt-kopieren-mittels-rtti.html)

moelski 13. Mai 2009 17:36


Objekt kopieren mittels RTTI?
 
Moin !

Ich versuche gerade aus einem temporären nicht sichtbaren TChart eine Serie in ein anderes sichtbares TChart zu kopieren. TChart bietet da Funktionen an wie CloneChartSeries. Aber das funktioniert leider nicht richtig mit dem Kostrukt was ich hier habe:
Delphi-Quellcode:
    // Dummy Chart erzeugen
    tmpEmpty := TChart.Create(nil);   { Create an empty chart } 
    tmpEmpty.Parent := Self;
    try
      LoadChartFromStream(TCustomChart(tmpEmpty), Stream);    // Dummy Chart mit Stream füllen
      TargetChart.AddSeries(CloneChartSeries(tmpEmpty[0]));  // Serie 0 Clonen
      TargetChart[TargetChart.SeriesCount - 1].Assign( tmpEmpty[0] ) ;
    finally
      Stream.Free;
      tmpEmpty.Free;                  // Dummy Chart löschen
      TargetListBox.UpdateSeries;
      TargetChart.Refresh;
    end;
Sobald man das tempChart (heisst im Beispiel oben tmpEmpty) löscht (Free) verschwindet auch die Serie wieder auf dem TargetChart. Ich habe deshalb bei Steema eine Anfrage gestellt und das Problem ist erkannt - nur eine wirklich passabele Lösung gibt es leider nicht.

Drum meine Frage ... Wäre es nicht möglich RTTI für eine Kopie zu benutzen? Es ist je bekannt welcher Serien Typ im TempChart vorhanden ist. Diesen Typ erstelle ich in meinem TargetChart mittels Create. Und dann mittels RTTI alle Eigenschaften kopieren. Wäre das machbar? Hat dafür jemand ein Beispiel (würde ja ein Beispiel mit einer x beliebigen Komponente reichen).
Ich bin mir dann zwar noch nicht sicher ob und wie ich die XY Daten der Serie kopiert bekomme, aber da lässt sich bestimmt was finden. Wichtig wäre nur erstmal eine Kopie anzulegen, welche die gleichen Eigenschaften hat wie im Orginal.

chaosben 14. Mai 2009 06:57

Re: Objekt kopieren mittels RTTI?
 
Du kannst es mal mit unserer RTTIHelper-Library probieren.
Da gibt es eine rttihCloneObject-Funktion.

moelski 14. Mai 2009 07:21

Re: Objekt kopieren mittels RTTI?
 
Moin !

Danke. Habe inzwischen auch das gefunden:
http://www.blong.com/Conferences/Bor...RTTI/CB140.htm
http://www.blong.com/Conferences/Bor...RTTI/CB140.zip

Überlege nur noch wie ich die Daten einer TChart Serie am einfachsten kopieren kann.

steffen_d 14. Mai 2009 16:38

Re: Objekt kopieren mittels RTTI?
 
Hallo, da fällt mir auf die Schnelle nur ein :

Delphi-Quellcode:
for i := 0 to tmpEmpty.Series[0].Count -1 do
begin
    TargetChart.Series[TargetChart.SeriesCount - 1].AddXY(tmpEmpty.Series[0].XValue[i], tmpEmpty.Series[0].YValue[i], tmpEmpty.Series[0].XLabel[i], tmpEmpty.Series[0].ValueColor[i]);
end;
Gruß
Steffen


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