PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [X] Maustasten in Pascal abfragen



roadracer
19-04-2012, 19:09
Hallo,
ich möchte gerne in Pascal (d.h. nur mit diesen Units http://wiki.freepascal.org/X11) den Status der Maustasten abfragen, also wissen ob z.B. die linke oder die rechte gedrückt ist. Unter Windows kann man dazu
getkeystate(VK_LBUTTON) o.ä. abfragen. Weiß jemand wie das am einfachsten geht?

undefined
20-04-2012, 13:35
Wie der Link Pfad es schon vermuten lässt ist X11 dafür zuständig.
Siehe /usr/include/X11/XKBlib.h


#include <stdlib.h>
#include <stdio.h>
#include <X11/XKBlib.h>
#include <X11/extensions/XKB.h>

int main(void)
{
Display* d = XOpenDisplay(0);
if (d)
{
unsigned n;
XkbGetIndicatorState(d, /* dpy */
XkbUseCoreKbd, /* deviceSpec */
&n); /* pStateRtrn */

printf ( ( (n & 1) ? "Capslock ON\n" : "Capslock OFF\n" ) );
}
return EXIT_SUCCESS;
}


Eine Weitere Variante wäre mit XGrabPointer...
Siehe in einer meiner QX11Grab Klassen (http://gitweb.hjcms.de/cgi-bin/index.cgi/qx11grab/tree/src/tapping/desktoptapping.cpp).

roadracer
20-04-2012, 14:32
Okay, deine Funktion fragt jetzt den status von Capslock ab, aber wie mache ich das für die Muastasten? Tut mir leid, wenn ich dich bitte mir alles vorzukauen, aber ich hab kein plan von X :o

undefined
20-04-2012, 14:49
Siehe meinen eingefügten Link.
Ein einfaches abfragen wie oben im Quelltext wird bei der Maus nichts bringen weil es immer false zurück geben wird.
Hier mußt du mit einer Schleife und XEvent Arbeiten.

roadracer
20-04-2012, 18:47
Es tut mir Leid, aber ich habe keinen Plan was du mir hier mit 3 Funktionen, von denen zumindest eine schon mal nicht funktioniert, mitteilen möchtest. Wie gesagt, ich habe _überhaupt_ keine _Ahnung von X und möchte nur wissen ob die linke oder rechte Maustaste gedrückt ist.
Kannst du mir nicht einfach 15 Zeilen C-Code vorkauen, den ich dann nur noch nach Pascal übersetzen muss? ;)