AGB  ·  Datenschutz  ·  Impressum  







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

Array Probleme

Ein Thema von Chris211183 · begonnen am 8. Apr 2015 · letzter Beitrag vom 10. Apr 2015
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Chris211183

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

Array Probleme

  Alt 8. Apr 2015, 11:09
Hallo Ihr Lieben,

ich habe ein Frage bezüglich Array deklarationen und deren Umsetzung.
Wie Ihr ja wisst, programmiere ich an meiner Oszillator-Komponente rum.
Nun komme ich nicht weiter, ich möchte Werte in ein Array einlesen und diese dann zeichnen lassen.

Das passiert auch und sieht ganz gut aus....

Wie kann ich diese Routine so verallgemeinern, dass wenn externe Werte kommen, diese halt dargestellt werden, benötige ich da noch einen extra Array (Array of ?) oder kann ich das so mit implementieren.....

Hier ein Ausschnitt meines Prog.

Delphi-Quellcode:
type




   TFxFunction = function(const x: Extended): Extended;
   TPointDynArray = array of TPoint;


   THixHistoGraphGridVisible = (grdNone, // kein Rastergitter
                                grdHor, // horizontales Rastergitter
                                grdVer, // vertikales Rastergitter
                                grdBoth); // horizontales und vertikales Rastergitter


   THixHistoGraph = class(TCustomPanel)


procedure DrawPointView(ACanvas: TCanvas; const HistoBackround: TRect; const APoints : TPointDynArray);
   procedure DrawMeasureValue;
   function CalculatePointView(AFunc: TFxFunction; const HistoBackround: TRect; x0, y0, dx, dy: Extended): TPointDynArray;




function mysin(const X: Extended):Extended; // Wrapper-Funktion, benötigt für Delphi 6 um Sinus-Funktion implementieren zu können
begin
   Result := sin(x);
end;



function THixHistoGraph.CalculatePointView // Berechnung der Punkte für die Funktionsdarstellung
(AFunc: TFxFunction; const HistoBackround: TRect; x0, y0, dx, dy: Extended): TPointDynArray;
var
  x, y: Extended;
  i : integer;
begin // für jede Spalte einen Punkt
   SetLength(Result, HistoBackround.Right - HistoBackround.Left + 1); // Punkte berechnen
   x := 0;
   for i := Low(Result) to High(Result) do
   begin
   y := AFunc(x);
   y := -y; // Canvas Nullpunkt obere linke Ecke mit Y- Achse nach unten !!!
   y := y0 + y; // oberen Rand Addieren
   y := y / dy; // Skalieren
   Result[i].x := HistoBackround.Left + i;
   Result[i].Y := HistoBackround.Top + Round(y); // runden
   x := x + dx;
   end; // nächster Punkt

end;


////////////////////////////////////////////////////////////////////////////////
// //
// Zeichnen //
// //
////////////////////////////////////////////////////////////////////////////////

procedure THixHistoGraph.DrawComponent;
var
   ComponentBackround : TRect; // zeichnet Komponente
   HistoBackround : TRect; // zeichnet die Darstellungsfläche der Komponente
begin

 if FBorderstyle = bsSingle then // mit 3D-Rahmen

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

      begin
      HistoBackround := Rect(FGapLeft, // Hintergrund der Darstellungsfläche
                              FGapTop,
                              Width - FGapRight,
                              Height - FGapBottom + 2);

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

procedure THixHistoGraph.DrawMeasureValue;
var
  x0, y0, dy, dx : Real;
  i : Integer;
  P : TPointDynArray;
  HistoBackround : TRect;

begin
   HistoBackround := Rect(FGapLeft, // Hintergrund der Darstellungsfläche
                           FGapTop,
                           Width - FGapRight,
                           Height - FGapBottom + 2);

   P:= Nil;
   InflateRect(HistoBackround, -1, -1);
   for i:= round(FViewXNominalMin) to round(FViewXNominalMax - 1) do
   begin
      x0 := FViewxNominalMin;
      y0 := (Height - FGapBottom - FGapTop) / FYScale.ValMax;
      dx := 0.5;
      dy := 0.02;
      P := CalculatePointView(mySin, HistoBackround, x0, y0, dx, dy);
      Canvas.Pen.Style := FSeriesLineStyle;
      Canvas.Brush.Color := FColor;
      Canvas.Pen.Color := FSeriesColor;
      DrawPointView(Canvas, HistoBackround, P);
   end;
end;



procedure THixHistoGraph.DrawPointView
(ACanvas: TCanvas; const HistoBackround: TRect; const APoints : TPointDynArray);
var
   h : Thandle;
   begin
   h:= SaveDC(ACanvas.Handle);
   try
   IntersectClipRect(ACanvas.Handle, HistoBackround.Left, HistoBackround.Top, HistoBackround.Right, HistoBackround.Bottom); // Zeichenfläche einschränken
   Polyline(ACanvas.Handle, APoints[0], Length(APoints));
   finally
      RestoreDC(ACanvas.Handle, h);
   end;
end;
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik
Online

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Array Probleme

  Alt 8. Apr 2015, 12:14
Nun komme ich nicht weiter, ich möchte Werte in ein Array einlesen und diese dann zeichnen lassen.

Das passiert auch und sieht ganz gut aus....

Wie kann ich diese Routine so verallgemeinern, dass wenn externe Werte kommen, diese halt dargestellt werden, benötige ich da noch einen extra Array (Array of ?) oder kann ich das so mit implementieren.....
Hi!

Bitte am besten vor einem Code-Posting mal den Source formatieren lassen...

Zu Deiner Frage...

Wo kommen die Werte her und kommen die als Block oder immer einer nach dem anderen?

Kommen die aus einem Thread?

Mavarik
  Mit Zitat antworten Zitat
Chris211183

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

AW: Array Probleme

  Alt 8. Apr 2015, 12:15
ist es machbar, dass ich in der DrawMeasurreValue -Routine eine variabel z.B.

Data: Array[1..1024] of Real; deklariere und den mit Werten fülle und diese dann darstellen lasse ?

Wie kann dieser denn mit externen Werten gefüllt werden ?

Sorry, bin komplett neu in der Welt der Array´s

Habt Gnade
Christian
  Mit Zitat antworten Zitat
Chris211183

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

AW: Array Probleme

  Alt 8. Apr 2015, 12:18
die kommen von einer Ultraschallkarte und das Signal soll dann angezeigt werden, zur Zeit ist das aber erstmal nebenläufig, im Prinzip geht es erstmal darum, dass ich die Möglichkeit habe, externe Werte einlesen zu können...in ein Array und diese dann gezeichnet werden
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik
Online

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Array Probleme

  Alt 8. Apr 2015, 12:20
ist es machbar, dass ich in der DrawMeasurreValue -Routine eine variabel z.B.

Data: Array[1..1024] of Real; deklariere und den mit Werten fülle und diese dann darstellen lasse ?

Wie kann dieser denn mit externen Werten gefüllt werden ?

Sorry, bin komplett neu in der Welt der Array´s

Habt Gnade
Auch wenn Du meine Frage überhaupt nicht beantwortet hast...

Wo Du das Array definierst ist doch egal... Von mir aus Global... Darum geht es doch nicht...

Aber ich gehe mal davon aus, dass Die Werte doch ggf. sehr schnell rein kommen und dann doch - am besten - in Echtzeit dargestellt werden sollen...

Klingt mir nach einem Ringpuffer mit Schreibe- Lesezeiger.

Mavarik
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Array Probleme

  Alt 8. Apr 2015, 12:23
In eine lokale Variable der Methode kannst Du gar nicht schreiben. Du müsstest die Werte woanderst abspeichern, z.B. direkt in der Klasse.
Markus Kinzler
  Mit Zitat antworten Zitat
Chris211183

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

AW: Array Probleme

  Alt 8. Apr 2015, 12:26
Sorry, ja die kommen sehr schnell, einer nach dem anderen.....
und die Echtzeitdarstellung ist auf jeden Fall von Nöten....

Wie kann ich das realisieren ?

Das übersteigt meine programmierkünste bei weitem, befürchte ich
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik
Online

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Array Probleme

  Alt 8. Apr 2015, 12:28
Sorry, ja die kommen sehr schnell, einer nach dem anderen.....
und die Echtzeitdarstellung ist auf jeden Fall von Nöten....

Wie kann ich das realisieren ?

Das übersteigt meine programmierkünste bei weitem, befürchte ich
Du hast doch die X-Zeitachse und die Y-Werteachse...

Wie synchronisierst Du die beiden Werte?
  Mit Zitat antworten Zitat
Chris211183

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

AW: Array Probleme

  Alt 8. Apr 2015, 12:29
In eine lokale Variable der Methode kannst Du gar nicht schreiben. Du müsstest die Werte woanderst abspeichern, z.B. direkt in der Klasse.
ja das stimmt, also lagere ih das im Private bereich und somit Global..., verstehe ich das richtig ?
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik
Online

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Array Probleme

  Alt 8. Apr 2015, 12:31
In eine lokale Variable der Methode kannst Du gar nicht schreiben. Du müsstest die Werte woanderst abspeichern, z.B. direkt in der Klasse.
ja das stimmt, also lagere ih das im Private bereich und somit Global..., verstehe ich das richtig ?
Der private Bereich ist Private und gerade nicht global!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 15:22 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