![]() |
AW: Linie im Winkel zeichnen
Zitat:
|
AW: Linie im Winkel zeichnen
Leider nein :D
|
AW: Linie im Winkel zeichnen
Zitat:
![]()
Code:
x := kreis_radius * cos(DegToRad(15))
y := kreis_radius * sin(DegToRad(15)) linie_x1 = kreis_mittelpunkt_x linie_y1 = kreis_mittelpunkt_y linie_x2 = kreis_mittelpunkt_x + x linie_y2 = kreis_mittelpunkt_y + y |
AW: Linie im Winkel zeichnen
Das Wichtigste ist, dass die PaintBox ihren Kram selber zeichnet. Und zwar in dem Event
Delphi-Quellcode:
.
OnPaint
Wenn die PaintBox nun also etwas mehr zeichnen soll, dann muss man so etwas wie einen Bauplan zur Verfügung stellen und dann kann die PaintBox diesen Bauplan abarbeiten. Ändert man den Bauplan, dann teilt man das der PaintBox durch den Aufruf von
Delphi-Quellcode:
mit.
TPaintBox.Repaint
Der einfachste Bauplan, wäre z.B. das Zeichnen der Ellipse:
Delphi-Quellcode:
type
TForm1 = class( TForm ) CheckBox1: TCheckBox; // OnClick = CheckBox1Click PaintBox1: TPaintBox; // OnPaint = PaintBox1Paint procedure CheckBox1Clicked( Sender: TObject ); procedure PaintBox1.Paint( Sender: TObject ); private FPaintEllipse: Boolean; end; procedure TForm1.CheckBox1Clicked( Sender: TObject ); begin // Bauplan ändern FPaintEllipse := CheckBox1.Checked; // PaintBox neu zeichnen lassen PaintBox1.Repaint; end; procedure TForm1.PaintBox1Paint( Sender: TObject ); var LCanvas: TCanvas; begin LCanvas := TPaintBox(Sender).Canvas; // nach dem Bauplan zeichnen if FPaintEllipse then LCanvas.Ellipse(100,100,400,400); end; |
AW: Linie im Winkel zeichnen
Zitat:
|
AW: Linie im Winkel zeichnen
Zitat:
Delphi-Quellcode:
unit Uhr;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Winkel: TEdit; Strich: TButton; Reset: TButton; PaintBox1: TPaintBox; procedure PaintBox1Paint(Sender: TObject); procedure ResetClick(Sender: TObject); procedure StrichClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; i : integer; implementation {$R *.dfm} procedure TForm1.PaintBox1Paint(Sender: TObject); var LCanvas: TCanvas; begin LCanvas := TPaintBox(Sender).Canvas; LCanvas.Ellipse(100,100,400,400); // Kreis zeichnen end; procedure TForm1.ResetClick(Sender: TObject); begin paintbox1.Repaint ; // Clear end; procedure TForm1.StrichClick(Sender: TObject); var Radi, Gradi, R, PX, PY : double ; MX, MY, PXi, PYi : integer ; begin MX := 250; // Mittelpunkt MY := 250; R := 150; Canvas.MoveTo(MX,MY); //Canvas.lineto(280,125); Gradi := StrToFloat(Winkel.Text) ; Radi := 3.14 *(Gradi/180); // Rechnung PX := cos(Radi)* R + MX ; PY := MY-sin(Radi)* R; PXi := trunc(PX) ; // Von ??? zu Integer umwandeln PYi := trunc(PY) ; Canvas.lineTo(PXi,PYi) ; end; end. |
AW: Linie im Winkel zeichnen
Naja, das nebensächliche
![]() |
AW: Linie im Winkel zeichnen
@GroZ
Paar kleine Vorschläge: - nimm die Konstante Pi statt 3,14. Kostet nix, ist bereits im System. - Nutze lieber Round() statt Trunc(). Round rundet kaufmännisch, Trunc schneidet nur die Nachkommastellen ab. Das alles ist zwar nicht ganz wichtig, kann aber den Unterschied ausmachen ob z. B. Punkt 9 Uhr klein wenig drunter oder über dem Punkt ist. |
AW: Linie im Winkel zeichnen
Zitat:
Delphi-Quellcode:
Radi := DegToRad(Gradi);
|
AW: Linie im Winkel zeichnen
Zitat:
1.: Ich habe die PaintBox im Formular um 100 Pixel nach unten verschoben, nun stimmt mein Anfangspunkt der Linie nicht mehr mit dem Mittelpunkt des Kreises überein. 2.: Wenn ich die Anwendung minimiere und dann wieder Anzeigen lasse, dann sind meine gezeichneten Linien verschwunden. 3.: Meine Linen bei 180 und 270° sind nicht gerade. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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