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.