Mausposition abfragen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
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

Beitrag von satmax »

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.
Gruß
Markus
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Mausposition abfragen

Beitrag von Martin Altmann »

Zieh' doch den Koordinatenursprung Deines Fensters davon ab - dann hast Du den gewünschten Wert!

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Mausposition abfragen

Beitrag von Tom »

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
Benutzeravatar
satmax
1000 working lines a day
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

Beitrag von satmax »

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)

Code: Alles auswählen

METHOD DisSQLsubClass:OnEvent(EventID)  // Event wird von einem ActiveX Control ausgelöst
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... :banghead:
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
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

Beitrag von satmax »

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.

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 )
Danke!
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mausposition abfragen

Beitrag von AUGE_OHR »

satmax hat geschrieben:

Code: Alles auswählen

aPos := GetPointerPos()
Frage : wie sieht bei dir GetPointerPos() aus ?
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
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

Beitrag von satmax »

Ist orignal von XBase++, AUszug aus der Hilfe:
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().
oder was meinst Du?
Gruß
Markus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Mausposition abfragen

Beitrag von AUGE_OHR »

satmax hat geschrieben:Ist orignal von XBase++, Auszug aus der Hilfe:
...
oder was meinst Du?
uuuups ... GetPointerPos() kannte ich noch gar nicht obwohl in c:\ALASKA\XPPW32\Source\SYS\xbparts.prg vorhanden
gruss by OHR
Jimmy
Antworten