Mausposition abfragen
Moderator: Moderatoren
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Mausposition abfragen
Wie kann ich innerhalb meines Programmes die Mausposition relativ zu meinem Programmfenster abfragen?
Ich möchte ein Kontextmenü immer an der Mausposition öffnen. GetPointerPos() liefert mir immer die Postion relativ zum Bildschirm, funktioniert also nur bei maxmierten Fenster auf dem ersten Bildschirm.
Ich möchte ein Kontextmenü immer an der Mausposition öffnen. GetPointerPos() liefert mir immer die Postion relativ zum Bildschirm, funktioniert also nur bei maxmierten Fenster auf dem ersten Bildschirm.
Gruß
Markus
Markus
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Mausposition abfragen
Zieh' doch den Koordinatenursprung Deines Fensters davon ab - dann hast Du den gewünschten Wert!
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Mausposition abfragen
Wie Martin schreibt: oDialog:CurrentPos() liefert Dir als {x,y} die Fensterposition bezogen auf die Ursprungskoordinaten. Wenn Du x und y von den jeweils korrespondierenden Koordinaten abziehst, hast Du die relative Position bezogen auf das Fenster.
Herzlich,
Tom
Tom
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Mausposition abfragen
Danke, leider funktioniert da irgendetwas nicht richtig. Ich habe jetzt zu Testzwecken extra die Dialogvariable umbenannt und als PUBLIC angelegt
oDLgPublic:currentPos() liefert mir nach der Erstellung des Dialoges richtige Werte: {723,905} oder eben andere Werte wenn ich vor dem Öffnen des Dialoges das Hauptfenster verschiebe.
Nur in meiner Methode (oder Funktion)
liefert oDLgPublic:currentPos() IMMER {-8,-6} egal wohin ich das Fenster (Hauptprogramm) verschiebe).
oDLgPublic:currentPos() im testweise im Eventloop alle 10 Sekunden ausgegeben liefert auch immer korrekte Werte.
Jetzt mache ich mir mal einen Kaffee...
oDLgPublic:currentPos() liefert mir nach der Erstellung des Dialoges richtige Werte: {723,905} oder eben andere Werte wenn ich vor dem Öffnen des Dialoges das Hauptfenster verschiebe.
Nur in meiner Methode (oder Funktion)
Code: Alles auswählen
METHOD DisSQLsubClass:OnEvent(EventID) // Event wird von einem ActiveX Control ausgelöst
oDLgPublic:currentPos() im testweise im Eventloop alle 10 Sekunden ausgegeben liefert auch immer korrekte Werte.
Jetzt mache ich mir mal einen Kaffee...
Gruß
Markus
Markus
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Mausposition abfragen
So klappt das jetzt. Ich kann diesen Dialog auf 3 Arten öffnen, normal innerhalb des Programmes, als freies Fenster, also nicht nur innerhalb des Programmes, und als freies Fenster über den ganzen Bildschirm. So kann man dieses Fenster problemlos auf einen 2 und 3 Monitor legen.
Danke!
Code: Alles auswählen
...
aWinPos := oMyDlg:currentPos()
aPos := GetPointerPos()
IF lOwnWindow .OR. lFullScreen // Eigenes "freies" Fenster oder eigenes Fenster Fullscreenmode
aPos[1]:= aPos[1] - aWinPos[1]
aPos[2]:= aPos[2] - aWinPos[2]
else
aAppPos := SetAppWindow():currentPos() // läuft als Fenster innerhalb der MainApp
aPos[1]:= aPos[1] - aAppPos[1] -aWinPos[1]
aPos[2]:= aPos[2] - aAppPos[2] -aWinPos[2]
endif
oMenu:popUp( oMyDlg, aPos )
Gruß
Markus
Markus
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Mausposition abfragen
Frage : wie sieht bei dir GetPointerPos() aus ?satmax hat geschrieben:Code: Alles auswählen
aPos := GetPointerPos()
gruss by OHR
Jimmy
Jimmy
- satmax
- 1000 working lines a day
- Beiträge: 831
- Registriert: Do, 02. Dez 2010 19:34
- Wohnort: Biberbach in Österreich
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Mausposition abfragen
Ist orignal von XBase++, AUszug aus der Hilfe:
oder was meinst Du?GetPointerPos()
Determines the position of the mouse pointer.
GetPointerPos() --> <aPos>
Return
GetPointerPos() returns an array containing two elements: {xPos,yPos}. This array contains the x and y coordinates of the mouse pointer.
Description
Function GetPointerPos() can be used to determine the current position of the mouse pointer. The pointer position is specified relative to the desktop object, see the function AppDesktop().
Gruß
Markus
Markus
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Mausposition abfragen
uuuups ... GetPointerPos() kannte ich noch gar nicht obwohl in c:\ALASKA\XPPW32\Source\SYS\xbparts.prg vorhandensatmax hat geschrieben:Ist orignal von XBase++, Auszug aus der Hilfe:
...
oder was meinst Du?
gruss by OHR
Jimmy
Jimmy