Seite 1 von 1

express++ DCGET KEYBLOCK

Verfasst: Fr, 20. Jul 2007 13:49
von Alfred
Hallo,

Code: Alles auswählen

@ 14,68 DCGET Buchtext ;
GETOBJECT oDCBtxt ;
TABSTOP ;
TABGROUP XBP_WITHIN_GROUP ;
KEYBLOCK {|xbeK_Enter,b,oDCBtxt|myfunc1()}
gleichgültig welche Taste ich drücke, wird myfunkc1() ausgelöst.

Ich möchte die ENTER-Taste abfangen und einen SETAPPFOCUS(oDCPUSH1)
setzen.

Gruß
Alfred

Verfasst: Sa, 21. Jul 2007 14:34
von Koverhage
ALfred,

wenn ich die Doku richtig verstehe wird der Codeblock bei jedem Tastendruck aufgerufen. Ausserdem werden für Myfunc Parameter erwartet.
Dort must Du feststellen (dc_readguilastkey(oGetlist) mit welcher Taste das Eingabefeld verlassen wurde.

Klaus

Verfasst: Sa, 21. Jul 2007 14:53
von Tom
KEYBLOCK wird immer ausgelöst, wenn irgendeine Taste betätigt wurde, und es übergibt als ersten Parameter an den Codeblock die Taste, die betätigt wurde. Du müßtest den Codeblock also dieserart ändern:

Code: Alles auswählen

KEYBLOCK {|[color=red]nKey[/color],b,oDCBtxt|myfunc1([color=red]nKey[/color])} 
In myfunc1() müßtest Du dann abfragen, ob nKey xbeK_Enter entsprach:

Code: Alles auswählen

FUNCTION myfunc1(nKey)
IF nKey = xbeK_Enter
  * was machen ...
Kompakter:

Code: Alles auswählen

KEYBLOCK {|[color=red]nKey[/color],b,oDCBtxt|If(nKey=xbeK_Enter,myfunc1([color=red]nKey[/color]),nil)} 

Verfasst: Sa, 21. Jul 2007 21:09
von Alfred
Hallo Tom,

vielen Dank. Nun wird myfunc1 aufgerufen.

SetAPPFOCUS(oDCPUSH1) wird jedoch nicht ausgeführt und der Cursor
springt auf das 1. Get-Feld(Mein Feld Buchtext ist das letzte Get-Feld).
Es sieht also so aus, als ob die eingebaute ENTER-Routine nach myfunc1
noch ausgeführt wird.

Gruß
Alfred

Verfasst: Sa, 21. Jul 2007 21:26
von Tom
Hallo, Alfred.

Das ist möglich, weil anschließend an Deine Funktion noch die im DC_Reader implementierten Funktionen ausgeführt werden, was den Focus automatisch aufs nächste Get setzt. Versuch doch mal bitte, Deine MyFunc1() "DCGUI_NONE" retournieren zu lassen.

Verfasst: So, 22. Jul 2007 11:24
von Alfred
Hallo Tom,

vielen Dank für deine Anregungen.

Hier die Lösung für mein Problem:

Code: Alles auswählen

KEYBLOCK{|nKey,b,oDCGETBtxt|if(nKey=13,DC_ReadGuiEvent(DCGUI_MOVE_DOWN,GetList),nil)} 

Gruß
Alfred :D