AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Schnittpunkt einer Canvas.LineTo mit Komponente TButton
Thema durchsuchen
Ansicht
Themen-Optionen

Schnittpunkt einer Canvas.LineTo mit Komponente TButton

Ein Thema von Scorpion · begonnen am 23. Nov 2005 · letzter Beitrag vom 27. Nov 2005
Antwort Antwort
Seite 2 von 2     12   
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#11

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 26. Nov 2005, 17:21
Hi,

pack doch alle Projektdateien zu einer zip und füge diese Datei dann hier ein...
Gruß Nico
  Mit Zitat antworten Zitat
mare_crisium

Registriert seit: 6. Nov 2005
17 Beiträge
 
Delphi 5 Standard
 
#12

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 26. Nov 2005, 17:36
Scorpion,

nee, meine WinZip-Version lässt mich nichts einpacken. Ich füge einfach alle Dateien als Anhang bei. Ist ja nicht soo viele MB.

mare_crisium
Angehängte Dateien
Dateityp: dpr spktp200_126.dpr (194 Bytes, 7x aufgerufen)
Dateityp: dcu spktu200_962.dcu (8,5 KB, 6x aufgerufen)
Dateityp: dfm spktu200_125.dfm (4,9 KB, 6x aufgerufen)
Dateityp: pas spktu200_151.pas (14,1 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#13

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 26. Nov 2005, 18:20
Boah, irgendwie blicke ich bei deinem Code überhaupt nicht durch... Wieso wird denn nur 1 Schnittpunkt gekennzeichnet, es gibt doch immer 2, das heisst auf 2 Kanten der Komponente. Und wie wird der Schnittpunkt überhaupt bestimmt, ich sehe nur eine lokale Variable, der kein Wert in der Procedure markSchnittPunkt zugewiesen wird...
Gruß Nico
  Mit Zitat antworten Zitat
mare_crisium

Registriert seit: 6. Nov 2005
17 Beiträge
 
Delphi 5 Standard
 
#14

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 26. Nov 2005, 20:43
Scorpion,

tut mir leid, wenn ich das Ganze zu kompliziert gemacht habe. Mal sehen, ob ich das noch richten kann.

Also, das hier ist die Stelle, an der ich die Schnittpunktberechnung aufrufe und den Schnittpunkt in die paintBox einzeichne:

Code:
     if schnittPunktExists(lstrecke,lkante,lschnittPunkt)
     then begin
       lp:=pbxMain.screenToClient(vekt2ToPoint(lschnittPunkt));
(*
Der Schnittpunkt wird auf dem Bildschirm mit einem Quadrat markiert.
*)
       with pbxMain.canvas do begin
         brush.color:=clRed;
         fillRect(rect(lp.x-lmarkWidth-1,lp.y-lmarkWidth-1,lp.x+lmarkWidth-1,lp.y+lmarkWidth-1));
       end;
     end;
Die Koordinaten des Schnittpunktes werden in der an die lokale Variable lschnittPunkt (vom Typ Tvektor2) übergeben. Die Funktion "schnittPunktExists" wir so aufgerufen:

Code:
function TForm1.schnittPunktExists(     s1,s2      : Tstrecke;
                                    var schnittPkt : Tvektor2 ) : boolean;
D.h., weisst dem Resultat einen Wert vom Typ Boolean zu und dem variablen Parameter schnittPkt einen Wert vom Typ Tvektor2. Das hast Du vielleicht übersehen; ist auch eigentlich kein guter Programmierstil.

In der übernächsten Zeile rechne ich die Variable "lschnittPunkt" in eine lokale Variable "lp" vom Typ Tpoint um. Das muss sein, weil man die Zeichenfunktionen des Canvas ja nur mit ganzzahligen Koordinaten ansprechen darf.

So, und den Punkt zeichne ich als Rechteck auf die paintBox, nämlich mit fillRect. Das Rechteck, das gefüllt wird, hat den Punkt "lp" als Mittelpunkt. Deshalb taucht "lp.x" und "lp.y" mehrmals in der Klammer von "fillRect" bzw. von "rect" auf.

Wenn Du die "exe"-Datei zum Laufen kriegst, dann siehst Du auch zwei markierte Schnittpunkte. Das kommt daher, dass mit der Schleife

Code:
  ...
  for li:=0 to 3 do begin
  ...
alle vier Seiten des Controls eine nach der anderen auf Schnittpunkte geprüft werden. Und wenn einer gefunden wird, d.h. wenn
Code:
  schnittPunktExists = true
dann wird er auch gezeichnet.

Hoffentlich habe ich das jetzt besser erklärt und die Verwirrung nicht noch gesteigert!

mare_crisium
  Mit Zitat antworten Zitat
Scorpion

Registriert seit: 3. Nov 2002
Ort: Flörsheim
154 Beiträge
 
Delphi 5 Professional
 
#15

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 27. Nov 2005, 00:27
Ok, das habe ich soweit verstanden, aber ich habe immer noch ein Problem. Anbei findest du eine Skizze, da wird mit ein Schnittpunkt gezeichnet, das ist gut, aber ich habe einen Kreis darum gemacht, wo ich eigentlich auch noch einen erwartet hätte.

Warum fehlt dieser ?
Miniaturansicht angehängter Grafiken
image1_191.jpg  
Gruß Nico
  Mit Zitat antworten Zitat
mare_crisium

Registriert seit: 6. Nov 2005
17 Beiträge
 
Delphi 5 Standard
 
#16

Re: Schnittpunkt einer Canvas.LineTo mit Komponente TButton

  Alt 27. Nov 2005, 09:00
Scorpion,

prima, dass ich verständlich erklärt habe.

Also, an der Stelle, die Du markiert hast, ist tatsächlich ein Schnittpunkt eingezeichnet. Ich habe nur die Markierung (lokale Konstante "lmarkWidth") zu klein gemacht. Dieser Antwort füge ich eine neue Version der "exe"-Datei an, bei der die Markierung grösser ist, so dass man sie besser sieht.

Ausserdem, wenn die "exe"-Datei bei Dir läuft, dann verändere doch mal die Werte in den Groupboxen auf der linken Seite! Das kannst Du erreichen, indem Du entweder auf die hoch- und runter-Knöpfchen rechts neben den Zahlen drückst, oder indem Du Zahlenwerte direkt in die Zahlenfelder einschreibst (negative Zahlen akzeptiert das Programm nicht). Du wirst dann sehen, wie sich die Anfangs- und Endpunkte der Geraden verschieben und auch die Schnittpunkte rund um das Control herumwandern.

Sag' mal, ob das klappt.
Angehängte Dateien
Dateityp: exe spktp200_131.exe (335,0 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:44 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