AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas - Punkte verbdinden

Ein Thema von hs-maniac · begonnen am 28. Sep 2008 · letzter Beitrag vom 29. Sep 2008
Antwort Antwort
hs-maniac

Registriert seit: 28. Sep 2008
Ort: Bremerhaven
3 Beiträge
 
#1

Canvas - Punkte verbdinden

  Alt 28. Sep 2008, 23:33
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 06:21
Hallo

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

Form2.Canvas...
Thomas
  Mit Zitat antworten Zitat
hs-maniac

Registriert seit: 28. Sep 2008
Ort: Bremerhaven
3 Beiträge
 
#3

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 14:50
Hmm ok, jedoch kriege ichs trotzdem net hin, dass die Punkte verbdunden werden.

muss ich vor jedem Canvas ein "Form2." setzen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 14:53
Bitte Crossposts in Zukunft verlinken.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 19:11
Zitat von hs-maniac:
muss ich vor jedem Canvas ein "Form2." setzen?
Ja.
Thomas
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 19:14
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.
  Mit Zitat antworten Zitat
hs-maniac

Registriert seit: 28. Sep 2008
Ort: Bremerhaven
3 Beiträge
 
#7

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 19:56
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;
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Canvas - Punkte verbdinden

  Alt 29. Sep 2008, 20:26
Die einzige* Möglichkeit ist, die Punkte zuletzt zu zeichnen.

* Alternativen: Maske/Z-Buffer, beides nicht praktikabel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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