Delphi-PRAXiS

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 einfache TChart Sache... (https://www.delphipraxis.net/35671-einfache-tchart-sache.html)

Drunken_SheeP 10. Dez 2004 14:39


einfache TChart Sache...
 
hi,

ich hab folgendes problem:
ich möchte eine einfache wertereihe in einem diagramm darstellen. also auf knopfdruck soll ein wert in ein TChart eingetragen werden. mit diesem series.add.blalba geht das nicht so wie ich das will, weil es ja den wert immer rechts neu einträgt. was ich will ist, dass ein wert als balken in einem koordinatensystem eingetragen wird, bei dem ich die x und y achse selber definiert habe.

frage nun, wie stell ich das an (syntax und def des koordinatensystems), komme im moment irgendwie (TChart anleitung ist mir zu unverständlich) nicht weiter. ich beschäftige mich seit ca einem halben jahr nu mit delphi im informatikuntterricht in der schule, und bin also noch nicht so fortgeschritten. wir sind halt etwas lahm in der schule (an mir liegts nich :-D ). naja und dieses prog wollte ich aus eigener intenstion zur auswertung des Millikan versuchs für den physikunterricht schreiben...

würde mich sehr über hilfe freuen...

Steve 10. Dez 2004 14:58

Re: einfache TChart Sache...
 
Hi,

schau Dir mal TBarSeries (für Balken) und AddXY (Hinzufügen) an...


Gruß
Stephan :dance: :xmas:

Drunken_SheeP 11. Dez 2004 14:11

Re: einfache TChart Sache...
 
dickes thx schonmal, damit bin ich schon ein stückl weiter :-D

Drunken_SheeP 14. Dez 2004 18:49

Re: einfache TChart Sache...
 
*push*

was ich irgendwie nirgendswo finde:
wie bekomm ich den Y Wert an der Stelle X aus einem Histogramm (TChart)?

mikhal 14. Dez 2004 19:56

Re: einfache TChart Sache...
 
Schau dir mal das Ereignis OnClickSeries der Klasse TChart an, dort wird dir mitgeteilt, welche Series angeklickt wurde, welcher Wert der Reihe auf der X-Achse (ValueIndex) angeklickt wurde ...

Um jetzt den Y-Wert zu erhalten, benötigst du nur noch die Eigenschaft YValue der Series, also etwa so:

Code:
var
  dMeinWert: Double;
...

  dMeinWert := Series.YValue[ValueIndex]
...
Grüße
Mikhal

Drunken_SheeP 14. Dez 2004 21:22

Re: einfache TChart Sache...
 
nur das ich das klar versteh,

dMeinWert := Series.YValue[ValueIndex]

Dieses [YalueIndex] ist dann der Wert der X-Achse oder? der muss aber integer sein...wie bekomm ich nu hin, das der double ist? oder hab ich was verpeilt, bin gard müde, schau mir morgen das nochmal an. Danke trotzdem!

mikhal 15. Dez 2004 05:33

Re: einfache TChart Sache...
 
ValueIndex stellt nicht den Wert auf der X-Achse dar sondern ist der n-te Wert auf deiner x-Achse. Um den Wert auf der x-Achse zu bestimmen.

Schau dir mal folgendes Beispiel an. Es verlangt einfach nur eine TChart auf einem Form:

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.Add(0.5, '1,5', clRed);
  Series1.Add(1.2, '2,5', clRed);
  Series1.Add(2.1, '3,2', clRed);
end;

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;
  Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  dYWert: Double;
  iNterWert: Integer;
  dXwert: Double;
begin
  iNterWert := ValueIndex;
  dYWert := Series.YValue[ValueIndex];
  dXWert := StrToFloat(Series.XLabel[ValueIndex]);
  ShowMessage(Format('Y-Wert ist %g an n-ter (%d) Position auf der x-Achse,%sder x-Wert beträgt %g',
                   [dYWert, iNterWert, #13#10, dXWert]));
end;
Grüße
Mikhal

Drunken_SheeP 16. Dez 2004 13:18

Re: einfache TChart Sache...
 
Hi,

also zuerstma, wenn ich deinen Quelltext einfüg, nen chart auf die form zieh unds dann ablaufn lass kommt

Code:
[Error] Unit1.pas(26): Undeclared identifier: 'FormCreate'
[Error] Unit1.pas(28): Undeclared identifier: 'Series1'
[Error] Unit1.pas(29): Missing operator or semicolon
[Error] Unit1.pas(30): Missing operator or semicolon
[Error] Unit1.pas(33): Undeclared identifier: 'Chart1ClickSeries'
[Error] Unit1.pas(33): ';' expected but '(' found
[Error] Unit1.pas(41): Undeclared identifier: 'ValueIndex'
[Error] Unit1.pas(42): Undeclared identifier: 'YValue'
[Error] Unit1.pas(43): Undeclared identifier: 'XLabel'
[Fatal Error] Project2.dpr(6): Could not compile used unit 'Unit1.pas'
kann es sein das das mit der delphi version zusammenhängt? was für ein delphi hast du? ich hab Delphi 6...

ich bekomm das mitm y wert an der stelle x also noch immer nicht raus, ich erklär euch ma kurz für was ich das bräuchte, geht sicher auch anders. also ich will quasi einen X wert eingeben, und das chart soll dann den zugehörigen Y wert jeweils um 1 erhöhen...und ich komm irgendwie mitm diesem chart nicht zurecht...hlp plz :cry:

mikhal 16. Dez 2004 17:29

Re: einfache TChart Sache...
 
Die Rumpf der Methode FormCreate wird automatische erzeugt, wenn du einen Doppelklick auf deine Form machst. Dorthinein kopierst du dann den Inhalt meines Quelltextes in FormCreate. Die Methode Chart1ClickSeries wird mit einem Doppelklick auf das Ereignis OnClickSeries im ObjectInspector erzeugt, wenn du die Chart-Komponente markierst. Auch hier kopierst du die entsprechenden Quelltextzeilen hinein. Dann sollte es laufen...

Grüße
Mikhal

Drunken_SheeP 17. Dez 2004 07:59

Re: einfache TChart Sache...
 
omg okay nu hab ichs glaub verstanden...dickes dankeschön!

Drunken_SheeP 17. Dez 2004 14:05

Re: einfache TChart Sache...
 
okay scheisse, zu früh gefreut...

ich hab zwar nu verstanden was dieses Valueindex (omg hab ich mich dabei dumm angestellt) aber mein problem löst das ja nicht. ich adde ja meine daten nicht nacheinandern, Also mit series1.add(23 , '5'); sondern muss es ja mit diesem Series AddXY(23 , 5) und dabei gibt es ja dieses valueindex nicht (oder etwa doch?).

was ich will ist halt, dass wenn ich einen Wert x eingebe. der balken bei x um eins erhöht wird. also ich geb z.B x=23 ein und der y wert(also der balken) ist dann 1, geb ich x=23 nochmal ein, dann steigt der y wert auf 2, wenn ichs ein drittes mal mach dann auf 3 usw. wenn ich aber ein anderes x, zB. x=3, eingeb, dann ist der balken auf dem x=3 1, usw. hoffe das system ist klar geworden. was ich im prinzip darstellen will ist wie oft ich einen wert gemessen habe. Auf der X-achse trag ich den gemessenen wert ein, und jedes mal wenn ich den eingeb, steigt der y wert von diesem x um eins.

was ich mir gedacht habe wie ich das lösen könnte(also quasi so irgendwie)

Delphi-Quellcode:
  X:= StrtoFloat(Edit1.text);
 
  Series1.AddXY( X, <Ywert-von-X> +1);
und eben dieses <Ywert-von-X> würd ich gern wissen :cry:

mikhal 17. Dez 2004 14:33

Re: einfache TChart Sache...
 
Wie du deine Meßreihe realisierst ist doch egal, mein Beispiel oben lieferte lediglich drei Balken auf der X-Achse mit entsprechenden Y-Werten.

Das Ereignis OnClickSeries sagt dir immer, welchen deiner Balken (welcher X-Wert) du angeklickt hast (ValueIndex), und die Eigenschaft Series.YValue[ValueIndex] liefert dir genau den gesuchten Y-Wert. Probier's doch mal aus.

Grüße
Mikhal

Drunken_SheeP 17. Dez 2004 15:24

Re: einfache TChart Sache...
 
ich habe ein einfaches form, ein Tchart drauf, ein series1 das ein balkendiagramm ist

deinen code, nur in sofern geändert, das ich aus Series1.Add, Series1AddXY gemacht habe:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Series1.AddXY(0.5, 1.5);
  Series1.AddXY(1.2, 2.5);
  Series1.AddXY(2.1, 3.2);
end;

procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;
  Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  dYWert: Double;
  iNterWert: Integer;
  dXwert: Double;
begin
  iNterWert := ValueIndex;
  dYWert := Series.YValue[ValueIndex];
  dXWert := StrToFloat(Series.XLabel[ValueIndex]);
  ShowMessage(Format('Y-Wert ist %g an n-ter (%d) Position auf der x-Achse,%sder x-Wert beträgt %g',
                   [dYWert, iNterWert, #13#10, dXWert]));
end;
Dann kommt der Error:
blablabla... ' ' is not a valid floating point value'

mikhal 17. Dez 2004 16:58

Re: einfache TChart Sache...
 
Wann kommt der Error? Wahrscheinlich beim Auslesen von XLabel, das du freundlicherweise nicht gesetzt hast.

Laut OH solltest du es wohl so schreiben, damit mein Beispiel auch funktioniert:
Delphi-Quellcode:
  Series1.AddXY(0.5, 1.5, '1.5');
  Series1.AddXY(1.2, 2.5, '2.5');
  Series1.AddXY(2.1, 3.2, '3.2');
Grüße
Mikhal

Drunken_SheeP 19. Dez 2004 00:16

Re: einfache TChart Sache...
 
aye ich habs gelöst...mit dem lösungsweg hier hab ichs nicht geschaft, aber trotzdem vielen lieben dank. ich habs dann mit nem array gemacht. nun ist zwar meien wertetabbelle auf theoretisch begrenzt, aber praktisch macht das keinen unterschied.

noch eine klitzekleine frage hab ich aber noch. jedes mal wenn ich nen balken zu dem chart enge, wird die breite von den balken immer geringer...kann man das irgendwie abstellen?


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