Einzelnen Beitrag anzeigen

Chris211183

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

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