AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi TCanvas.Pen und die abgerundeten Ecken
Thema durchsuchen
Ansicht
Themen-Optionen

TCanvas.Pen und die abgerundeten Ecken

Ein Thema von Meflin · begonnen am 26. Mai 2007 · letzter Beitrag vom 28. Mai 2007
Antwort Antwort
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

TCanvas.Pen und die abgerundeten Ecken

  Alt 26. Mai 2007, 13:45
Moin moin!

Die Canvas.LineTo-Methode hat eine dumme Eigenschaft: sie rundet die Ecken der Linien ab. Bei dünnen Linien merkt man das kaum, bei dickeren wird es aber richtig nervig, wenn man Kanten exakt aufeinander zeichnen will

Also habe ich gesucht und gefunden, wie sich dieses Problem theoretisch lösen lässt, nämlich mit Hilfe der Funktion MSDN-Library durchsuchenExtCreatePen.

Allein - trotz Verwendung selbiger - tut sich rein garnichts, was die Gestaltung der Ecken der Linien betrifft

Mein Code ist Folgender:
Delphi-Quellcode:
const
  SquarePenStyle = PS_Geometric or PS_Solid or PS_EndCap_Square or PS_Join_Miter;
var
  LogBrush: TLOGBRUSH;
  P : HPen;


  LogBrush.lbColor := ColorToRGB(Canvas.Pen.Color);
  LogBrush.lbHatch := 0;
  P := ExtCreatePen(SquarePenStyle, Canvas.Pen.Width, LogBrush, 0, nil);
  Canvas.Pen.Handle := P;

  Canvas.LineTo(X,Y);
Die Ecken bleiben weiterhin abgerundet

Bei der weiteren Recherche bin ich darauf gestoßen, dass es da in Delphi 2005 einen Bug gab:
http://qc.borland.com/wc/qcmain.aspx?d=13225
bzw http://qc.borland.com/wc/qcmain.aspx?d=9661
Der soll aber angeblich gefixt sein, daran kann es also auch nicht liegen

Woran aber dann?

  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: TCanvas.Pen und die abgerundeten Ecken

  Alt 27. Mai 2007, 19:21
*Dezent hochhol*

  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#3

Re: TCanvas.Pen und die abgerundeten Ecken

  Alt 28. Mai 2007, 03:47
*Dezent Antworte*

Moin!

Dein Code hat auch einen kleinen Bug

Du hast LogBrush.lbStyle nicht initialisiert, deshalb streikt der Aufruf von Delphi-Referenz durchsuchenExtCreatePen

Entweder Du nullst die Strukturen komplett:
ZeroMemory(@LogBrush, SizeOf(LogBrush)); Oder weist allem einem Wert zu:
Delphi-Quellcode:
LogBrush.lbStyle:=0;
LogBrush.lbColor:=ColorToRGB(Canvas.Pen.Color);
LogBrush.lbHatch:=0;

Dies hat geeckt:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
   var LogBrush:TLOGBRUSH;
begin
   ZeroMemory(@LogBrush, SizeOf(LogBrush));
   LogBrush.lbColor:=ColorToRGB(Canvas.Pen.Color);
   LogBrush.lbHatch:=0;

   DeleteObject(Canvas.Pen.Handle);
   Canvas.Pen.Handle:=ExtCreatePen(PS_Geometric or PS_Solid or PS_EndCap_Square or PS_Join_Miter, 10, LogBrush, 0, nil);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   Canvas.MoveTo(0, 0);
   Canvas.LineTo(50, 50);
end;
Grüße, Sunlight7
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

Re: TCanvas.Pen und die abgerundeten Ecken

  Alt 28. Mai 2007, 11:20
Wenn ich das in ein leeres Projekt kopiere dann gehts - in meiner eigenen Unit leider nach wie vor nicht

Ich mach mich dann mal auf die Suche

Danke jedenfalls
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
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