Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Canvas - Punkte verbdinden (https://www.delphipraxis.net/121487-canvas-punkte-verbdinden.html)

hs-maniac 28. Sep 2008 22:33


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:
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;
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.
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

toms 29. Sep 2008 05:21

Re: Canvas - Punkte verbdinden
 
Hallo

Zitat:

Delphi-Quellcode:
Canvas.Pen.Color := clred;

Somit greifst du immer auf den Canvas der jeweiligen Form zu.
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...

hs-maniac 29. Sep 2008 13:50

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?

DeddyH 29. Sep 2008 13:53

Re: Canvas - Punkte verbdinden
 
Bitte Crossposts in Zukunft verlinken.

toms 29. Sep 2008 18:11

Re: Canvas - Punkte verbdinden
 
Zitat:

Zitat von hs-maniac
muss ich vor jedem Canvas ein "Form2." setzen?

Ja.

Namenloser 29. Sep 2008 18:14

Re: Canvas - Punkte verbdinden
 
Du kannst alternativ den Code-Block in einen with-Block einschließen:
Delphi-Quellcode:
form2.canvas.moveto(...);
form2.canvas.lineto(...);
kann auch geschrieben werden als
Delphi-Quellcode:
with form2 do
begin
  canvas.moveto(...);
  canvas.lineto(...);
end;
oder sogar
Delphi-Quellcode:
with form2.canvas do
begin
  moveto(...);
  lineto(...);
end;
Das lohnt sich natürlich vor allem bei längeren Quellcodes.

hs-maniac 29. Sep 2008 18:56

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;

Namenloser 29. Sep 2008 19:26

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 10:35 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