Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Daten sollen im Chart hervorgehoben/markiert werden (https://www.delphipraxis.net/200044-daten-sollen-im-chart-hervorgehoben-markiert-werden.html)

delphicoder123 14. Mär 2019 07:37

Daten sollen im Chart hervorgehoben/markiert werden
 
Hallo,
wenn ich mich in einem Grid auf einer Zelle befinde, dann soll der dazugehörige Wert im Chart hervorgehoben(markiert) werden.
Ist das irgendwie möglich?

newIndy 14. Mär 2019 17:07

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
Zitat:

Zitat von delphicoder123 (Beitrag 1427684)
Hallo,
wenn ich mich in einem Grid auf einer Zelle befinde, dann soll der dazugehörige Wert im Chart hervorgehoben(markiert) werden.
Ist das irgendwie möglich?

Ja. Den Index holst du über 'OnCellClick' des DBGrid oder über 'OnDataChange'.
Zeichnen kannst du dann mit 'TChartSeries.AfterDrawValues'
und bei '3D-Ansicht' mit 'TChartSeries.BeforeDrawValues'.
Die Zeichenkoordinaten holst du mit
x := DeltaESeries.CalcXPos(1); // x-Position von ValueIndex
y := DeltaESeries.CalcYPos(1); // y-Position von ValueIndex
x := DeltaESeries.CalcXPosValue(1); // x-Position von Value
y := DeltaESeries.CalcYPosValue(1); // y-Position von Value
// Beispiel in etwa so:
procedure TMainForm.SeriesAfterDrawValues(Sender: TObject);
var x, y:Integer;
begin
x := Series.CalcXPos(Index); // x-Position von ValueIndex
y := Series.CalcYPos(Index); // y-Position von ValueIndex
Chart.Canvas.Pen.Width := 3;
Chart.Canvas.Pen.Style := psSolid;
Chart.Canvas.Pen.Color := clRed;

Chart.Canvas.MoveTo(x, y);
Chart.Canvas.LineTo(x, y +10);
end;

mfG newIndy

delphicoder123 15. Mär 2019 07:01

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
Live-Bindings sind nicht möglich, da man keine Komponente auf eine andere Komponente binden kann, sondern nur Daten auf eine andere Komponente binden?

hoika 15. Mär 2019 07:32

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
Hallo,
die Antwort hatte doch nichts mit Live-Bindung zu tun.
Du hast ein (DB?)-Grid, darunter liegt ein DataSource->DataSet.
Ein Klick auf das Grid setzt den Datensatz-Zeiger im DataSet um.
Vom DataSet holst Du dir die Daten des ausgewählten Datensatzes.
Und danach aktualisiert du dein Chart.

delphicoder123 15. Mär 2019 09:14

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
Zitat:

Zitat von newIndy (Beitrag 1427748)
Zitat:

Zitat von delphicoder123 (Beitrag 1427684)
Hallo,
wenn ich mich in einem Grid auf einer Zelle befinde, dann soll der dazugehörige Wert im Chart hervorgehoben(markiert) werden.
Ist das irgendwie möglich?

Ja. Den Index holst du über 'OnCellClick' des DBGrid oder über 'OnDataChange'.
Zeichnen kannst du dann mit 'TChartSeries.AfterDrawValues'
und bei '3D-Ansicht' mit 'TChartSeries.BeforeDrawValues'.
Die Zeichenkoordinaten holst du mit
x := DeltaESeries.CalcXPos(1); // x-Position von ValueIndex
y := DeltaESeries.CalcYPos(1); // y-Position von ValueIndex
x := DeltaESeries.CalcXPosValue(1); // x-Position von Value
y := DeltaESeries.CalcYPosValue(1); // y-Position von Value
// Beispiel in etwa so:
procedure TMainForm.SeriesAfterDrawValues(Sender: TObject);
var x, y:Integer;
begin
x := Series.CalcXPos(Index); // x-Position von ValueIndex
y := Series.CalcYPos(Index); // y-Position von ValueIndex
Chart.Canvas.Pen.Width := 3;
Chart.Canvas.Pen.Style := psSolid;
Chart.Canvas.Pen.Color := clRed;

Chart.Canvas.MoveTo(x, y);
Chart.Canvas.LineTo(x, y +10);
end;

mfG newIndy

CalcXPos bzw. CalcXPosValue erwartet Integer als Parameter. Was kann ich aber machen, wenn ich auf der x-Achse Datumsfelder habe?

hoika 15. Mär 2019 09:31

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
Hallo,
CalXPos wird doch der Index übergeben, also der wie vielte X-Eintrag (beginnend bei 0).

delphicoder123 15. Mär 2019 10:50

AW: Daten sollen im Chart hervorgehoben/markiert werden
 
* Den Index hab ich mit grid.DataSource.DataSet.RecNo -1; geholt
* AfterDrawValues und BeforeDrawValues hat der Chart als Ereignis nicht. Dafür aber onBeforeDrawAxes, onBeforeDrawChart und onBeforeDrawSeries


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