express++ DCGET KEYBLOCK

Moderator: Moderatoren

Antworten
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

express++ DCGET KEYBLOCK

Beitrag 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
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2471
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 103 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9390
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 363 Mal
Kontaktdaten:

Beitrag 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)} 
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9390
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 104 Mal
Danksagung erhalten: 363 Mal
Kontaktdaten:

Beitrag 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.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

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