Autor Beitrag
Andreas.Knof
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 25.04.07 09:22 
Hallo Leute,

wie kann man ein Tchart in in array umwandeln, wenn man nicht weiß, wie viele Diagrammpunkte im Tchart enthalten sind?
Ich mache eine Messwerterfassung und weiß am Ende eben nicht, wie viele Messwerte es genau sind und möchte jeden Einzelwert in ein arrayfeld übergeben, weil ich mit den Messwerten noch rechnen möchte.

habe folgenden probiert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Button1Click...
var
 t: integer 
 Messwerte:=Array[0..1000of integer;     //Messwerte:=Array[0..t] of integer nimmt er nicht    
 index : integer;

begin
 for i=0 to Series1.Count-1 do
  begin
   Messwerte[index]:= Series1.YValue[index] //hier sollen Y Werte ins Array geschreiben werden
   inc(index);
   if index:=1000 then index:=0;            //Schutz vor "Überlauf"
 end;


Problem:
1.) Ihn stört das Series1.YValue[index]; mit Series1.YValues.Value[index] gehts auch nicht
2.) ihn stärt irgendetwas am "index"
3.) hier ist mein array 1000 Felder groß. Der Befehl Messwerte:=array[0..t] nimmt er nicht

Ich kann nicht sagen, was an diesen "4 Zeiler" falsch sein sollte.
Könnt ihr mir bitte einen Tipp geben!
Danke im Voraus.

Andreas

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 25.04.07 09:38 
Hi,

erstmal ist es deutlich einfacher, dein Posting zu lesen, wenn du die Delphi-Tags <span class="inlineSyntax"></span> verwendest!

user profile iconAndreas.Knof hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Button1Click...
var
 t: integer 
 Messwerte:=Array[0..1000of integer;     //Messwerte:=Array[0..t] of integer nimmt er nicht    
 index : integer;

begin
 for i=0 to Series1.Count-1 do
  begin
   Messwerte[index]:= Series1.YValue[index] //hier sollen Y Werte ins Array geschreiben werden
   inc(index);
   if index:=1000 then index:=0;            //Schutz vor "Überlauf"
 end;



Wozu benutzt du index, wenn deine Schleife i durchläuft?
Du hast i nicht deklariert. Versuch mal statt des index : integer; einfach i : integer; zu verwenden und innerhalb der schleife dann auch i zu verwenden. das inc() ist dann auch nicht mehr nötig, das erledigt dann die schleife für dich.
Hoffe, damit kommst du weiter.

Gruß,
Miri

_________________
Anonymes Eckenkind
Andreas.Knof Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 25.04.07 10:58 
Tag,

war ein Schreibfehler von mir das mit i und index. Ihn stört aber die Zeile:
Messwerte[i]:= Series1.YValue[i]

Wie lasse ich den den Quelltext in bekannte Delphi Form im Posting erscheinen: einfach vor den Text bringen?

Gruß
Andreas
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 25.04.07 11:08 
user profile iconMiri hat folgendes geschrieben:

erstmal ist es deutlich einfacher, dein Posting zu lesen, wenn du die Delphi-Tags <span class="inlineSyntax"></span> verwendest!


Einfach vor deinem Code <span class="inlineSyntax"> und dahinter</span> schreiben.

So, und nun verrate uns doch mal genau, was für ein Fehler kommt...
Unter Umständen reicht es, wenn du hinter die Zeile, die du nanntest, ein ; setzt. Oder ist das auch beim Abtippen abhanden gekommen, so wie das mit dem index und dem i? -> Bei sowas ist es hilfreicher, Copy & Paste zu verwenden, damit sich soetwas nicht einschleicht.

Aber wie gesagt, ohne genaue Fehlerbeschreibung kann man nur raten.

Das mit dem array[0..t] nicht funktioniert, liegt daran, dass man mit den eckigen Klammern ein statisches Array definiert. Wie der Name "Statisch" schon sagt, kann man da nicht viel mit (dynamischen) Variablen anfangen.
Es gibt aber auch dynamische Arrays, dabei hilft dir die Suchfunktion! :-)

_________________
Anonymes Eckenkind
Andreas.Knof Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 25.04.07 12:30 
Tag,

der "Internetrechner" ist leider nicht der "Delphirechner". Ich werde Dir morgen mal den kopierten Quelltext, einschließlich der Fehlermeldung, zeigen. Falls ich es heute nicht hinbekomme. Am ; liegt es allerdings nicht. Wäre zu schön gewesen. Obwohl solche Leichtsinnsfehler wie ; oder ähnliche ja auch schon zu oft vorgekommen sind.

Danke und bis morgen denn, wenn du kannst.

Gruß
Andreas
Andreas.Knof Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 26.04.07 10:00 
Tag zusammen,

habs hinbekommen. Der Fehler von Delphi war "nicht genügend wirkliche Parameter".
Ich hatte vergessen, Tpyumwandlungen flottostr us.w vor der Wertzuweisung vorzunehmen.

Viele Grüße
Andreas
Platon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 42

WinXP, Windows 7
Delphi 5 Enterprise, Delphi 2005 Architect, Delphi 2007 Prof., Delphi 2010 Prof., Delphi XE2 Prof., Visual C++ 6.0, LabView 7.1, SPS
BeitragVerfasst: Do 26.04.07 10:01 
Hoi,

warum verwendest du Arrays ? Ich hab auch mit den TChart gearbeitet und ich habe auch Messwerte in dem TChart....nach der Auswahl des Berecihes im TChart des Anwenders, packe ich die visible Punkte in eine Liste...
Hab ein Objekt geschrieben und dann eine Liste ringsrum gepackt...
Die Liste kannst du nun beliebig erweitern und auch das rausholen der Punkte ist ja auch nur eine for-Schleife.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
...

interface

uses
  Classes, Contnrs;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
type
  TPoint = class(TPersistent)
  public
    XValue : double;
    YValue : double;
  end;

{------------------------------------------------------------------------------}
type
  TPointList = class(TObjectList)
  protected
    function GetPoint(Index: integer): TPoint;
  public
    constructor create;
    property Items[Index: integer]: TPoint read GetPoint;
  end;

...

{******************************************************************************}
implementation

{ TPointList }
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
constructor TPointList.create;
  begin
    inherited create;
  end;

{------------------------------------------------------------------------------}
function TPointList.GetPoint(Index: integer): TPoint;
  begin
    result := TPoint(inherited Items[Index]);
  end;
Andreas.Knof Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 26.04.07 15:14 
Hi,

das Array soll nur zum Zwischenbunkern der Werte dienen. Anschließend will ich dann ein paar Rechnungen dran vornehmen (Statistik, Filterung usw, Extrema-Analyse).
Zum Speichern der Diagrammpunkte in einer Datei - zum späteren Anschauen in Excel o.ä. - habe ich bereits eine Prozedure.

Erst wollte ich mit Tlist arbeiten, schien mir dann aber zu kompliziert.

Deine Variante kenn ich noch nicht. Gibts da Unterschiede zw. unseren beiden Varianten? Vorteil Deiner wäre, dass nicht vorher der maximale Wertebedarf festgelegt werden braucht. Aber damit kann ich leben.

Interessant wäre, wie man die X Achse "laufen" lassen kann. Denn ich hab ca. 1000 Messwerte, die dann auf 10cm*10cm Diagrammfläche arg gequetscht werden. Schön wäre, wenn er nur die letzten 20 anzeigen würde, aber OHNE die Vorhergehenden zu löschen!!! Hattest Du das selbe Problem?

Gruß
Andreas