![]() |
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:
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.
// 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; 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. |
Re: Objekt kopieren mittels RTTI?
Du kannst es mal mit unserer
![]() Da gibt es eine rttihCloneObject-Funktion. |
Re: Objekt kopieren mittels RTTI?
Moin !
Danke. Habe inzwischen auch das gefunden: ![]() ![]() Überlege nur noch wie ich die Daten einer TChart Serie am einfachsten kopieren kann. |
Re: Objekt kopieren mittels RTTI?
Hallo, da fällt mir auf die Schnelle nur ein :
Delphi-Quellcode:
Gruß
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; Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 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