![]() |
Chart Serie zur Laufzeit erstellen
Hallo,
Kann mir jemand weiterhelfen. Ich habe einen Chart udn will bei Doppelclick auf ihn eine neue Form aufmachen mit dem cahrt drin. Allerdings hat der cahrt schon 2 Series mit Linien. diese lösche ich zuvor und will 1 neue PIE Serie Erstellen. Wie kann ich bei TChart eine Torten Serie oder Balken Diagramm zur Laufzeit erstellen? Danke. |
Re: Chart Serie zur Laufzeit erstellen
Hallo René,
das geht so:
Delphi-Quellcode:
Grüße vom marabu
var
ps: TPieSeries; begin ps := TPieSeries.Create(self); with ps do begin Name := 'PieSeries'; ParentChart := Chart; // ... Daten hinzufügen hier oder später end; end; |
Re: Chart Serie zur Laufzeit erstellen
Hi Marabu.
Es ist immer wieder eine Freude Tips von dir zu bekommen. Gibt es eigentlich ne möglichkeit,das ich zb. alle Eigenschaften von einem Cahrt auf Form1 zu Chart 1 auf Form 2 zb. übernehmen ohne alle manuell zu setzen. Kannst du mir noch sagen wie ich die "ExplodeBiggest = 30" Eigenschaft setzen kann? Find die einfach nicht. Vielen Vielen Dank. PS: Meinst du kansnt mir bei diesem Phänomen auch helfen? ![]() danke. |
Re: Chart Serie zur Laufzeit erstellen
Hi,
also hab es mal getestet und noch einige Fragen: Ich habe ja mit TBARSerie eine neue Serie Created. ( oder PIE ) Wenn ich nun den Chart per doppelclick auf eine neue Form wo ich vorher die Serie createt habe nochmas aufmache kommt nen Fehler das die Serie BarChart schon existiert. Was auch logisch ist. Die Form57 bleibt auch auf,also ich habs so gedacht das ich auf mehrere charts doppelclicke und die Form 57 geht dann auf mit dem cahrt wo geclickt wurde. Damit man die chart nebeneinander vergleichen oder größer ansehen kann. Hier mal mein Source:
Delphi-Quellcode:
Die Eigenschaft ColorEachPoint nimet der chart auch nicht an.
var
ps: TBarSeries; begin form57 := tform57.Create(self); form57.AdvToolBarPager1.caption.caption:='Chart # '+chart8.Title.text.text+' #'; ps := TBarSeries.Create(self); with ps do begin Name := 'BarSeries'; ColorEachPoint := True; Marks.Style := smsValue ; ParentChart := form57.Chart1; end; for i:= 0 to chart8.SeriesCount -1 do begin Form57.Chart1.Series[i].SeriesColor := Chart8.Series[i].SeriesColor; Form57.chart1.Series[i].Clear; Form57.chart1.Series[i].ShowInLegend:=false; Form57.chart1.Series[i].Title:=chart8.Series[i].title; for j:= 0 to chart8.Series[i].Count -1 do begin Form57.chart1.Series[i].Add(chart8.Series[i].YValue[j],chart8.Series[i].XLabel[j], chart8.Series[i].SeriesColor); end; end; form57.show; end; Diese macht ja das alle Balken in verschiedenen Farben angezeigt werden. Wie kann ich den die Eigenschaft besser setzen? ZB: Will ich auch die Bar Style in der Laufzeit ändern . Danke |
Re: Chart Serie zur Laufzeit erstellen
Hi René,
Zitat:
Zitat:
Delphi-Quellcode:
Chart2.Assign(Chart1);
Zitat:
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TDemoForm.AddButtonClick(Sender: TObject);
var ps: TPieSeries; begin { while Chart1.SeriesCount > 0 do Chart1.Series[0].Free; } ps := TPieSeries.Create(self); with ps do begin ps.ParentChart := Chart1; ps.AddPie(50 + Random(10), Chr(Ord('A') + ps.Count), clRed); ps.AddPie(50 + Random(10), Chr(Ord('A') + ps.Count), clBlue); ps.AddPie(50 + Random(10), Chr(Ord('A') + ps.Count), clGreen); ps.ExplodeBiggest := 30; end; end; |
Re: Chart Serie zur Laufzeit erstellen
Hi,
Nochmals Danke. Habe soweit alles implementiert. Kann es sein das die Assign Eigenschaft nicht alles übernimmt? Also Speziell die Eigenschaften der erstellten Serie ? Wenn ich zb eine PIE oder Bar Serie create werden die Markierungen nicht übernommen,also was über dem Balken oder Pie angezeigt wird. die Legend Farben vom Shadow auch nicht zb. Haste darauf eine Idee ? Das Problem mit der Serie habe ich immer noch. Wenn ich eine LineSerie mit 2 Serien habe und ich 2 erstelle sagt er mir das die Serie schon existiert,genauso wenn ich die Bar Serie im neuen form öffne und danach nochmal einen anderen Chart per doppelclick mit der Form nochmals öffnen will. Kann ich die "ps := TPieSeries.Create(self); " 2 mal aufrufen oder muss ich dann dazwischen ein Free machen,oder eine 2.var einbinden. Das mit dem Style der Bar Serie klappt einfach nicht. Wenn ich chart1.series[0].barstyl die propertie gibts nicht wenn ich es zur Laufzeit ändern will. Glaub ich dreh mich grad im Kreis. Danke und Gute Nacht. |
Re: Chart Serie zur Laufzeit erstellen
Assign() übernimmt nur die eigentlichen Eigenschaften des Chart - die Serien müssen geklont werden und können dann wiederum mit Assign() übernommen werden. Morgen mehr - wenn nötig.
Gute Nacht. marabu |
Re: Chart Serie zur Laufzeit erstellen
Hi,
Ok vielen Dank. Wäre nicht schlecht wenn mir morgen noch einige tips geben könntest,auch zu dem Caption Problem? gute Nacht. |
Re: Chart Serie zur Laufzeit erstellen
Hi Marabu,
also ich habe es nun so gelöst ohne eine Serie zu createn.
Delphi-Quellcode:
Vorteil ich muss den Chart nicht per For Schleife durchlaufen wegen den Werten.var i:integer; newSeries : TChartSeries; begin form57 := tform57.Create(self); form57.Chart1.AutoRepaint := False; WITH form57.Chart1 DO BEGIN FreeAllSeries; Assign(Chart5); END; while form57.Chart1.SeriesCount > 0 do form57.Chart1.Series[0].Free; form57.Chart1.assign(chart5); FOR I := 0 TO Chart5.SeriesCount - 1 DO BEGIN newSeries := CloneChartSeries(Chart5[I]); newSeries .ParentChart := form57.Chart1; form57.Chart1.AddSeries(newSeries ); END; form57.Chart1.AutoRepaint := True; form57.Chart1.Repaint; PS: Habe noch 2 Unklarheiten. Wie kann ich bei dem Chart mit Bar Serie die Barstyle zur Laufzeit ändern? Oder auch beim Clonechart. Also wenn ich Form1 chart1 eine Bar Serie auf den Cahrt Form57.chart1 Clone und dann die geclonte Serie zb. den Barstyle ändern will, Ich clone 3 serien, Bar Pie,Line. alle in die Selbe form die auch dazwischen geöffnet bleiben. PS: Man kann ja den Chart Savetofile und Laodfromfile machen als *.tee. Geht das nur mit der Full Version? Danke |
Re: Chart Serie zur Laufzeit erstellen
Hi René,
alles ist richtig so wie du es machst. Hier dein Code, nur etwas aufgeräumter:
Delphi-Quellcode:
Den BarStyle kannst du umstellen, sobald du dir einen Zeiger auf die BarSeries besorgt hast. Nehmen wir an es handele sich um die erste Serie im Chart, dann geht das z.B. so:
begin
with Form57 do begin with Chart1 do begin AutoRepaint := False; FreeAllSeries; Assign(Chart5); for i := 0 to Pred(Chart5.SeriesCount) do AddSeries(CloneChartSeries(Chart5[i])); AutoRepaint := True; end; Show; end; end;
Delphi-Quellcode:
Die Export-Funktionalität von TeeChart ist kein Bestandteil von TChart.
with Chart1[0] as TBarSeries do
BarStyle := Succ(BarStyle); Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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 by Thomas Breitkreuz