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
Chris211183

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

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 17:52
Guck dir evtl. dieses Beispiel an:

http://www.delphipraxis.net/1201761-post13.html

Da habe ich auch aus einem Array gezeichnet.
Danke @Popov, ja so sieht das bei mir auch aus, mein Array ist ein globales Array of Real...

Kurz nochmal zusammengefasst:

Grundgerüst ist bereits als Komponente übersetzt (Hintergrund, Gaps, Colors etc.)
Ich habe eine Datei, in der lauter Werte stehen, diese sind die Y-Werte, diese lese ich in mein Array ein, über eine seperate Unit. ----BIS HIERHER FUNZ ALLES ! Werte werden auch in das Array eingelesen...
Die Unit ist auch in der uses Klausel und es kann darauf zugegriffen werden.

Wenn ich jetzt diese in meiner Zeichenroutine (welche in der procedure paint aufgefufen wird) benutze, zeichnet Canvas leider nichts..., ich steh komplett auf dem Schlauch, weshalb nicht....
Christian
  Mit Zitat antworten Zitat
Chris211183

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

AW: Daten aus Array zeichnen

  Alt 18. Mai 2015, 17:55
@Captnemo, hab grad erst Dein Bsp. gesehen, werd ich morgen mal machen nach der Uni ausprobieren ! Danke Dir
Christian

Geändert von Chris211183 (18. Mai 2015 um 17:58 Uhr)
  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 19. Mai 2015, 09:10
Habe jetzt alles einmal ausprobiert und die Werte werden richtig eingelesen und auch in der procedure DrawMeasureValue(ReadInArray) übergeben.

Dise procedur wird in DrawComponent aufgerufen, nach DrawGrid(zeichnet das Rastergitter)

zum Schluss wird dann DrawComponent in der paint Procedure aufgerufen....

Sollte doch meines Erachtens alles so richtig sein ?

Delphi-Quellcode:
{Ausschnitt aus der HauptUnit der Komponente}

protected
   procedure Paint; override;
   { Protected-Deklarationen }

public
    MeineWerte : TMeineWerte; // globales Array zum einlesen externer Werte
    ReadInArray :Array of Real;
    procedure DrawMeasureValue(const ReadInArray : Array of Real);
    procedure SetBounds (Left, Top, Width, Height: Integer); override;
    procedure Resize; override; // damit lassen sich die geerbten Abmessungen neu setzen
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }


procedure THixHistoGraph.DrawComponent;
var
   {zeichnet Komponente}
   ComponentBackround : TRect;

   {zeichnet die Darstellungsfläche der Komponente}
   HistoBackround : TRect;

begin

 if FBorderstyle = bsSingle then
   begin
   inherited;
   if (Parent = NIL) or not visible
   then Exit;
   begin
     ComponentBackround := Rect(0, 0, Width, Height);
     Canvas.Brush.Color := FColor;
     Canvas.Pen.Color := FColor;
     Canvas.Pen.Style := psSolid;
     Canvas.FillRect(ComponentBackround);
     {3D Rahmen mit der Breite von 1 für Komponentenhintergrund}
     Frame3D(Canvas, ComponentBackround, clBtnHighlight, clBtnShadow, 1);
   end;

      begin
        HistoBackround := Rect(FGapLeft,
                                FGapTop,
                                Width - FGapRight,
                                Height - FGapBottom + 2);

        Canvas.Brush.Color := FHistoBkColor;
        Canvas.Pen.Color := FHistoBkColor;
        Canvas.FillRect(HistoBackround);
        Frame3D(Canvas, HistoBackround, clBtnShadow, clBtnHighlight, 1);
        DrawGrid;
        DrawMeasureValue(ReadInArray);
      end;
   end;
end;

{zeichnet Graphenverlauf}
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)) do
  begin
    Canvas.MoveTo(FGapLeft, round(ReadInArray[i]));
    Canvas.LineTo(FGapLeft + round(Range / length(ReadInArray) * i), round(ReadInArray[i]));
    Canvas.Pen.Style := FSeriesLineStyle;
    Canvas.Brush.Color := FColor;
    Canvas.Pen.Color := FSeriesColor;
    //ShowMessage(FloatToStr(ReadInArray[i]));
    //ShowMessage(FloatToStr(length(ReadInArray)));
  end;
end;


procedure THixHistoGraph.Paint;
begin
  inherited;
  DrawComponent;
  //DrawMeasureValue(ReadInArray); // wird in DrawComponent aufgerufen
end;

Delphi-Quellcode:
unit HixHistographFormUnit;

interface

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

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.
Christian
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Daten aus Array zeichnen

  Alt 19. Mai 2015, 09:28
Unabhängig ob der Code nun richtig oder falsch ist, aber ich komme immer durcheinander wenn die Feldvariablen nicht mit einem F beginnen. Verwirrt nur etwas, ist aber kein Fehler.
  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 19. Mai 2015, 09:36
Unabhängig ob der Code nun richtig oder falsch ist, aber ich komme immer durcheinander wenn die Feldvariablen nicht mit einem F beginnen. Verwirrt nur etwas, ist aber kein Fehler.
Man möchte ja aber auch nicht alles im OI stehen haben, in den Routinen werden ja die Feldvariablen benutzt, die später, über den OI verstellt werden können...

Bringt mich aber jetzt nicht wirklich weiter Popov
Christian
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Daten aus Array zeichnen

  Alt 19. Mai 2015, 10:05
Bringt mich aber jetzt nicht wirklich weiter Popov
Nein, hast du Recht, aber wenn ich so was sehe:
Delphi-Quellcode:
public
    ...
    ReadInArray :Array of Real;
    procedure DrawMeasureValue(const ReadInArray : Array of Real);
dann verbringe ich die halbe Zeit damit den Code zu analysieren. Sicher, bei Delphi haben lokale Variablen eine höhere Priorität als gleichnamige nichtlokale, es ist aber eine potentielle Fehlerquelle. Mal ist ReadInArray eine Feldvariable, mal Parameter.

Wenn ich also sage, dass mich Feldvariablen ohne ein F davor etwas durcheinander bringen, dann auch deshalb, weil ich dann beim lesen des Codes nicht sofort erkenne um was es sich handelt. Man kann es ermitteln, aber bist du sicher auch immer das richtige ReadInArray gemeint zu haben?

Tipp: F bei Feldvariablen, A bei Prozeduren. Schon kommt man nicht durcheinander.
  Mit Zitat antworten Zitat
Chris211183

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

AW: Daten aus Array zeichnen

  Alt 19. Mai 2015, 10:10
Bringt mich aber jetzt nicht wirklich weiter Popov
Nein, hast du Recht, aber wenn ich so was sehe:
Delphi-Quellcode:
public
    ...
    ReadInArray :Array of Real;
    procedure DrawMeasureValue(const ReadInArray : Array of Real);
dann verbringe ich die halbe Zeit damit den Code zu analysieren. Sicher, bei Delphi haben lokale Variablen eine höhere Priorität als gleichnamige nichtlokale, es ist aber eine potentielle Fehlerquelle. Mal ist ReadInArray eine Feldvariable, mal Parameter.

Wenn ich also sage, dass mich Feldvariablen ohne ein F davor etwas durcheinander bringen, dann auch deshalb, weil ich dann beim lesen des Codes nicht sofort erkenne um was es sich handelt. Man kann es ermitteln, aber bist du sicher auch immer das richtige ReadInArray gemeint zu haben?

Tipp: F bei Feldvariablen, A bei Prozeduren. Schon kommt man nicht durcheinander.
Ja da hast du auch recht...
Für Dich, ReadInArray bekommt seine Werte aus einer Datei, die werden in das Array eingelesen und dann in der Paint benutzt, das Einlesen der Werte erfolgt im der FormUnit ! (es sind 600 Werte)
Beim auslesen der Werte stehen die auch so drin, alles bereits getestet ,

find halt absolut nicht das Problem, warum er das nicht malen will...
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:44 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