Delphi-PRAXiS
Seite 7 von 8   « Erste     567 8      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Probleme mit Sinus Darstellung (https://www.delphipraxis.net/184076-probleme-mit-sinus-darstellung.html)

gammatester 3. Mär 2015 11:35

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:
function Sin(X: Extended): Extended;
Die einfachste Möglichkeit, die Sache versionsunabhängig zum Laufen zu bringen, ist eine Wrapper-Funktion
Delphi-Quellcode:
function mysin(const x: Extended): Extended;
begin
  mysin := sin(x);
end;
mit dem Aufruf
Delphi-Quellcode:
CalculatePointView(mysin, R, x0, y0, dx, dy);

Chris211183 3. Mär 2015 12:23

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.

Chris211183 3. Mär 2015 12:34

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 ????

DeddyH 3. Mär 2015 12:35

AW: Probleme mit Sinus Darstellung
 
Aus der Online-Hilfe ;)

Chris211183 3. Mär 2015 12:55

AW: Probleme mit Sinus Darstellung
 
Die ich nicht habe :roll:, mein Programmierrechner ist nicht im Netz !

DeddyH 3. Mär 2015 12:57

AW: Probleme mit Sinus Darstellung
 
Ich meinte die, die bei F1 aufgeht.

Chris211183 3. Mär 2015 12:59

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 !

Bjoerk 3. Mär 2015 13:31

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.

Chris211183 4. Mär 2015 10:21

AW: Probleme mit Sinus Darstellung
 
Zitat:

Zitat von Bjoerk (Beitrag 1292219)
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.

Super Idee Bjoerk, das klingt logisch und das werde ich gleich mal ausprobieren !

Für so einen Parser habe ich http://kilchb.de/parser.html den hier gefunden !

Caps 4. Mär 2015 12:35

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 03:07 Uhr.
Seite 7 von 8   « Erste     567 8      

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