Seite 1 von 1

Sprung ins erste Getfeld

Verfasst: Mo, 31. Okt 2005 12:14
von Bertram Hansen
Hallo,

ich versuche gerade zusammen mit dem Zusatztool eXPress++ von Roger Donnay einen Sprung in das 1.Getfeld auf verschieden Arten zu realisieren. Dazu habe ich ein kleines Test Programm geschrieben. Leider klappt der Sprung in das 1.Getfeld nicht direkt über die Taste F5 (Funktion SETKEY). Das 1.Get wird nicht richtig aktiviert. Alle anderen Wege, über das Menü, über einen PushButton oder über den Eventhandler funktionieren. Testen kann man das auch ganz gut, wenn man mit ALT+Tab nach dem Sprung ins 1.Get eine andere Applikation in den Vordergrund holt und mit ALT+Tab wieder das Testprogramm aktiviert.
Ich benutze noch die Alaska Version 1.82.
Wer hat dafür eine Lösung?


Gruß
Bertram


Beispielcode:

Code: Alles auswählen

#include "dcdialog.ch"
#include "appevent.ch" 
#include "inkey.ch" 

PROC AppSys()
RETURN

FUNCTION main()
LOCAL oMenuBar
PRIVATE GetList := {}, GetOptions
PRIVATE nKdnr, cName, cStr, cPlz, cOrt

SETKEY(K_F5, {|| first_get()})     
DC_SetKeyActive(.T.)

DCMENUBAR oMenuBar
DCMENUITEM "Menü: Sprung ins 1.Get" PARENT oMenuBar ACTION {||first_get()}

// Leer die Felder
leere_get_felder()

@ 08, 10 DCSAY "Kunden-Nr.:" PICTURE "XXXXXXXXXXX" SAYSIZE 16 
@ 10, 10 DCSAY "Name1     :" PICTURE "XXXXXXXXXXX" SAYSIZE 16 
@ 12, 10 DCSAY "Strasse   :" PICTURE "XXXXXXXXXXX" SAYSIZE 16
@ 14, 10 DCSAY "PLZ/Ort   :" PICTURE "XXXXXXXXXXX" SAYSIZE 16

@ 08, 28 DCGET nKdnr  PICTURE "999999"                          GETID "nKdnr" 
@ 10, 28 DCGET cName  PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  GETID "cName" 
@ 12, 28 DCGET cStr   PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  GETID "cStr"   
@ 14, 28 DCGET cPlz   PICTURE "99999"                           GETID "cPlz"    
@ 14, 37 DCGET cOrt   PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  GETID "cOrt"  

@ 16, 05 DCSAY "-------------------------------------------------------------" PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" SAYSIZE 90
@ 18, 10 DCPUSHBUTTON CAPTION 'Button: Sprung ins 1.Get'  SIZE 30,2  ACTION {||first_get()}
@ 21, 10 DCSAY "Taste ESC/Sprung ins 1.Get (über den HANDLERBLOCK)" PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" SAYSIZE 80
@ 23, 10 DCSAY "Taste F5/Sprung ins 1.Get (über die Funktion SETKEY)" PICTURE "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" SAYSIZE 80

DCGETOPTIONS HILITEGETS GRA_CLR_RED     ;
      GETFONT '10.Courier New'          ;
      SAYFONT '10.Courier New'          ;
      TABSTOP                                                       // TAB bewegt durch die Eingabefelder. 

DCADDGETOPTION                          ;
     NOMINBUTTON                        ;
     NOMAXBUTTON                        ;
     BORDER  XBPDLG_DLGBORDER

DCREAD GUI FIT SETAPPWINDOW             ;
     OPTIONS GetOptions                 ;
     TITLE 'Test Dialog'                ;
     HANDLERBLOCK {|nEvent, mp1, mp2, oXbp, oDlg, aGetlist, aRef, lOk| MyHandler(nEvent, mp1, mp2, oXbp, oDlg, aGetlist, @aRef, lOk)}

RETURN nil

FUNCTION MyHandler ( nEvent, mp1, mp2, oXbp, oDlg, aGetList, aRef, lOk )
LOCAL cRet := DCGUI_NONE

IF nEvent = xbeP_Keyboard 
   IF mp1 == xbeK_ESC
      leere_get_felder() 
      DC_GetRefresh(aGetList)
      cRet := DCGUI_MOVE_TOP   // Sprung ins 1.Getfeld
   ENDIF
ENDIF       
RETURN cRet

FUNCTION first_get()
leere_get_felder()
DC_GetRefresh(GetList)
SetAppFocus(DC_GetObject(GetList, "nKdnr"))
RETURN .T.

FUNCTION leere_get_felder()
nKdnr := 0
cName := SPACE(30)
cStr  := SPACE(30)
cPlz  := SPACE(5)
cOrt  := SPACE(30)      
RETURN .T.
Projektfile

Code: Alles auswählen

//
// Project - Definition - File created by PBUILD Version 1.0
// Date: 14.07.98 Time: 19:18:55
//

[PROJECT]
    COMPILE       = xpp
    COMPILE_FLAGS = /q
    DEBUG         = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = /PM:PM /FORCE:UNRESOLVED
    RC_COMPILE    = arc
    RC_FLAGS      = /v
    PROJECT.XPJ

[PROJECT.XPJ]
    DIALOG.EXE

[DIALOG.EXE]
// $START-AUTODEPEND
    COLLAT.CH
    COMMON.CH
    GET.CH
    GRA.CH
    INKEY.CH
    MEMVAR.CH
    NATMSG.CH
    PROMPT.CH
    SET.CH
    STD.CH
    XBP.CH
    DCLIPX.LIB
    DIALOG.OBJ
// $STOP-AUTODEPEND
    DIALOG.PRG

Verfasst: Di, 01. Nov 2005 11:43
von Schubi
Hallo Bertram,

solche Dinge wie SETKEY funktionieren nicht in der GUI.

Anstelle von
//SETKEY(K_F5, {|| first_get()})
//DC_SetKeyActive(.T.)

schreibste Du
DCHOTKEY xbeK_F5 ACTION {|| first_get()}

oder Du wertest einfach das Tastaturereignis xbeK_F5 im Handler aus (so wie Du es schon mit ESC machst).

Verfasst: Mi, 02. Nov 2005 9:03
von Bertram Hansen
Hallo Steffen,

vielen Dank für den Tip.