Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Chart mit sauberen Linien (https://www.delphipraxis.net/157349-chart-mit-sauberen-linien.html)

roga 8. Jan 2011 21:17

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 http://www.delphipraxis.net/475750-post3.html beseitigen. Leider wird hier die eingestellte Linienstärke (Pen.Width) nicht berücksichtigt. Vielleicht kann jemand den Code dahingehend anpassen oder entsprechende Hinweise geben.

Vielen Dank
roga

Bummi 8. Jan 2011 21:36

AW: Chart mit sauberen Linien
 
Ich würde Dir GDI+ ans Herz legen..http://www.progdigy.com/

roga 8. Jan 2011 23:31

AW: Chart mit sauberen Linien
 
Das hilft mir im Moment nicht weiter - trotzdem Danke für Deine Antwort.

roga

Jens01 9. Jan 2011 01:34

AW: Chart mit sauberen Linien
 
http://homepages.enterprise.net/murp...ine/index.html
Hier habe ich was gefunden.
Und hier in der BresenhamLibrary - Radius könnte PenWidth sein:
http://www.efg2.com/Lab/Library/Delp...ColorLines.ZIP

Diese Art eine Linie zu malen kommt von Herrn Bresenham. Hier die Anleitung dazu: :cheer:
http://de.wikipedia.org/wiki/Bresenham-Algorithmus
Oder guck mal Google durch.

Übrigens... Karstadt gibt es nicht mehr

Bummi 9. Jan 2011 10:17

AW: Chart mit sauberen Linien
 
Zitat:

Das hilft mir im Moment nicht weiter
Würde im Prinzip für Dich nur bedeuten 3 Units in den Projektordner zu kopieren und den jetzigen Aufruf durch eine neues Pendant zu ersetzen (über den Daumen ein 8 Zeiler). Installiert werden muß nichts.

roga 9. Jan 2011 18:44

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

Namenloser 9. Jan 2011 19:10

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 Graphics32-Bibliothek empfehlen. Vor allem die TPolygon32-Klasse dürfte für dich interessant sein.

Jens01 9. Jan 2011 19:29

AW: Chart mit sauberen Linien
 
der Graphics32-Empfehlung kann ich mich nur anschließen. Und diese Komponente ergänzen : GR32_Lines von Angus http://angusj.com/delphi/

Bummi 9. Jan 2011 20:33

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.

roga 9. Jan 2011 23:42

AW: Chart mit sauberen Linien
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Die Dateien GDIPAPI,GDIPOBJ in Deinen Projektordner oder in den Pfad kopieren
Das hat leider nicht gereicht. Nach einigen Recherchen im Internet habe ich eine neue LIB mit folgenden Dateien erstellt:

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz