![]() |
Array Probleme
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; |
AW: Array Probleme
Zitat:
Bitte am besten vor einem Code-Posting mal den Source formatieren lassen... 8-) 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 |
AW: Array Probleme
ist es machbar, dass ich in der DrawMeasurreValue -Routine eine variabel z.B.
Delphi-Quellcode:
deklariere und den mit Werten fülle und diese dann darstellen lasse ?
Data: Array[1..1024] of Real;
Wie kann dieser denn mit externen Werten gefüllt werden ? Sorry, bin komplett neu in der Welt der Array´s Habt Gnade:duck: |
AW: Array Probleme
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
|
AW: Array Probleme
Zitat:
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 |
AW: Array Probleme
In eine lokale Variable der Methode kannst Du gar nicht schreiben. Du müsstest die Werte woanderst abspeichern, z.B. direkt in der Klasse.
|
AW: Array Probleme
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 ? :gruebel: Das übersteigt meine programmierkünste bei weitem, befürchte ich |
AW: Array Probleme
Zitat:
Wie synchronisierst Du die beiden Werte? |
AW: Array Probleme
Zitat:
|
AW: Array Probleme
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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