![]() |
Grafikprogrammierung: Frage
Im Buch "Delphi 7-Grundlagen & Profiwissen" ist in Kapitel 15 erklärt, dass es sich als ungünstig erweist, wenn man ein Grafikprogramm größeren Umfangs gestalten will & dazu die in der TCanvas Unit Standart eingestellte Stiftart Cosmetic Pen verwendet. Unterdessen wird auf die Stiftart Geometric Pen mit folgender Syntax hingwiesen:
Delphi-Quellcode:
Diese Syntax stellt die Pen Eigenschaft so um, dass Linien, die gezeichnet werden nicht mehr mit abgerundeten Ecken erstellt werden, sonder mit rechteckigen Ecken. Könnt ihr mir bitte den Quelltext geben, wenn im OnCreate Ereigniss des Formulars die Pen-Eigenschaft Cosmetic Pen auf Geometric Pen umgestellt wird?
function ExtCreatePen(PenStyle: DWord; Width: DWORD; const Brush: TLogBrush; StyleCount: DWORD; Style: Pointer): HPen;
Danke |
Re: Grafikprogrammierung: Frage
Zitat:
Delphi-Quellcode:
Du kannst auch mit den diversen PS_* Attributen experimentieren. Aber Achtung, bestimmte Kombinationen laufen nicht unter Win95!
...
const PenStyle = PS_Geometric or PS_Solid var LogBrush: TLOGBRUSH; begin LogBrush.lbStyle := BS_Solid; LogBrush.lbColor := Pen.Color; LogBrush.lbHatch := 0; with Form1.Canvas do begin Pen.Handle := ExtCreatePen(PenStyle, Pen.Width, LogBrush, 0, nil); end; end; |
Re: Grafikprogrammierung: Frage
gibt win95 noch in der freien wildbahn?
|
Re: Grafikprogrammierung: Frage
Zitat:
|
Re: Grafikprogrammierung: Frage
das hat auch eher noch ne daseinsberechtigung als win95
|
Re: Grafikprogrammierung: Frage
Ich habe nun alles ausprobiert & trotzdem sagt der mir undefinierter Bezeichner Pen. Warum?
|
Re: Grafikprogrammierung: Frage
Zitat:
Code:
Wenn Du die Stiftfarbe des Formulars übernehmen willst, ansonsten natürlich jede beliebige Farbe.
LogBrush.lbColor := Form1.Canvas.Pen.Color;
|
Re: Grafikprogrammierung: Frage
Jetzt habe ich noch ein Problem. Wenn ich das Canvas der Form verwende und die Stiftbreite auf 50 einstelle, dann wird auch eine sehr dicke Linie gezeichnet, so dass man sieht, dass die nicht nur ein Pixel breit ist. Wenn ich nun in das Create Ereignis der Form den leicht umgeänderten Quelltext:
Delphi-Quellcode:
Dann sage ich dem Programm noch folgendes:
procedure TForm1.FormCreate(Sender: TObject);
const PenStyle = PS_Geometric or PS_Solid; var LogBrush: TLOGBRUSH; begin LogBrush.lbStyle := BS_Solid; LogBrush.lbColor := Form1.Image1.Canvas.Pen.Color; LogBrush.lbHatch := 0; with Form1.Image1.Canvas do begin Pen.Handle := ExtCreatePen(PS_Geometric+PS_Dash+PS_Endcap_Square+PS_Join_Round, 50, LogBrush, 0, nil); end; end;
Delphi-Quellcode:
und trotzdem malt der die Linie nur ein Pixel breit, warum?
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.MoveTo(x, y); end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.LineTo(X, Y); end; |
Re: Grafikprogrammierung: Frage
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Deinen Source exakt kopiert, hier die komplette Unit:
Delphi-Quellcode:
Und das Ergebnis sieht so aus (also schon eine fette Line wenn Du mich fragst):
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); const PenStyle = PS_Geometric or PS_Solid; var LogBrush: TLOGBRUSH; begin LogBrush.lbStyle := BS_Solid; LogBrush.lbColor := Form1.Image1.Canvas.Pen.Color; LogBrush.lbHatch := 0; with Form1.Image1.Canvas do begin Pen.Handle := ExtCreatePen(PS_Geometric+PS_Dash+PS_Endcap_Square+PS_Join_Round, 50, LogBrush, 0, nil); end; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.MoveTo(x, y); end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Image1.Canvas.LineTo(X, Y); end; end. |
Re: Grafikprogrammierung: Frage
Sorry, war ein Fehler von meiner Seite aus, hatte ein Stück Quelltext vergessen. Nun ergibt sich für mich gleich die nächste Frage. Gibt es irgendeine Möglichkeit für alle Zeichenelemente (Ellipse, Rectangle, RoundRect etc.) eine Art Kantenglättung beim Zeichnen durchzuführen, da die Linien immer noch relativ pixelig sind?
Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 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