![]() |
Daten aus Array zeichnen
Hallo, ich habe es endlich hinbekommen, Werte, welche in einer Datei gespeichert sind, in ein Array einzulesen. Juhuuuuu :-D
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; |
AW: Daten aus Array zeichnen
Diese Zeile kommt mir merkwürdig vor.
Delphi-Quellcode:
Ich gehe mal davon aus, dass du die Werte gleichmäßig auf der X-Achse verteilen möchtest.
Canvas.LineTo(FGapLeft * round(Range / length(ReadInArray)), round(ReadInArray[i]));
Wäre es da nicht besser so
Delphi-Quellcode:
Hab das jetzt nicht getestet, aber irgendwie liegst doch sonst immer auf der gleichen Position der X-Achse.
Canvas.LineTo(FGapLeft + round(Range / length(ReadInArray)*i), round(ReadInArray[i]));
|
AW: Daten aus Array zeichnen
Jap, da hast Du Recht, habs mal getestet...
Source läuft durch, Canvas zeichnet aber nichts, merkwürdiger Weise.... |
AW: Daten aus Array zeichnen
Worauf zeichnest du? Du solltest deinen Canvas im OnPaint des gewünschten Controls zeichnen, sonst wird das nix.
|
AW: Daten aus Array zeichnen
Hier mal die Unit, mit der der Array eingelesen wird
Delphi-Quellcode:
Das klappt soweit auch alles...
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. |
AW: Daten aus Array zeichnen
Zitat:
|
AW: Daten aus Array zeichnen
Worauf willst du denn jetzt Zeichnen?
Wenn du direkt auf der Form zeichnen willst, dann solltest du in
Delphi-Quellcode:
zeichnen.
procedure TForm1.OnPaint(Sender: TObject);
begin HixHistograph1.DrawMeasureValue(ReadInArray); end; Besser finde ich allerdings, wenn man sich dafür ein Panel oder eine Paintbox hinlegt, auf die man zeichnet. |
AW: Daten aus Array zeichnen
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. |
AW: Daten aus Array zeichnen
Zitat:
Delphi-Quellcode:
procedure THixHistograph.Paint;
begin inherited; DrawComponent; // zeichnet Hintergrund etc. DrawMeasureValue(ReadInArray); // soll den Graphen zeichnen end; |
AW: Daten aus Array zeichnen
Zitat:
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 ??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz