AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten aus Array zeichnen

Ein Thema von Chris211183 · begonnen am 18. Mai 2015 · letzter Beitrag vom 21. Mai 2015
Antwort Antwort
Seite 1 von 3  1 23      
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#1

Daten aus Array zeichnen

  Alt 18. Mai 2015, 12:54
Hallo, ich habe es endlich hinbekommen, Werte, welche in einer Datei gespeichert sind, in ein Array einzulesen. Juhuuuuu

Nun will ich diese über Canvas als Kurve zeichnen lassen, was mir absolut nicht gelingen möchte.

Die Daten aus meinem Array sind dabei jeweils meine Y-Koordinaten.

Erstamal wäre ich total zufrieden, wenn mir mal ne Kurve angezeigt wird, damit ich dann selber weiter gucken kann, über Anregungen, Kopfschütteln und Auslacher wäre ich sehr dankbar !

Delphi-Quellcode:
procedure THixHistoGraph.DrawMeasureValue(const ReadInArray : Array of Real);
var
  HistoBackround : TRect;
  i : integer;
  Range : Double;
begin
  HistoBackround := Rect(FGapLeft,
                          FGapTop,
                          Width - FGapRight,
                          Height - FGapBottom + 2);
  {Darstellungsfläche eingrenzen}
  InflateRect(HistoBackround, -1, -1);


  Range := round(Width - FGapRight);

  For I:= 1 to round(length(ReadInArray)- 1) do
  begin
    Canvas.MoveTo(FGapLeft, 500);
    Canvas.Pen.Style := FSeriesLineStyle;
    Canvas.Brush.Color := FColor;
    Canvas.Pen.Color := FSeriesColor;
    Canvas.LineTo(FGapLeft * round(Range / length(ReadInArray)), round(ReadInArray[i]));
    //ShowMessage(FloatToStr(ReadInArray[i]));
  end;
end;
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:28
Diese Zeile kommt mir merkwürdig vor.

    Canvas.LineTo(FGapLeft * round(Range / length(ReadInArray)), round(ReadInArray[i])); Ich gehe mal davon aus, dass du die Werte gleichmäßig auf der X-Achse verteilen möchtest.
Wäre es da nicht besser so
    Canvas.LineTo(FGapLeft + round(Range / length(ReadInArray)*i), round(ReadInArray[i])); Hab das jetzt nicht getestet, aber irgendwie liegst doch sonst immer auf der gleichen Position der X-Achse.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#3

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:33
Jap, da hast Du Recht, habs mal getestet...
Source läuft durch, Canvas zeichnet aber nichts, merkwürdiger Weise....
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:38
Worauf zeichnest du? Du solltest deinen Canvas im OnPaint des gewünschten Controls zeichnen, sonst wird das nix.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#5

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:39
Hier mal die Unit, mit der der Array eingelesen wird

Delphi-Quellcode:
unit HixHistographFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, HixHistograph;

type
 THixHistographForm = class(TForm)
    HixHistoGraph1: THixHistoGraph;
 procedure FormShow(Sender: TObject);

  private
    { Private-Deklarationen }
    FileName : String;
    ASCIn : Textfile;
    procedure ReadData(var AscIn: TextFile; FileName: String);
  public
    { Public-Deklarationen }
    ReadInArray: Array of Real;
  end;

var
  HixHistographForm: THixHistographForm;

implementation

{$R *.dfm}

procedure THixHistographForm.ReadData(var AscIn: TextFile; FileName: String);
var
  StrTemp : String;
  i, Code : integer;
  RealTemp : Real;

begin
  AssignFile(AscIn, FileName); // öffne File
  Reset(AscIn); // Zeige auf ersten Wert
  SetLength(ReadInArray, 0); // beginne am Anfang des Array
  i := 0;

  while not eof(Ascin) do // lese bis Dateiende
  begin
    ReadLn(AscIn,StrTemp);
    Val(StrTemp,RealTemp,Code);
    SetLength(ReadInArray, length(ReadInArray) + 1);
    ReadInArray[i] := RealTemp;
    i:=i+1;
  end;
  closefile(AscIn);
end;

procedure THixHistographForm.FormShow(Sender: TObject);
begin
   FileName := 'o:\Delphi6\Student\HixHistograph\Abild1.asc';
   ReadData(ASCIn,FileName);
   HixHistograph1.DrawMeasureValue(ReadInArray);
end;

end.
Das klappt soweit auch alles...
Christian
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#6

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:41
Worauf zeichnest du? Du solltest deinen Canvas im OnPaint des gewünschten Controls zeichnen, sonst wird das nix.
zeichne auf Form1, da liegt das auch alles drauf...
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#7

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:42
Worauf willst du denn jetzt Zeichnen?


Wenn du direkt auf der Form zeichnen willst, dann solltest du in
Delphi-Quellcode:
procedure TForm1.OnPaint(Sender: TObject);
begin
   HixHistograph1.DrawMeasureValue(ReadInArray);
end;
zeichnen.

Besser finde ich allerdings, wenn man sich dafür ein Panel oder eine Paintbox hinlegt, auf die man zeichnet.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#8

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:47
Der Canvas speichert nichts. Heißt, immer wenn das Control angezeigt wird, wird das Ereignis OnPaint aufgerufen, damit du dann alles zeichnen kannst, was notwendig ist. Wird z.B. die Form durch ein anderes Fenster verdeckt, und dann verdeckte Bereiche durch Verschieben der verdeckenden Form wieder sichbar gemacht, wird erneut das OnPaint aufgerufen.

Probiers mal aus, dass du deine OnPaint-Routine nur einmal durchlaufen läßt, und danach (über irgendein Bool) halt nicht mehr. Dann schau mal was passiert, dann verstehst du das ganz fix.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#9

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:48
Worauf willst du denn jetzt Zeichnen?


Wenn du direkt auf der Form zeichnen willst, dann solltest du in
Delphi-Quellcode:
procedure TForm1.OnPaint(Sender: TObject);
begin
   HixHistograph1.DrawMeasureValue(ReadInArray);
end;
zeichnen.

Besser finde ich allerdings, wenn man sich dafür ein Panel oder eine Paintbox hinlegt, auf die man zeichnet.
Bissl falsch ausgedrückt..., meine Komponente liegt auf Form1, in die Komponente soll reingezeichnet werden. rufe die Zeichenroutine aber auf !

Delphi-Quellcode:
procedure THixHistograph.Paint;
begin
  inherited;
    DrawComponent; // zeichnet Hintergrund etc.
    DrawMeasureValue(ReadInArray); // soll den Graphen zeichnen
end;
Christian
  Mit Zitat antworten Zitat
Chris211183

Registriert seit: 19. Sep 2013
Ort: Braunschweig
204 Beiträge
 
Delphi 6 Professional
 
#10

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 13:51
Der Canvas speichert nichts. Heißt, immer wenn das Control angezeigt wird, wird das Ereignis OnPaint aufgerufen, damit du dann alles zeichnen kannst, was notwendig ist. Wird z.B. die Form durch ein anderes Fenster verdeckt, und dann verdeckte Bereiche durch Verschieben der verdeckenden Form wieder sichbar gemacht, wird erneut das OnPaint aufgerufen.

Probiers mal aus, dass du deine OnPaint-Routine nur einmal durchlaufen läßt, und danach (über irgendein Bool) halt nicht mehr. Dann schau mal was passiert, dann verstehst du das ganz fix.
Hab ich grad mal gemacht, zeichnet nichts....
Kommentiere ich mal alles aus und zeichne einfach nur eine Linie von a nach b, klappt das, kann das sein, dass er irgendwie die Arraylänge nicht hat ???
Christian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 04:49 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