![]() |
AW: Probleme mit Sinus Darstellung
Nützt mir leider nix, da noch Units fehlen. Brauchst Du diese "Q"-Units wirklich, IIRC waren die damals für Kylix gedacht, welches längst in Frieden ruht.
Zitat:
|
AW: Probleme mit Sinus Darstellung
Zitat:
Delphi-Quellcode:
Der Erste Parameter ist vom Typ "TFxFunction"
function CalculatePointView
(AFunc: TFxFunction; const ARect: TRect; x0, y0, dx, dy: Extended): TPointDynArray;
Delphi-Quellcode:
Dieser ist als Funktion mit einem parameter x (extended) definiert.
TFxFunction = function(const x: Extended): Extended;
Folglich wird hier auch ein extended Wert erwartet:
Delphi-Quellcode:
Grüße
P := CalculatePointView(sin(x), R, x0, y0, dx, dy);
Headbucket |
AW: Probleme mit Sinus Darstellung
sin(x) wäre ja das Funktionsergebnis, es soll aber die Funktion selbst sein.
|
AW: Probleme mit Sinus Darstellung
Kann es sein, dass in den Units HixBarGraphUnit, HixLedUnit oder Scales irgendetwas namens sin deklariert ist? Wenn ich diese Units herausnehme (weil ich sie ja eh nicht habe) kompiliert es bei mir einwandfrei.
oder probier mal
Delphi-Quellcode:
P := CalculatePointView(@System.sin, R, x0, y0, dx, dy);
|
AW: Probleme mit Sinus Darstellung
:wall:
Stimmt natürlich... . Dann wird es wohl daran liegen, dass die Unit "System" in der Uses-Klausel fehlt. Dort ist nämlich die Funktion "sin" definiert. Grüße Headbucket |
AW: Probleme mit Sinus Darstellung
System wird automatisch eingebunden.
|
AW: Probleme mit Sinus Darstellung
Zitat:
Delphi-Quellcode:
Unit ist immer eingebunden, das braucht man nicht zusätzlich noch mit rein nehmen. Allerdings muss man dem Compiler schon sagen, welche man haben möchte, wenn es mehrere gibt (wie in diesem Fall).
System
|
AW: Probleme mit Sinus Darstellung
Vielen Dank für die Infos. Auch, wenn man es sich hätte denken können, so wusste ich das nicht.
Bleibt eventuell noch die Frage nach welchen Kriterien sich der Compiler dann seine "sin"-Funktion sucht, wenn man es nicht speziell angibt - aber das ist dann wohl ein anderes Thema. Ich halt für heute wohl lieber erstmal meine Klappe :-). |
AW: Probleme mit Sinus Darstellung
Nach meiner Kenntnis nimmt der Compiler immer die, die in der Reihenfolge der uses-Klausel zuletzt gefunden wird.
|
AW: Probleme mit Sinus Darstellung
Delphi-Quellcode:
Die habe ich drin, ist sin nicht in Math deklariert ?
uses
Windows, SysUtils, Classes, Controls, Graphics, StdCtrls, Variants, Forms, Dialogs, Math, ExtCtrls, Types, Scales |
AW: Probleme mit Sinus Darstellung
Schau doch in die Hilfe, da steht die Unit. Zumindest in neueren Delphi-Versionen ist es System.
|
AW: Probleme mit Sinus Darstellung
habe ich, wenn ich System mit einbinde in die uses-Klausel, kommt Bezeichner redefiniert....
in der Hilfe steht Sin(Funktion) Unit System.... Ich brenn hier glei die Bude an :wall: |
AW: Probleme mit Sinus Darstellung
Nochmal: System wird automatisch eingebunden und hat daher nichts in der uses-Klausel zu suchen. Qualifizieren kann man sie aber trotzdem.
|
AW: Probleme mit Sinus Darstellung
Sorry, mir steht einer auf der Leitung, was meinst du mit Qualifizieren :pale:
|
AW: Probleme mit Sinus Darstellung
Statt sin System.sin.
|
AW: Probleme mit Sinus Darstellung
achso, ja habe ich doch schon !!!
|
AW: Probleme mit Sinus Darstellung
Delphi-Quellcode:
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; Trotzdem immer der selbe Scheiß, macht er nicht |
AW: Probleme mit Sinus Darstellung
Ich hab zwar kein Delphi 6, kann das aber nach Feierabend mal mit Delphi 5 oder Delphi 7 ausprobieren. Ich glaube allerdings nicht unbedingt, dass es an der Version liegt, unter XE funktioniert es aber.
|
AW: Probleme mit Sinus Darstellung
ja das wäre nett, ich geh hier gleich krachen...
Ich geh jetzt erstmal zum Sport, bevor ich meine Tastatur durch den Bildschirm schiebe |
AW: Probleme mit Sinus Darstellung
Kannst du vielleicht mal ein Minimal-Beispiel machen, d.H. aus der Unit alles rauswerfen, was nicht zur Reproduktion des Problems benötigt wird, und das hier posten. Oft findet man bei solchen Aktionen auch den Fehler.
|
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 |
AW: Probleme mit Sinus Darstellung
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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