![]() |
Canvas - Punkte verbdinden
Hallo Delphi-Freunde!
Habe folgendes Problem: Derweil habe ich eine Oberfläche programmiert, die mir erlaubt per Mausklick Punkte zu setzen und deren Koordinaten werden neben der Canvas-Fläche gelistet. Ich habe es auch schon geschafft, dass sie ALLE punkte mit JEDEM Punkt was ich setze verbindet, sprich, es wird sehr schnell sehr undurchschaubar, ist aber Sinn der Sache. Quell-Code:
Delphi-Quellcode:
Nun möchte ich aber gerne, dass sich die Punkte nicht sofort verbinden sobald ich sie setze, sondern möchte ich gerne einen Button haben, der es per Klick ermöglicht, mit einmal alle Punkte zu verbinden.
Canvas.Pen.Color := clred;
Canvas.Pen.Width := 1; Canvas.Pen.Style := psDot; for i := 0 to High( arPoints ) - 1 do begin for j := i+1 to High( arPoints) + 0 do begin Canvas.MoveTo(arPoints[i].X, arPoints[i].Y); Canvas.LineTo(arPoints[j].X, arPoints[j].Y); end; end; Sprich: Verbinden der Punkte erst nach Klick des Buttons. WIe kriege ich das hin? Ich besitze eine unit1.pas und eine unit2.pas der button wird nach generieren in unit1.pas bearbeitet, der code hier ist aber in unit2.pas drin. habe versucht, das ganze einfach rüber zu schreiben, geht aber net (Anfänger-Denken). PS: Habe echt sehr wenig Ahnung von Delphi. Besten Dank schonmal, hs-maniac |
Re: Canvas - Punkte verbdinden
Hallo
Zitat:
D.h wenn der Code in Unit1 steht, wird auf Canvas von Form1 referenziert, wenn der Code in Unit2 steht, auf Canvas von Form2 etc. Wenn du von Unit1 auf den Canvas von Form2 zugreifen möchtest, dann schreibst du einfach den Formnamen vor Canvas.
Delphi-Quellcode:
Form2.Canvas...
|
Re: Canvas - Punkte verbdinden
Hmm ok, jedoch kriege ichs trotzdem net hin, dass die Punkte verbdunden werden.
muss ich vor jedem Canvas ein "Form2." setzen? |
Re: Canvas - Punkte verbdinden
Bitte
![]() |
Re: Canvas - Punkte verbdinden
Zitat:
|
Re: Canvas - Punkte verbdinden
Du kannst alternativ den Code-Block in einen with-Block einschließen:
Delphi-Quellcode:
kann auch geschrieben werden als
form2.canvas.moveto(...);
form2.canvas.lineto(...);
Delphi-Quellcode:
oder sogar
with form2 do
begin canvas.moveto(...); canvas.lineto(...); end;
Delphi-Quellcode:
Das lohnt sich natürlich vor allem bei längeren Quellcodes.
with form2.canvas do
begin moveto(...); lineto(...); end; |
Re: Canvas - Punkte verbdinden
Ah Danke.
Folgendes Problem habe ich nun, es geht ums optische. Ich kann auf dem Canvas viele Punkte setzen und jeder wird mit jedem verbunden, nach einer Weile wirds zu unübersichtlich und die Koordinaten jedes Punktes wird von den ganzen Strichen überdeckt. Gibt es so ne Art "OnTop" funktion/Befehl??
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var Punkt : PTTPoint; begin PanelPaint.AddPoint( x,y ); New( Punkt ); Punkt^.X := x; Punkt^.Y := y; font.Color := clWhite; TreeView1.Items.AddChildObjectFirst( nil,Format( 'X=%d, Y=%d',[x,y] ),Punkt ); Anzahl_Punkte:=Anzahl_Punkte+1; if (Anzahl_Punkte>2) and (Anzahl_Punkte<11) then Button1.Enabled:=true else Button1.Enabled:=false; if (Anzahl_Punkte>9) then begin (PanelPaint.Enabled := false); if (Anzahl_Punkte>9) then showmessage ('Maximale Anzahl an Punkte erreicht'); end; end; |
Re: Canvas - Punkte verbdinden
Die einzige* Möglichkeit ist, die Punkte zuletzt zu zeichnen.
* Alternativen: Maske/Z-Buffer, beides nicht praktikabel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 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