Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Halbkreise zeichnen (https://www.delphipraxis.net/34050-halbkreise-zeichnen.html)

Alex_ITA01 16. Nov 2004 15:39


Halbkreise zeichnen
 
Hallo erstmal,
ich würde gerne ein "paar" Halbkreise zeichen.
Dies kann ich schon wie folgt:

Delphi-Quellcode:
  R := Image1.ClientRect;
  Image1.Canvas.Arc(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
Nur möchte ich jetzt gerne das der halbkreis nicht "oben" in dem Image hängt sondern unten links anfängt.Leider werde ich aus den 8 Parametern nicht so ganz schlau und ich hoffe ihr könnt mir da helfen.Kann man die Dicke (Breite) der Linie noch ändern? Pen.Width vielleicht?


MFG Alex

dizzy 16. Nov 2004 18:27

Re: Halbkreise zeichnen
 
Heut schon mal F1 gedrückt? :zwinker:

Zitat:

Zitat von Alex_ITA01
Kann man die Dicke (Breite) der Linie noch ändern?

Zitat:

Zitat von Alex_ITA01
Pen.Width vielleicht? --> ! ;)


Robert Marquardt 16. Nov 2004 18:38

Re: Halbkreise zeichnen
 
Ab Windows NT gibt es die Win32-API-Funktion AngleArc(). Schau dir mal Die Implementation von Canvas.Arc in den VCL-Sourcen an. Dort lernst du wie man mit AngleArc() auf den Canvas malt.
AngleArc() hat sehr viel leichter zu vrstehende Parameter.

Alex_ITA01 17. Nov 2004 07:59

Re: Halbkreise zeichnen
 
ja habe schon F1 gedrückt :-)

habe es mal mit der AngleArc Funktion versucht.

Delphi-Quellcode:
  AngleArc(Image1.Parent.Handle,
           Image1.Width div 2,
           Image1.Height div 2,
           5,
           10,
           90);
Aber irgendwie sehe ich trotzdem nichts.Ich fülle vorher das Image nur komplett weiss aus und dann rufe ich die oben geschriebene Funktion auf.

Könnt ihr mir sagen was falsch ist?

MFG Alex

Christian18 17. Nov 2004 08:52

Re: Halbkreise zeichnen
 
hallo,

ich finde es immer am leichtesten, wenn man einen Kreis zu fuß zeichnet. das kannst du so machen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
  var i : TImage;  // image zum Anzeigen des Helbkreises
      mx : Integer; // Mittelpunkt x
      my : Integer; // mittelpunkt y
      k : Integer; // Schleifenvariable
      r : Integer; // Rand;
begin
  i:=Image1;
  mx:=i.Width div 2;
  my:=i.Height div 2;
  r:=20;

  i.Canvas.MoveTo(mx+r, my);

  for k:=0 to 180 do
    begin
      i.Canvas.LineTo(Round(mx+r*cos(k*Pi/180)), Round(my-r*sin(k*Pi/180)));
    end;
end;
PS: Ich hoffe ich konnte Dir ein wenig helfen.

Mit freundlichen Grüßen

Christian18

Alex_ITA01 17. Nov 2004 09:07

Re: Halbkreise zeichnen
 
ja danke konntest mir helfen.
werde auch erstmal so weiterarbeiten mit dem source.

wäre aber toll, wenn mir noch jemand sagen könnte was an der AngleArc-Funktion bei mir "falsch" ist?!

MFg Alex

teebee 17. Nov 2004 09:10

Re: Halbkreise zeichnen
 
Du übergibst keinen Gerätekontext, sondern ein Fensterhandle. So geht es:
Delphi-Quellcode:
Image2.Canvas.Moveto(Image1.Width Div 2, Image1.Height Div 2); // zum richtigen Startpunkt
AngleArc(Image1.Canvas.Handle, // hier wird ein DC übergeben
           Image1.Width div 2,
           Image1.Height div 2,
           20,
           0,
           90);
Image1.Canvas.Lineto(Image1.Width Div 2, Image1.Height Div 2); // zum Startpunkt zurück
Gruß, teebee


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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