Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Chart Serie zur Laufzeit erstellen (https://www.delphipraxis.net/70712-chart-serie-zur-laufzeit-erstellen.html)

renekr 3. Jun 2006 11:22


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.

marabu 3. Jun 2006 11:55

Re: Chart Serie zur Laufzeit erstellen
 
Hallo René,

das geht so:

Delphi-Quellcode:
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;
Grüße vom marabu

renekr 3. Jun 2006 12:15

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?

Caption Probleme

danke.

renekr 3. Jun 2006 13:41

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:
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;
Die Eigenschaft ColorEachPoint nimet der chart auch nicht an.
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

marabu 3. Jun 2006 19:36

Re: Chart Serie zur Laufzeit erstellen
 
Hi René,

Zitat:

Zitat von renekr
Es ist immer wieder eine Freude Tips von dir zu bekommen.

vielen Dank für die Blumen.

Zitat:

Zitat von renekr
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.

Eigenschaften von Chart1 auf Chart2 übertragen geht so:

Delphi-Quellcode:
Chart2.Assign(Chart1);
Zitat:

Zitat von renekr
Kannst du mir noch sagen wie ich die "ExplodeBiggest = 30" Eigenschaft setzen kann?

Das ist eine Eigenschaft von TPieSeries:

Delphi-Quellcode:
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;
Freundliche Grüße vom marabu

renekr 3. Jun 2006 22:14

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.

marabu 3. Jun 2006 22:18

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

renekr 3. Jun 2006 22:26

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.

renekr 4. Jun 2006 13:02

Re: Chart Serie zur Laufzeit erstellen
 
Hi Marabu,

also ich habe es nun so gelöst ohne eine Serie zu createn.
Delphi-Quellcode:

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;
Vorteil ich muss den Chart nicht per For Schleife durchlaufen wegen den Werten.

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

marabu 5. Jun 2006 10:38

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

Delphi-Quellcode:
with Chart1[0] as TBarSeries do
  BarStyle := Succ(BarStyle);
Die Export-Funktionalität von TeeChart ist kein Bestandteil von TChart.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.
Seite 1 von 2  1 2      

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