![]() |
AW: Probleme mit Sinus Darstellung
In Delphi 6 braucht sin Compiler-Magic und wäre auch sonst inkomptatibel, die Hilfe nennt die Deklaration
Delphi-Quellcode:
Die einfachste Möglichkeit, die Sache versionsunabhängig zum Laufen zu bringen, ist eine Wrapper-Funktion
function Sin(X: Extended): Extended;
Delphi-Quellcode:
mit dem Aufruf
function mysin(const x: Extended): Extended;
begin mysin := sin(x); end;
Delphi-Quellcode:
CalculatePointView(mysin, R, x0, y0, dx, dy);
|
AW: Probleme mit Sinus Darstellung
Ja gerne...
Delphi-Quellcode:
unit HixHistograph;
interface uses Windows, SysUtils, Classes, Controls, Graphics, StdCtrls, Variants, Forms, Dialogs, Math, ExtCtrls, Types, Scales; type TFxFunction = function(const x: Extended): Extended; TPointDynArray = array of TPoint; THixHistoGraph = class(TCustomPanel) procedure DrawFunction; procedure SetColorZeroLine(const Value: TColor); procedure DrawPointView(ACanvas: TCanvas; const ARect: TRect; const APoints : TPointDynArray); function CalculatePointView(AFunc: TFxFunction; const ARect: TRect; x0, y0, dx, dy: Extended): TPointDynArray; procedure THixHistoGraph.Paint; begin inherited; FBmp.Width := Width; FBmp.Height := Height; with FBmp.Canvas do begin DrawComponent; // zeichnet Komponente mit Hintergrund DrawGrid; // zeichnet Hintergrundraster //DrawZeroLine; // Nullliniendurchgang DrawFunction; end; end; function THixHistoGraph.CalculatePointView (AFunc: TFxFunction; const ARect: TRect; x0, y0, dx, dy: Extended): TPointDynArray; var x, y: Extended; i : integer; begin // für jede Spalte einen Punkt SetLength(Result, ARect.Right - ARect.Left +1); // Punkte berechnen x := x0; 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 := ARect.Left +1; Result[i].Y := ARect.Top + Round(y); // runden x := x + dx; end; // nächster Punkt end; procedure THixHistoGraph.DrawPointView (ACanvas: TCanvas; const ARect: TRect; const APoints : TPointDynArray); var h : Thandle; begin h:= SaveDC(ACanvas.Handle); try IntersectClipRect(ACanvas.Handle, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom); Polyline(ACanvas.Handle, APoints[0], Length(APoints)); finally RestoreDC(ACanvas.Handle, h); end; end; procedure THixHistoGraph.DrawFunction; var R :TRect; x0, y0, dx, dy :Extended; P: TPointDynArray; begin R := Rect (FGapLeft, FGapTop, Width - FGapRight + 2, Height - FGapBottom); Canvas.Brush.Color := FHistoBkColor; Canvas.Pen.Color := FHistoBkColor; Canvas.Pen.Style := psSolid; Canvas.FillRect(R); InflateRect(R, -1, -1); x0 := FXScale.ValMin; y0 := FYScale.ValMax; dx := 0.05; dy := 0.05; P := CalculatePointView(@System.sin, R, x0, y0, dx, dy); Canvas.Pen.Color := cllime; DrawPointView(Canvas, R, P); end; end. |
AW: Probleme mit Sinus Darstellung
jetzttttttttt...................... es klappt mit der Wrapper Funktion !!!
Das war ne Geburt Jungs !!! Besten dank an alle !!! Woher soll man denn sowas auch wisssen ???? |
AW: Probleme mit Sinus Darstellung
Aus der Online-Hilfe ;)
|
AW: Probleme mit Sinus Darstellung
Die ich nicht habe :roll:, mein Programmierrechner ist nicht im Netz !
|
AW: Probleme mit Sinus Darstellung
Ich meinte die, die bei F1 aufgeht.
|
AW: Probleme mit Sinus Darstellung
benutz ich oft, das muss mir durch die Lappen gegangen sein :oops:
gehe mir jetzt die Hände bügeln ! |
AW: Probleme mit Sinus Darstellung
Wegen der Wellen könnte man sich noch überlegen der Komponente einen Timer zu spendieren? Und du möchtest doch sicherlich irgendwann mal was anderes grafisch darstellen als Sin(X). Dazu braucht die Komponente einen Parser. Falls du über keinen Matheparser verfügst, für's erste reicht auch der Parser10 von der Emba Homepage oder auch (in einer älteren Version) frei im Netz. Dann kann der User die f(x) z.B. in einem Edit angeben.
|
AW: Probleme mit Sinus Darstellung
Zitat:
Für so einen Parser habe ich ![]() |
AW: Probleme mit Sinus Darstellung
Ich weiß nicht, vielleicht ist es auch bei Deinem Projekt von Vorteil, wenn Du erst überlegst was am Ende herauskommen soll, und dann mit der Umsetzung anfängst (?). Ich kann mir das Arbeiten nicht mehr anders vorstellen. Früher hab ich natürlich auch direkt mit Einhacken angefangen ;-).
lg Caps |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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