Sprung ins erste Getfeld

Moderator: Moderatoren

Gesperrt
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Sprung ins erste Getfeld

Beitrag 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
Benutzeravatar
Schubi
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 139
Registriert: Mi, 05. Okt 2005 15:10
Wohnort: Wiesloch
Hat sich bedankt: 5 Mal

Beitrag 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).
Grüße Steffen
Benutzeravatar
Bertram Hansen
Foren-Moderator
Foren-Moderator
Beiträge: 1015
Registriert: Di, 27. Sep 2005 8:55
Wohnort: 51379 Leverkusen
Hat sich bedankt: 28 Mal
Danksagung erhalten: 20 Mal
Kontaktdaten:

Beitrag von Bertram Hansen »

Hallo Steffen,

vielen Dank für den Tip.
:wave:
Gruß Bertram
http://www.tobax.de
Mitglied der XUG Cologne
Mitglied der XUG Osnabrück
Beisitzer des Deutschsprachige Xbase-Entwickler e.V.

Solange Kakaobohnen an Bäumen wachsen ist Schokolade Obst!
Gesperrt