AGB  ·  Datenschutz  ·  Impressum  







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

Mausposition relativ zum Fenster ermitteln

Ein Thema von Caps · begonnen am 18. Jan 2013 · letzter Beitrag vom 18. Jan 2013
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#1

Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 13:50
Hallo,

ich versuche durch Auswertung der Nachricht WM_MOUSEMOVE die Mausposition relativ zum Fenster (Form) zu ermitteln. Das scheitert schon daran, dass in der Hilfe zu dem Thema steht "The coordinate is relative to the upper-left corner of the client area."

Die Client-Area ist bei mir aber nun irgendeine beliebige, unbekannte, dynamisch erzeugte oder statische VCL-Komponente, die erst zur Laufzeit bekannt ist, z.B. ein Button, Listbox, etc. auf einem Panel auf einem Panel auf einem Panel auf einem Panel etc.

Wie kann unter Auswertung welcher Message herausfinden, wie die Mausposition bezogen auf das gesamte Fenster (Form) ist? Ich versuche zu vermeiden, einen OnMouseOver-Ereignishandler zu verwenden, bitte dahingehend nicht unbedingt antworten, es muss ja auch mit Messages gehen ().

Vielen Dank schonmal, ich bin am Verzweifeln...

Anmerkung: Bei der Auswertung von WM_MOUSEMOVE zeigt sich genau das in der Hilfe beschriebene Verhalten: die X- und Y-Koordinaten sind auf die VCL-Komponente bezogen, über der die Maus sich gerade befindet. Das nützt mir aber nix, weil ich die auf die Form bezogenen Koordinaten brauche.

Kein Problem? Das dachte ich auch erst
Vielleicht übersehe ich aber auch das naheliegendste... hmpf

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 13:54
Ich denke, Du suchst Delphi-Referenz durchsuchenScreenToClient bzw. Delphi-Referenz durchsuchenClientToScreen.
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 Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 13:55
irgendeine beliebige, unbekannte, dynamisch erzeugte oder statische VCL-Komponente
Hat diese Komponente vielleicht eine Methode Namens ClientToScreen? Das würd ja schon helfen...

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 14:02
Ich versuche zu vermeiden, einen OnMouseOver-Ereignishandler zu verwenden, bitte dahingehend nicht unbedingt antworten, es muss ja auch mit Messages gehen ().
Nur am Rande: OnMouseMove()-Events werden durch WM_MOUSEMOVE Messages getriggert, und sind daher eigentlich genau das selbe nur etwas verpackt. Bei OnMouseOver bin ich nicht 100%ig sicher, aber da dürfte das selbe zutreffen. Es spricht zunächst nichts dagegen die Message selbst zu behandeln, aber es steckt letztlich genau das selbe dahinter.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#5

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 14:11
Ihr habt beide Recht .

Ich habe ClientToScreen schon ausprobiert, aber mit mäßigem Erfolg...
(bitte entschuldigt, dass ich noch keinen Code gepostet habe, aber das alles gehört zu einem größeren Projekt, und ich weiß gar nicht, wo ich da mit Kopieren anfangen soll und vor allem aufhören muss )

Ich versuche es mal mit diesem Ausschnitt hier:

Delphi-Quellcode:
procedure HandleApplicationEvent(pMsg: TMsg; var Handled: Boolean);
var
   MouseInBrowser: Boolean;
mp: TPoint;
begin

// fensterbezogene Mausposition ermitteln...
if pMsg.message = WM_MOUSEMOVE then begin
   MouseX := LoWord(pMsg.lParam);
   MouseY := HiWord(pMsg.lParam);

mp.x := MouseX;
mp.y := MouseY;
mp := FormDATBrowser20.ClientToScreen(mp);
FormDATBrowser20.Label4.Caption := 'Maus: ('+inttostr(mp.x)+', '+inttostr(mp.y)+')';


                                    end;
Das Problem ist, dass bei diesem Aufruf die Mausposition springt, d.h. falsch ist, wenn ich z.B. von einem Panel auf eine ProgressBar rolle - mit einem Wort: ich kriege so nicht die Bildschirmbezogenen Koordinaten, die ich erwarten würde.

Ist es vielleicht falsch, die Methode ClientToScreen von der Form aufzurufen?
Muss ich <überrollte Komponente>.ClientToScreen aufrufen? Dafür müsste ich die Komponente aber noch irgendwie ermitteln, gel?

Angst...
lg Caps

ps: Zur Antwort "OnMouseOver durch Message getriggert":
Ja, das glaube ich, aber als ich FormDATBrowser.OnMouseOver implementiert habe, gab es nur Aktivität, wenn die Maus direkt über der Form war, war ein Panel dazwischen, war Funkstille - leider keine Lösung für mich. Kann man der Form wie mit KeyPreview vllt. ein allgemeines MessagePreview mitgeben?


Edit: es scheint so, als müsste ich ermitteln, welche Komponente unter der Maus ist. Hm...
Abgesehen davon, dass das natürlich irgendwie schon möglich sein wird - - - gibt's keinen einfacheren Weg? Ich will doch nix weiter als die Mausposition auslesen.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps (18. Jan 2013 um 14:16 Uhr) Grund: Neue Informationen
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#6

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 14:39
Im unit Controls gibt es die Variable Mouse : TMouse;

Mouse.cursorpos gibt eine Tpoint-Variable zurück.

Die x,y Werte von Tpoint geben die absoluten Bidschirmkoordinaten an.
Die kann man dann in Beziehung zur gewünschten Form bringen.
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#7

AW: Mausposition relativ zum Fenster ermitteln

  Alt 18. Jan 2013, 14:51
Ok, das muss ich ausprobieren, danke...

Edit: Alles klar, das kommt dem schon sehr nahe, danke. Jetzt muss ich bloß noch die Koordinaten des Fensters und so weiter ins Spiel bringen, dann scheint alles zu klappen...
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps (18. Jan 2013 um 15:06 Uhr) Grund: Erleichterung
  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 21:42 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