![]() |
Chart mit sauberen Linien
Da TChart auf einem Frame Probleme bereitete, habe ich selbst eine entsprechende Komponente entwickelt, die im Prinzip nur Einnahmen und Ausgaben grafisch darstellen soll und dies auch fehlerfrei tut. Den unsauberen "Treppeneffekt" der gezeichneten Linien konnte ich erfolgreich mit einem Codebeispiel von Karstadt
![]() Vielen Dank roga |
AW: Chart mit sauberen Linien
Ich würde Dir GDI+ ans Herz legen..
![]() |
AW: Chart mit sauberen Linien
Das hilft mir im Moment nicht weiter - trotzdem Danke für Deine Antwort.
roga |
AW: Chart mit sauberen Linien
![]() Hier habe ich was gefunden. Und hier in der BresenhamLibrary - Radius könnte PenWidth sein: ![]() Diese Art eine Linie zu malen kommt von Herrn Bresenham. Hier die Anleitung dazu: :cheer: ![]() Oder guck mal Google durch. Übrigens... Karstadt gibt es nicht mehr |
AW: Chart mit sauberen Linien
Zitat:
|
AW: Chart mit sauberen Linien
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Bummi,
habe mich bisher noch nicht mit GDI+ beschäftigt und momentan fehlt mir auch echt die Zeit dazu. Aber Dein Vorschlag hört sich recht simpel an. Eigentlich hatte ich an eine kleine Anpassung der genannten Routine gedacht, denn prinzipiell brauche ich nur eine einfache grafische Darstellung. Habe mal einen Screen meiner eingesetzten Komponente als Bild angefügt. Diese befindet sich allerdings noch im Entwicklungsstatus. Für die Anzeige auf dem Monitor eigentlich ausreichend, aber für Ausdrucke etc. müssen die Linien stärker sein. Gruß roga |
AW: Chart mit sauberen Linien
Wenn es nur um Ausdrucke geht, kannst du die Kantenglättung eigentlich gleich weglassen, weil die Auflösung des Druckers so viel höher ist, dass die Treppen nicht mehr auffallen sollten.
Ansonsten kann ich noch wärmstens die ![]() ![]() |
AW: Chart mit sauberen Linien
der Graphics32-Empfehlung kann ich mich nur anschließen. Und diese Komponente ergänzen : GR32_Lines von Angus
![]() |
AW: Chart mit sauberen Linien
Du kannst GDILineTo ja umbennen wie Deine bisherige Prozedur heißt SLineTo....
Die Dateien GDIPAPI,GDIPOBJ in Deinen Projektordner oder in den Pfad kopieren Die Optimierung hier bestand darin, keinen bei Dir bestehenden Code anpassen zu müssen....
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,GDIPAPI,GDIPOBJ, StdCtrls, ExtCtrls; type TForm2 = class(TForm) Image1: TImage; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} Function ColorToTGPColor (c : Tcolor; trans : Byte = 255):TGPColor; Type TBarry=Array[0..3] of Byte; Var Barry:TBarry; R:Byte; begin move(C,Barry,4); R:=Barry[2]; Barry[2]:=Barry[0]; Barry[0]:=R; Barry[3]:=trans; move(Barry,Result,4); end; Procedure GDILineTo( C:TCanvas; x,y:Integer); var G:TGPGraphics; P:TGPPen; begin G:=TGPGraphics.Create(C.Handle); G.SetSmoothingMode(SmoothingModeHighQuality); P:=TGPPen.Create(ColorToTGPColor(C.Pen.Color),C.Pen.Width); G.DrawLine(p,C.PenPos.X,C.PenPos.Y,x,y); P.Free; G.Free; C.MoveTo(X,Y); end; procedure TForm2.Button1Click(Sender: TObject); begin Image1.Canvas.MoveTo(10,10); Image1.Canvas.Pen.Color := clBlue; Image1.Canvas.Pen.Width := 3; GDILineTo(Image1.Canvas, 100,100); Image1.Canvas.Pen.Color := clRed; GDILineTo(Image1.Canvas, 400,10); end; end. |
AW: Chart mit sauberen Linien
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
DirectDraw.pas DirectX.inc GDIPAPI.pas GDIPOBJ.pas GDIPUTIL.pas Jedi.inc Bei der Compilierung traten Fehler in der DirectDraw.pas beim Type PDirectDrawSurface mit folgender Meldung auf: "[DCC Fehler] DirectDraw.pas(358): E2154 Typ 'IDirectDrawSurface' benötigt Finalization - nicht im varianten Record erlaubt" Sicher keine saubere Lösung, aber ich habe diese Stellen vorübergehend deaktiviert und alles läuft super, die eingestellte Linienstärke wird jetzt berücksichtigt (Siehe angehängtes Bild) Bummi, vielen DANK für Deinen Lösungsansatz! Werde mich wohl demnächst intensiver mit GDI+ und dessen Möglichkeiten beschäftigen müssen. Eine Frage noch: Wie kompatibel ist GDI zu den verschiedenen Windows- und Delphi-Versionen? |
AW: Chart mit sauberen Linien
ab XP ist die benötigte gdiplus.dll an Bord, einsetzen tue ich es seit D7, müßte aber IMHO auch mit älteren Versionen laufen.
DirectDraw.pas meine ich unter D7 benötigt zu haben , die .inc Dateien müssen eigentlich über irgendwelche Fremdpakete da reinrutschen, ich benötige sie nicht. Allerdings ist mein Paket von ca. 2002 und die drei Units umbenannt wegen Kompatibilitätsproblemen mit Chartkomponenten welche anscheinend gleichnamige, aber anders implementierte Units verwenden. Wenn man davon ausgehen kann daß überwiegend Win7 aufwärts im Einsatz sein wird werde ich mir Direct2D etwas näher zu Gemüte führen. |
AW: Chart mit sauberen Linien
Um nochmal auf folgende Fehlermeldung zurück zu kommen:
"[DCC Fehler] DirectDraw.pas(358): E2154 Typ 'IDirectDrawSurface' benötigt Finalization - nicht im varianten Record erlaubt" Eine Änderung in der Datei "DirectDraw.pas" ab Zeile 328 scheint den Fehler zu beheben:
Delphi-Quellcode:
// Delphi 5 and up don't allow interfaces in variant records
// so we have to use pointers instead (which can be type-casted into interfaces): //{$IFDEF COMPILER5_UP} // PDirectDrawSurface = Pointer; //{$ELSE} // PDirectDrawSurface = IDirectDrawSurface; //{$ENDIF} PDirectDrawSurface = Pointer; |
AW: Chart mit sauberen Linien
Ich vermute, dass Deine Compilerversion nicht korrekt erkannt wurde und das IFDEF deshalb nicht greift. Meist wird dafür eine *.inc verwendet, ich würde diese einfach erweitern, das ist m.E.n. die sauberere Lösung.
|
AW: Chart mit sauberen Linien
Du hast Recht - hab mir die aktuelle jedi.inc geladen und alles wird korrekt erkannt. Danke!
|
AW: Chart mit sauberen Linien
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Vorschlag:
Es geht durchaus mit der freien TChart Version glatte Kanten zu zeichnen. Den Vorschlag dazu hab ich hier gefunden: ![]() Im Anhang ist ein Bild einer Anwendung, die wir bei uns im Haus verwenden. Der Graph ist ein geglättetes normales TChart. Eckpunkte der Vorgehensweise.
Beispiel-Code auf Anfrage Gruß Marco |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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