AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Grafikprogrammierung: Frage
Thema durchsuchen
Ansicht
Themen-Optionen

Grafikprogrammierung: Frage

Ein Thema von hansklok · begonnen am 6. Aug 2004 · letzter Beitrag vom 9. Aug 2004
Antwort Antwort
Seite 1 von 2  1 2      
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

Grafikprogrammierung: Frage

  Alt 6. Aug 2004, 20:39
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:

function ExtCreatePen(PenStyle: DWord; Width: DWORD; const Brush: TLogBrush; StyleCount: DWORD; Style: Pointer): HPen; 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?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Grafikprogrammierung: Frage

  Alt 6. Aug 2004, 22:27
Zitat von hansklok:
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:

function ExtCreatePen(PenStyle: DWord; Width: DWORD; const Brush: TLogBrush; StyleCount: DWORD; Style: Pointer): HPen; 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?
Den Pen kannst Du wie folgt einstellen:
Delphi-Quellcode:
...
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;
Du kannst auch mit den diversen PS_* Attributen experimentieren. Aber Achtung, bestimmte Kombinationen laufen nicht unter Win95!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#3

Re: Grafikprogrammierung: Frage

  Alt 6. Aug 2004, 23:24
gibt win95 noch in der freien wildbahn?
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Grafikprogrammierung: Frage

  Alt 6. Aug 2004, 23:35
Zitat von nailor:
gibt win95 noch in der freien wildbahn?
Du wirst lachen, es gibt sogar noch DOSen!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#5

Re: Grafikprogrammierung: Frage

  Alt 6. Aug 2004, 23:36
das hat auch eher noch ne daseinsberechtigung als win95
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#6

Re: Grafikprogrammierung: Frage

  Alt 8. Aug 2004, 18:14
Ich habe nun alles ausprobiert & trotzdem sagt der mir undefinierter Bezeichner Pen. Warum?
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Grafikprogrammierung: Frage

  Alt 8. Aug 2004, 18:56
Zitat von hansklok:
Ich habe nun alles ausprobiert & trotzdem sagt der mir undefinierter Bezeichner Pen. Warum?
Sorry, es muss heißen:
Code:
LogBrush.lbColor := Form1.Canvas.Pen.Color;
Wenn Du die Stiftfarbe des Formulars übernehmen willst, ansonsten natürlich jede beliebige Farbe.
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#8

Re: Grafikprogrammierung: Frage

  Alt 8. Aug 2004, 19:04
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:
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;
Dann sage ich dem Programm noch folgendes:
Delphi-Quellcode:
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;
und trotzdem malt der die Linie nur ein Pixel breit, warum?
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Grafikprogrammierung: Frage

  Alt 8. Aug 2004, 19:40
Ich habe Deinen Source exakt kopiert, hier die komplette Unit:
Delphi-Quellcode:
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.
Und das Ergebnis sieht so aus (also schon eine fette Line wenn Du mich fragst):
Miniaturansicht angehängter Grafiken
form1_136.jpg  
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#10

Re: Grafikprogrammierung: Frage

  Alt 9. Aug 2004, 19:06
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 15:16 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