Cursor-/XBP-Position

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Cursor-/XBP-Position

Beitrag von Jan »

Hallo,

gibt es eine Möglichkeit, die Position des Cursors oder die des aktiven XB-Parts festzustellen?

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
ich weiß jetzt nicht, worauf Du genau hinaus willst. Aber wenn Du wissen möchtest, welches Eingabeelement als letztes (bzw. aktuell) den Eingabefokus hat, so solltest Du Dir mal den Callback :setInputFocus anschauen - mit dessen Hilfe und einer Klassenvariable kannst Du Dir immer "merken", welches Element gerade aktiv ist, bzw. war (wenn Du z.B. nach Schließen eines Hinweisfensters wieder das zuletzt aktive Control aktivieren willst).
Ansonsten hilft Dir vielleicht :hasInputFocus() weiter - einfach durch die Getlist laufen und bei jedem Element prüfen.

Viele Grüße,
Martin
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Martin,

worauf ich hinaus will ist im Prinzip ganz einfach: Ich möchte wissen, wo der Mauscursor gerade steht. Zur Not würde es mir reichen wenn ich wüsste, wo der Mauszeiger gerade steht. Lieber wäre mir aber, wenn ich die Koordinaten des XB-Parts haben könnte, über dem die Maus gerade steht.

Den Cursor bekomme ich im Prinzip ganz einfach raus, es ist der erste Parameter von AppEvent(). Das ganze hat nur einen Haken: Wenn ich das aufrufe lande ich in der Endlosschleife der AppEvent-Abfrage der aufrufenden Funktion. Und beende damit einfach so die Funktion, in der ich die Mausposition herausfinden möchte. Komme also garnicht erst weiter bis zur Auswertung.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmm,
vielleicht hilft Dir dann ja der :motion()-callback weiter?

Viele Grüße,
Martin
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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:

Beitrag von Tom »

Hallo, Martin.
vielleicht hilft Dir dann ja der :motion()-callback weiter?
Das sollte er. oXbp ist ein beliebiges Xbase-Part:

Code: Alles auswählen

oXbp:motion := {|a,b,o|MyFunction(a,o)}

...

FUNCTION MyFunction(a,o)
* a enthält das Positionsarray (bezogen auf o), o eine Referenz auf das ;
   Objekt

RETURN NIL 
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Tom,
deswegen meinte ich das ja auch - aber ob er damit sein Problem vernünftig gelöst bekommt :dontknow:

Viele Grüße,
Martin
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Martin
Martin hat geschrieben:aber ob er damit sein Problem vernünftig gelöst bekommt
Mal sehen. Sieht jedenfalls sehr gut für mich aus. Versuch ich am Wochenende und gebe dann Bescheid.

Auf jeden Fall wäre ich "nur" mit Deiner Angabe zu :motion nicht weitergekommen. Der Hinweis von Tom, wie ich das Ding einsetzen sollte, ist da schon sehr hilfreich.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
Jan hat geschrieben:Auf jeden Fall wäre ich "nur" mit Deiner Angabe zu :motion nicht weitergekommen. Der Hinweis von Tom, wie ich das Ding einsetzen sollte, ist da schon sehr hilfreich.
OK - ich gelobe Besserung! Ich bin davon ausgegangen, dass Du Dir die Beschreibung zu dem Callback in der Xbase++-Dokumentation anschaust - ich wollte Dir ja nur einen Denkanstoß geben :wink:

Viele Grüße,
Martin
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Moin Martin,

entschuldige bitte. Ich meinte das nicht böse!

Das Problem liegt darin, daß ich noch immer Probleme mit OOP habe. Mit einigen Dingen komme ich inzwischen ganz gut klar, aber viel zu oft fehlt mir einfach noch der Durchblick. Da bin ich einfach noch zu Clipper-behaftet.

Vielleicht hätte ich das nach eingehendem Studium der Onlinehilfe wirklich hinbekommen, wie Du vorausgesetzt hast. Allerdings hatte ich bis jetzt noch keine Zeit, mir die anzuschauen, und daher war der Hinweis von Tom für ich einfach Gold wert (oder zumindest sehr sehr viel Zeit).

Also nicht Dein Fehler, wenn Du das entsprechende Wissen bei mir vorausgesetzt hast.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
Jan hat geschrieben:entschuldige bitte. Ich meinte das nicht böse!
das hatte ich auch nicht so aufgefasst, keine Angst :!:

Viele Grüße,
Martin
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Tom,

irgendwie stehe ich jetzt auf dem Schlauch.

Woher bekomme ich denn jetzt die Position? Ich brauche die (wenn irgendwie möglich) in der Funktion, wo ich

Code: Alles auswählen

oXbp:motion := {|a,b,o|MyFunction(a,o)} 
aufrufe. Aber irgendwie bekomme ich das nicht hin.

Ein total hilfloser und gefrusteter Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
gerade eben hat Günter Beyes auf eine entsprechende Anfrage in der Newsgroup von Alaska public.xbase++.gui entsprechend gepostet:
Günter Beyes hat geschrieben:Dies sollte das Win32 API-Pendant zu dem .NETs System.Windows.Forms.Control.MousePosition sein.
Beachte jedoch, dass die Funktion die Position in Pixeln von der oberen linken Ecke liefert.

Günter

----

Code: Alles auswählen

FUNCTION GetCursorPos()

STATIC GetCursorPos

LOCAL sPoint := replicate(chr(0),8)

IF GetCursorPos = NIL
   GetCursorPos := DllPrepareCall("user32.dll", DLL_STDCALL,;
                   "GetCursorPos" )
ENDIF

DllExecuteCall( GetCursorPos, @sPoint )

RETURN { Bin2L( substr(sPoint, 1, 4) ),;  // x coordinate
         Bin2L( substr(sPoint, 5, 4) ) ;  // y coordinate
       }
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Beachte jedoch, dass die Funktion die Position in Pixeln von der oberen linken Ecke liefert.
Wobei die Frage bleibt, welche obere linke Ecke gemeint ist, die vom Fenster oder die von der drawingarea, oder gar die vom MAIN-Window, wenn die Funktion sich auf die ganze Anwendung bezieht ?
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
einfach ausprobieren. :wink:

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.
Antworten