Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kreis zeichnen mit gestrichelter Linie und Stärke mehr als 1 (https://www.delphipraxis.net/133668-kreis-zeichnen-mit-gestrichelter-linie-und-staerke-mehr-als-1-a.html)

mtc 6. Mai 2009 20:03


Kreis zeichnen mit gestrichelter Linie und Stärke mehr als 1
 
Hallo liebe Gemeinde,

und zwar habe ich folgendes Problem.

Ich möchte einen Kreis zeichnen und die Umrandung soll gestrichelt sein.
Leider gibt es ja die Beschränkung, dass gestrichelt nur mit Linienstärke 1 gibt.

Kann man diese aufheben, weil ich benötige einen Linienstärke von mindesten 3.

Danke schonmal im Voraus.

Gruß,
MTC

[edit=SirThornberry]Titel korrigiert ("mehr als" oder "gleich wie" aber bitte nicht "mehr wie") Mfg, SirThornberry[/edit]

3_of_8 6. Mai 2009 20:06

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr w
 
Hab jetzt kein Delphi da, aber... nimmste dir ein Canvas und stellst beim Pen, die Width (oder wie das heißt) auf 3, den Style auf psDash (glaub ich, schlag das einfach nach) und zeichnest ne Ellipse.

Achj aund. mehr _als_. "Wie" tut weh...

mtc 6. Mai 2009 20:40

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Und genau das macht Delphi nicht.

Denn sobald ich psDash einstelle, wird Width automatisch auf 1 gesetzt.

Gruß,
MTC

jfheins 6. Mai 2009 20:51

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Selber schreiben :stupid:

Mit der Funktion Arc() (iirc) die Striche zeichnen und entsprechende Lücken lassen ;)

mr_emre_d 6. Mai 2009 21:53

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Ich habe nichts zu tun .. (langeweile):

Delphi-Quellcode:
procedure DashEllipse( ACanvas: TCanvas; const Center: TPoint;
  const Radius: Cardinal; const PenWidth: Byte = 1;
  const Distance: Byte = 4 );
var
  i, x: Integer;
begin
  X := (360 div Distance);
  with ACanvas do
  begin
    Pen.Width := PenWidth;
    for i := 0 to X do
      if i mod 2 = 0 then
        Arc(
          Center.X-Radius, Center.Y-Radius, Center.X+Radius, Center.Y+Radius,
          Center.X + Round( cos(  i*Distance*PI/180)*Radius )          , Center.Y + Round( sin(  i*Distance*PI/180)*Radius ),
          Center.X + Round( cos( (i*Distance-Distance)*PI/180)*Radius ) , Center.Y + Round( sin( (i*Distance-Distance)*PI/180)*Radius )
        );
  end;
end;
Beispielsaufruf:
Delphi-Quellcode:

procedure TForm1.FormPaint(Sender: TObject);
begin
  DashEllipse( Canvas, Point( 200, 120 ), 100, 3 );
end;
MfG :P

mtc 6. Mai 2009 22:17

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
WOW,

echt vielen Dank und vor allem für das super Beispiel.
An das ARC hatte ich überhaupt nicht gedacht, weil ich zum ersten Mal etwas mit Canvas veranstalte.

Supi und Danke nochmal.

Gruß,
MTC

mr_emre_d 6. Mai 2009 22:22

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Büdde :)

Hawkeye219 6. Mai 2009 22:36

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Herzlich willkommen in der Delphi-PRAXiS, mtc!

Eine Alternative zu obigem Vorschlag wäre die Verwendung von geometric pens. Es gibt dazu auch ein Beispiel in der DP.

Gruß Hawkeye

mtc 6. Mai 2009 22:40

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
Ich hab noch ein weiteres Problem.

Und zwar geht das Ganze auch für ein Polygon, welches zum Beispiel aus 10 Punkten besteht?

Ich muss nämlich mehrere Figuren zeichnen und die Strichstärke muss anpassbar sein.
Und zwar einmal in der Stärke (Width) und zum anderen in dem Style (gepunktet, gestrichelt).

Wäre echt super, wenn ihr mir da noch weiterhelfen könntet.

Danke und Gruß,
MTC

mr_emre_d 6. Mai 2009 22:55

Re: Kreis zeichnen mit gestrichelter Linie und Stärke mehr a
 
ein Polygon (TPolygon) ist nur ein Array aus Punkten (TPoint) -> Du müsstest in einer Schleife alle Punkte durchgehen und der Funktion (DashEllipse) als Center die einzelnen Punkte übergeben!

Versuchs mal selbst; anschließend helf ich dir!

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:09 Uhr.
Seite 1 von 2  1 2      

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