Event-Code bei Tastenkombination
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Event-Code bei Tastenkombination
Hallo,
gibt es eine Möglichkeit, den Eventcode für eine Tasten-Kombination auszuwerten?
Ich würde gerne um die Programm-Steuerung auch über die Tastatur zu ermöglichen mit Tasten-Kombinationen arbeiten.
Beispiel: Strg+S+A um eine Datenbank nach Feldinhalt A zu sortieren
Wenn ich mir den Eventwert anzeigen lasse wird der aber für jeden Tastendruck einzeln angezeigt.
Für das Beispiel oben also erst 19 (=Strg+S) dann 1(=Strg+A).
Kann ich das irgendwie kombinieren, dass die Tasten gemeinsam ausgewertet werden?
gibt es eine Möglichkeit, den Eventcode für eine Tasten-Kombination auszuwerten?
Ich würde gerne um die Programm-Steuerung auch über die Tastatur zu ermöglichen mit Tasten-Kombinationen arbeiten.
Beispiel: Strg+S+A um eine Datenbank nach Feldinhalt A zu sortieren
Wenn ich mir den Eventwert anzeigen lasse wird der aber für jeden Tastendruck einzeln angezeigt.
Für das Beispiel oben also erst 19 (=Strg+S) dann 1(=Strg+A).
Kann ich das irgendwie kombinieren, dass die Tasten gemeinsam ausgewertet werden?
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo,
verwende einen Keyboard-Handler, der sich intern merkt, dass (und zu welchem Zeitpunkt) Strg+S gedrückt worden ist. Wenn innerhalb kurzer Zeit eine bestimmte andere Strg-Tastenkombination folgt, löst du die gewünschte Aktion aus.
Viele Grüße
Günter
verwende einen Keyboard-Handler, der sich intern merkt, dass (und zu welchem Zeitpunkt) Strg+S gedrückt worden ist. Wenn innerhalb kurzer Zeit eine bestimmte andere Strg-Tastenkombination folgt, löst du die gewünschte Aktion aus.
Viele Grüße
Günter
Code: Alles auswählen
oBrowse:keyboard := {|n,u,oBrowse|StrgKeyboardHandler( oBrowse, n )}
FUNCTION StrgKeyboardHandler( oXbp, nKey )
static Key19 := .F.
static key19time := 0
local lHandled := .F.
if ! Key19 .and. nKey = 19 // Strg+S
Key19 := .T.
Key19Time := seconds()
lHandled := .T.
elseif Key19 .and. nKey = 1 .and. seconds() - key19time < 1
lHandled := .T.
Key19 := .F.
key19time := 0
MsgBox( "Sortieren nach Feld A" )
else
Key19 := .F.
key19time := 0
endif
return lHandled
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Danke für die Antwort - nur, wo baue ich das ein?
Mein Event-Loop sieht z.Zt. so aus:
Mein Event-Loop sieht z.Zt. so aus:
Code: Alles auswählen
DO WHILE .T.
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:HandleEvent( nEvent, mp1, mp2 )
if nEvent == xbeP_Keyboard // nur wenn Taste gedrückt
if mp1 == xbeK_P_CTRL_PLUS
plus()
elseif mp1 == xbeK_P_CTRL_MINUS
minus()
elseif mp1 == xbeK_CTRL_S
msgbox( str(nEvent,10,0), str(mp1,10,0) ) // Test
endif
ENDIF
ENDDO
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Hallo,
schau mal in appevent.ch, da stehen alle Keycodes drin.
lg
Rudolf
schau mal in appevent.ch, da stehen alle Keycodes drin.
lg
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Hallo Jan,
hast recht, sorry, hab nicht genau geschaut
Grüsse
Rudolf
hast recht, sorry, hab nicht genau geschaut
Grüsse
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Peter,
Viele Grüße
Günter
Wenn nur ein bestimmtes Xbp auf diese Tastenkombinationen reagieren soll, im Keyboardhandler-Slot des XBPs. In der Eventloop, wenn alle Xbps darauf reagieren sollen, vielleicht so wie unten.nur, wo baue ich das ein?
Mein Event-Loop sieht z.Zt. so aus: ...
Viele Grüße
Günter
Code: Alles auswählen
#include "appevent.ch"
#include "inkey.ch"
DO WHILE .T.
nEvent := AppEvent( @mp1, @mp2, @oXbp )
if nEvent == xbeP_Keyboard // nur wenn Taste gedrückt
lHandled := StrgKeyboardHandler( oXbp, mp1 )
else
lHandled := .F.
endif
if ! lHandled
oXbp:HandleEvent( nEvent, mp1, mp2 )
endif
enddo
FUNCTION StrgKeyboardHandler( oXbp, nKey )
static CtrlS := .F.
static CtrlSTime := 0
local lHandled := .F.
if ! CtrlS .and. nKey = K_CTRL_S
CtrlS := .T.
CtrlSTime := seconds()
lHandled := .T.
elseif CtrlS .and. nKey = K_CTRL_A .and. seconds() - CtrlSTime < 1
lHandled := .T.
CtrlS := .F.
CtrlSTime := 0
MsgBox( "Sortieren nach Feld A" )
else
CtrlS := .F.
CtrlSTime := 0
lHandled := .T.
if mp1 == xbeK_P_CTRL_PLUS
plus()
elseif mp1 == xbeK_P_CTRL_MINUS
minus()
else
lHandled := .F.
endif
endif
return lHandled
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
ja, so ähnlich habe ich es jetzt gelöst - funktioniert einwandfrei.
Das Einzige was mir aufgefallen ist: wenn ich die Taste Strg+i abfrage, funktioniert der Wechsel zwischen SLE`s mit der Tab-Taste nicht mehr
Gut ist nicht so tragisch - ich habe eine andere Tastenkombination verwendet. Seltsam ist es aber trotzdem.
Das Einzige was mir aufgefallen ist: wenn ich die Taste Strg+i abfrage, funktioniert der Wechsel zwischen SLE`s mit der Tab-Taste nicht mehr
Gut ist nicht so tragisch - ich habe eine andere Tastenkombination verwendet. Seltsam ist es aber trotzdem.
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland