DCBROWSE - Edit - Vorbelegen mit Taste

Moderator: Moderatoren

Antworten
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 389
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Armin »

Hallo zusammen,

ich habe ein DCBROWSE, in dem man editieren kann. Nun möchte ich, dass wenn der Benutzer auf einem editierbaren Feld eine Taste drückt (in numerischem Feld eine Zahl), das Feld zum Editieren aufgeht und der Wert der Taste sofort in das GET geschrieben wird.
So funktioniert das auch bei den CRT-Prgrammen (wie z.B. bei dbu). Im Handler vom DCREAD GUI schalte ich per PostAppEvent(xbeBRW_ItemSelected,,,oXbp) auch in den Editmodus.
Aber den Wert der Taste bekomme ich nicht in das Feld. Ich will ja den Wert noch nicht im Ursprungsarray haben - nur im Editbuffer... so dass das Undo funktioniert.
Ich habe jetzt schon einiges probiert... hat da jemand eine Idee, wie man das am besten macht?

Grüße, Armin

hier ein paar Codeschnipsel:

Code: Alles auswählen


        @ 17,1 DCBROWSE oBrowse DATA aLFS SIZE 176,6 ;
              PRESENTATION DC_BrowPres() ;
              EDIT xbeBRW_ItemSelected 
              MODE DCGUI_BROWSE_EDITACROSSDOWN ;
              ID 'BROWSE' ;
              HANDLER S16HANDLER1 REFERENCE aLFS;
              POINTER n

        DCBROWSECOL ELEMENT 6  PARENT oBrowse HEADER 'VPNr.'          WIDTH len(str(VERSTF->VEVPNR))  EDITOR "edVPNR" VALID {|c| S16VPNR(c,oBrowse,aLFS,n)}//
       
       @ nil,nil DCGET nVPNR PICTURE ALFELD("VPNR") GETID "edVPNR"

        DCREAD GUI ;
           HANDLERBLOCK bHandler2;
           ....


function S16HANDLER2(nEvent, mp1, mp2, oXbp)
if nEvent==xbeP_Keyboard
   if mp1>=48 .and. mp1<=57    // Zahlen
      if valtype(oXbp)=="O"
         if IsMemberVar(oXbp,"colpos") .and. oXbp:colpos == 6    // VPNR
            PostAppEvent(xbeBRW_ItemSelected,,,oXbp)             // schaltet in den Editmode

Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 389
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Armin »

Hallo zusammen,

hatte noch niemand diese Anforderung? Oder habe ich das Problem nicht klar formuliert....

Es geht eigentlich nur darum, wenn man ein DCBROWSE hat und auf einer Zelle steht und anfängt zu tippen, dass dann in den Editmodus gewechselt wird und die gedrückte Taste gleich im Editierbuffer ist...

Ich habe da schon einige Verrenkungen hinter mir und dachte, das wäre eine Art Standardanforderung. Vielleicht ist es auch so einfach, dass niemand glaubt, dass ich ein Problem damit habe...

Grüße, Armin
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Koverhage »

Was passiert, wenn Du das so machst ?

PostAppEvent( xbeP_Keyboard, xbeK_RETURN+mp1,, oXbp )
Gruß
Klaus
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 389
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Armin »

Hallo Klaus,

vielen Dank für das Mitdenken.

Code: Alles auswählen

PostAppEvent( xbeP_Keyboard, xbeK_RETURN+mp1,, oXbp )
geht leider auch nicht. Da geht er nicht mal mehr in den Editmodus.

:(
Armin
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Tom »

Hallo, Armin.

Die EDIT-Klausel von DCBROWSE kennt zwei Parametertypen, nämlich <nEditEvent> als Verweis auf eine der Konstanten (DCGUI_BROWSE_EDIT...) oder <aEditEvent> als Array aus zwei Elementen. Das erste Element dieses Arrays wäre wieder eine der Konstanten (DCGUI_BROWSE_EDIT...) und das zweite ein Codeblock, der ausgewertet wird, wenn irgendeine Taste im Browse gedrückt wird. Dieser Codeblock bekommt den Tastenwert als Parameter ({|nKey|IrgendeineFunktion(nKey)}). Wenn der Block oder die Funktion darin einen gültigen Tastenwert liefert, startet das Zell-Editing mit diesen Zeichenwert - also genau das, was Du erreichen willst. Ich arbeitet nicht mit Cell-Editing, aber das dürfte die Lösung für Dein Problem sein. In der PostAppEvent-Variante müsstest Du dem ENTER-Event für das Auslösen des Editings ein zweites Event folgen lassen, und zwar ein Keyboard-Event für das Get-Objekt, das geöffnet wird. Dieses Objekt kennst Du aber in diesem Augenblick noch nicht, deshalb funktioniert das nicht.
Herzlich,
Tom
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 389
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Armin »

Hallo Tom,

herzlichen Dank - funktioniert! =D>

Code: Alles auswählen

              EDIT {xbeBRW_ItemSelected,{|nKey|TasteVorbelegen(nKey)} } ;

Code: Alles auswählen

function TasteVorbelegen(nKey)
// --------------------------------------------------------------------
// wird bei Schalten in den Editmodus ausgewertet
// wird nKey zurückgegeben, so wird dieser Wert in das Editfeld geschrieben!
// Wenn man das nicht will, dann muss NIL zurückgegeben werden
// Die Rückgabe kann auch ein Array mit mehreren Tasten sein!
// --------------------------------------------------------------------
local nTest

// nur gültige Tasten für Edit-Vorbelegung
if (nKey>=48 .and. nKey<=57) .or.  ;  /* Zahlen      */
   (nKey>=65 .and. nKey<=90) .or.  ;  /* Grossbuchstaben      */
   (nKey>=97 .and. nKey<=122) .or. ;  /* Kleinbuchstaben      */
   chr(nKey) $ "ÄÖÜäöüß"

   nTest := nKey
endif

return nTest
Dankbare Grüße, Armin
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Tom »

Freut mich! :D

(Ab und an ist es hilfreich, in die Doku zu schauen.)
Herzlich,
Tom
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 389
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: DCBROWSE - Edit - Vorbelegen mit Taste

Beitrag von Armin »

Hallo Tom,

die Doku habe ich an dieser Stelle schon mehrfach durchgelesen und habe es trotzdem nicht geblickt...

Grüße, Armin
Antworten