AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Zur Designetime erzeugte TeeChart.Series per Name ansprechen
Thema durchsuchen
Ansicht
Themen-Optionen

Zur Designetime erzeugte TeeChart.Series per Name ansprechen

Ein Thema von norwegen60 · begonnen am 1. Mär 2019 · letzter Beitrag vom 5. Mär 2019
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#1

Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 1. Mär 2019, 12:45
Delphi-Version: XE
Hallo zusammen,

ich erzeuge per
Delphi-Quellcode:
    lsSeries := TLineSeries.Create(nil);

    lsSeries.Name := 'lsAverage';
    lsSeries.Title := 'Average';
    lsSeries.Marks.Visible := False;
    lsSeries.ValueFormat := '0.#';
    lsSeries.LinePen.Width := 1;
    lsSeries.XValues.DateTime := False;
    lsSeries.XValues.Order := loAscending;
    lsSeries.YValues.Order := loNone;
    lsSeries.SeriesColor := clBlue;
    lsSeries.Pointer.Visible := False;

    Chart1.AddSeries(lsSeries);
eine TLineSeries.

Wie kann ich die nun später im Code über den Namen lsAverage ansprechen um z.B. Daten zu laden (und nicht über den Index Chart1.Series[1].AddXY(Xvalue, Yvalue); )


Danke
Gerd
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 1. Mär 2019, 14:23
Hallo zusammen,

ich erzeuge per
Delphi-Quellcode:
    lsSeries := TLineSeries.Create(nil);

    lsSeries.Name := 'lsAverage';
    lsSeries.Title := 'Average';
    lsSeries.Marks.Visible := False;
    lsSeries.ValueFormat := '0.#';
    lsSeries.LinePen.Width := 1;
    lsSeries.XValues.DateTime := False;
    lsSeries.XValues.Order := loAscending;
    lsSeries.YValues.Order := loNone;
    lsSeries.SeriesColor := clBlue;
    lsSeries.Pointer.Visible := False;

    Chart1.AddSeries(lsSeries);
eine TLineSeries.

Wie kann ich die nun später im Code über den Namen lsAverage ansprechen um z.B. Daten zu laden (und nicht über den Index Chart1.Series[1].AddXY(Xvalue, Yvalue); )


Danke
Gerd
Versuch mal

lSeries := Chart1.Series.FindComponent('lsAverage') as TLineSeries; Ich weis nicht, ob Chart1.AddSeries den Owner des übergebenen Objektes setzt, wenn er Nil ist, und wenn ja, was als Owner verwendet wird. Sieh mal im Sourcecode nach.
Peter Below
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
504 Beiträge
 
Delphi 12 Athens
 
#3

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 2. Mär 2019, 17:39
Versuch mal

lSeries := Chart1.Series.FindComponent('lsAverage') as TLineSeries; Ich weis nicht, ob Chart1.AddSeries den Owner des übergebenen Objektes setzt, wenn er Nil ist, und wenn ja, was als Owner verwendet wird. Sieh mal im Sourcecode nach.
Nein, das funktioniert nicht. Beim Aufruf von Chart1.Series wird der Index erwartet.
Suche über Chart1.FindComponent oder Chart1.SeriesGroup.FindComponent gibt nil zurück
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 3. Mär 2019, 12:21
Versuch mal

lSeries := Chart1.Series.FindComponent('lsAverage') as TLineSeries; Ich weis nicht, ob Chart1.AddSeries den Owner des übergebenen Objektes setzt, wenn er Nil ist, und wenn ja, was als Owner verwendet wird. Sieh mal im Sourcecode nach.
Nein, das funktioniert nicht. Beim Aufruf von Chart1.Series wird der Index erwartet.
Suche über Chart1.FindComponent oder Chart1.SeriesGroup.FindComponent gibt nil zurück
Kompisch. Laut Hilfe gibt TChart.Series ein Objekt des Type TChartSeries zurück. Das hat eine default property, die indizierten Zugriff erlaubt, aber TChartSeries stammt von TComponent ab, erbt also auch die FindComponent-Methode.

Du erzeugst in deinem Kode doch die TLineSeries direkt. Gib doch einfach anstelle von nil Chart1 als Owner an den Constructor. dann sollte Chart1.FindCOmponent funktionieren.
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 3. Mär 2019, 14:30
// so funktioniert es:
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
var Kurve:TBitmap;
    Chart1:TChart;
    lsSeries:TLineSeries;
begin
     try
        Chart1 := TChart.Create(Self);
        lsSeries := TLineSeries.Create(Chart1);
        lsSeries.BeginUpdate;
        lsSeries.Name := 'lsAverage';
        lsSeries.Title := 'Average';
        lsSeries.Marks.Visible := False;
        lsSeries.ValueFormat := '0.#';
        lsSeries.LinePen.Width := 1;
        lsSeries.XValues.DateTime := False;
        lsSeries.XValues.Order := loAscending;
        lsSeries.YValues.Order := loNone;
        lsSeries.SeriesColor := clBlue;
        lsSeries.Pointer.Visible := False;
        lsSeries.ParentChart := Chart1; // !
        lsSeries.FillSampleValues(100);
        lsSeries.EndUpdate;
        Kurve := Chart1.TeeCreateBitmap(clWhite, Image1.ClientRect, pf24bit);
        Image1.Canvas.Draw(0,0, Kurve);
     finally
        Kurve.Free;
        lsSeries.Free;
        Chart1.Free;
     end;
end;
mfG newIndy
Miniaturansicht angehängter Grafiken
lsseries.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 4. Mär 2019, 20:43
Delphi-Quellcode:
        
for i := 0 to 30 do if (lsSeries as TLineSeries).Name = 'lsAverage'
            then (lsSeries as TLineSeries).Add(Random);
           //lsSeries.FillSampleValues(100);
        for i := 0 to 30 do if
            (Chart1.FindComponent('lsAverage') as TLineSeries).Name = 'lsAverage'
            then (Chart1.FindComponent('lsAverage') as TLineSeries).Add(Random);
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#7

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 4. Mär 2019, 23:41
Wenn du beim Erzeugen der Series statt nil eine TComponent -Instanz (z.B. das Chart selbst) als Owner angibst, dann kannst du über das FindComponent dieser Instanz die Series über ihren Namen finden. Wichtig ist halt, daß die Namen innerhalb des Owner eindeutig sind.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  lsSeries: TLineSeries;
begin
  lsSeries := TLineSeries.Create(Chart1);

  lsSeries.Name := 'lsAverage';
  lsSeries.Title := 'Average';
  lsSeries.Marks.Visible := False;
  lsSeries.ValueFormat := '0.#';
  lsSeries.LinePen.Width := 1;
  lsSeries.XValues.DateTime := False;
  lsSeries.XValues.Order := loAscending;
  lsSeries.YValues.Order := loNone;
  lsSeries.SeriesColor := clBlue;
  lsSeries.Pointer.Visible := False;

  Chart1.AddSeries(lsSeries);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  series: TLineSeries;
begin
  series := Chart1.FindComponent('lsAverage') as TLineSeries;
  Button2.Caption := series.Title;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Zur Designetime erzeugte TeeChart.Series per Name ansprechen

  Alt 5. Mär 2019, 07:16
Warum nicht gleich die Variable lsSeries in TForm1 unter privat deklarieren?
Bernd
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:43 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