| Autor |
Beitrag |
Jezuz
Hält's aus hier
Beiträge: 1
Win XP, Linux 9.2
D7 Prof
|
Verfasst: Mi 13.07.05 17:33
Salut
Ich progge mir gerade ein kleines Brettspiel für den PC zusammen... Hab aber das Problem, dass ich dafür eigentlich die Position des Mauszeigers im Bezug auf die Paintbox brauche. (Also eben nicht die Cursorposition im Bezug auf den gesammten Bildschirm)
Schon mal im Vorraus Besten Dank
Jezuz
|
|
ManuelGS
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: Mi 13.07.05 17:59
Hi!
Das ist reine Mathe!
Ich würde das Ereignis der Form "OnMousedown" verwenden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.OnMouseDown.... var posx,posy:integer; begin posx:=x-paintbox.width; posy:=y-paintbox.height; end; |
Dann kannst du natürlich noch Bedingungen einfügen, z.B. ob überhaupt in der Paintbox geklickt wurde, oder auf der Form usw.
Gruß, Manuel.
_________________ "Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria
|
|
ScorpionKing
      
Beiträge: 1150
Win XP
|
Verfasst: Mi 13.07.05 19:04
Zu sagen wäre noch, dass x und y nicht vorgegeben sind!
Delphi-Quelltext 1: 2: 3: 4: 5:
| var p: TPoint; begin GetMousePos(p); x := p.x; y := p.y; |
_________________ Aus dem Urlaub zurück!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mi 13.07.05 19:16
Stichwort: "SCREENTOCLIENT". Du übergibst die Koordinaten auf dem Monitor (die du mit GetCursorPos holst) und erhälst die Position auf der Paintbox.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
ScorpionKing
      
Beiträge: 1150
Win XP
|
Verfasst: Mi 13.07.05 19:19
Der Code von oben, mit meinem kombiniert ergibt doch das selbe, ohne größeren Aufwand! Warum also schwerer machen, als es ist? 
_________________ Aus dem Urlaub zurück!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mi 13.07.05 19:38
Schwerer  Delphi-Quelltext 1: 2: 3: 4: 5:
| var P:TPoint; begin GetCursorPos(P); P:=PaintBox1.ScreenToClient(P); | Das halte ich für das Einfachste!
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
ScorpionKing
      
Beiträge: 1150
Win XP
|
Verfasst: Do 14.07.05 13:44
Oh, sorry, stimmt, ist tatsächlich kürzer!
_________________ Aus dem Urlaub zurück!
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Do 14.07.05 14:12
| Zitat: | | Warum also schwerer machen, als es ist? |
Auch auf die Gefahr, dass ich kleinlich bin oder so. Aber wenn ich mittels der Events OnMouseDown, OnMouseUp und OnMouseMove (der Paintbox wohl gemerkt) das X und Y auswerte erhalte ich von Begin an die Position innerhalb der Paintbox. Nebenbei dann auch so unwichtichtige Informationen wie "ich habe jetzt gedrückt, losgelassen oder die Maus bewegt". Warum also so kompliziert und es selber ausrechnen?
ManuelGS: Ich glaube nicht, dass das funktionieren würde. Sobald sich die Maus über der PaintBox befindet würde das Form kein OnMouseMove mehr bekommen. Außer es hat das MouseCapture gesetzt. Was passiert sobald man die Maus drückt. Aber dazu müsste man erst aufs Form klicken und die Maus dann über die PaintBox bewegen.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|
ManuelGS
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: Do 14.07.05 14:20
@lossy
stimmt wohl. hab's selbst aber auch gar nicht getestet.
aber mit getcursor anstelle von onmousedown würd's doch hinhauen?
_________________ "Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria
|
|
Lossy eX
      
Beiträge: 1048
Erhaltene Danke: 4
|
Verfasst: Fr 15.07.05 08:28
GetCursorPos würde ja wieder einen Punkt mit dem Ursprung oben Links im Bildschirm liefern. Das müsste man erst wieder mit ScreenToClient in einen Punkt umrechnen der als Ursprung den Objectursprung hat. Siehe Post von maxk.
_________________ Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
|
|