Seite 1 von 1

DCGET aus Array und Update [ERLEDIGT]

Verfasst: Mo, 26. Apr 2021 8:17
von Manfred
Bisher habe ich immer nur mit Speichervariablen gearbeitet, die ich dann jeweils ausgelesen/zurückgeschrieben habe in eine DBF.
jetzt habe ich aber ein Array, aus dem ich mir eine Eingabemaske erzeuge. Die einzelnen Arrayfelder dienen dabei als Eingabefelder für die DCGET.

Code: Alles auswählen

FOR nI := 1 TO Len(ar_get)
             @ ar_get[nI]:nOben,ar_get[nI]:nLinks DCSAY ar_get[nI]:text;
                                                 OBJECT oDialogZUsatz:oText;
                                                 PARENT oDialogZUsatz:oRahmenKopf;
                                                   SIZE 0
             IF ValType(ar_get[nI]:eingabe) <> "U"                              // es muß was drin stehen, sonst macht es wenig Sinn
                @ DCGUI_ROW,DCGUI_COL DCGET ar_get[nI]:eingabe;
                                     PARENT oDialogZUsatz:oRahmenKopf;
                                    PICTURE ar_get[nI]:picture;
                                    TABSTOP
             ENDIF
         NEXT
Meine Frage: Wie ist die verbindung vom Eingabefeld zum Array? Wie kommt der Wert aus dem Eingabefeld ins Array zurück? Wenn ich es ändere und dann das Feld verlasse passiert nichts. Was muß ich wie machen?

Re: DCGET aus Array und Update

Verfasst: Mo, 26. Apr 2021 10:04
von Koverhage
Was bedeutet es passiert nichts ?
Was steht im Array nach verlassen des GETs ?

Re: DCGET aus Array und Update

Verfasst: Mo, 26. Apr 2021 10:18
von brandelh
da war was mit einer Instanzvariable im GET System, die Xbase++ nicht unterstützt (oGet:subscript), da Xbase++ selbst das nicht benötigt. Ich aber schon ...
ich weiß es ist hier eXpress und ich weiß nicht ob das dein Problem ist, aber hier mein Code um die Info zu übergeben:

Code: Alles auswählen

          do while getnr=5

              for x := 1 to REZEIMAX

                y := 1

                @5+x,1  get rechnung[ x+offset , ARENUM ]  ;
                        picture "999"  when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,5  get rechnung[ x+offset , AANZ ]   ;
                        picture "@E 99.9"       valid rechn_n(rechnung) ;
                        when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,9  get rechnung[ x+offset , AANZ_ART ]     ;
                        picture "!"  when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,11 get rechnung[ x+offset , AARTNR ]     ;
                        picture "@!@S15"        valid rechn_n(rechnung) ;
                        when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,27 get rechnung[ x+offset , AA_BEZ ]     ;
                        picture "@S28"  when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,56 get rechnung[ x+offset , ACODE ]      ;
                        picture "!!"             valid rechn_n_code() ;
                        when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,59 get rechnung[ x+offset , APREIS ]     ;
                        picture "@E 99,999.99"   valid rechn_n(rechnung) ;
                        when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif
                @5+x,69 get rechnung[ x+offset , AGES_PREIS ] ;
                        picture "@E 999,999.99"  valid rechn_n(rechnung) ;
                        when springen(rechnung)
                        #ifdef __XPP__
                           aTail(getlist):subscript := {x + Offset, y++}
                        #endif

              next

              setcursor(1)
              read
              setcursor(0)

Re: DCGET aus Array und Update

Verfasst: Mo, 26. Apr 2021 10:23
von Manfred
Koverhage hat geschrieben: Mo, 26. Apr 2021 10:04 Was bedeutet es passiert nichts ?
Was steht im Array nach verlassen des GETs ?
wenn ich das Array abfrage direkt nach dem Verlassen des DCREAD GUI, also kurz vor dem Return, dann steht da immer noch der Ursprungswert drin, der dort stand, als das Array an die Maske übergeben wurde. es wird also nicht automatisch aktualisiert.

Code: Alles auswählen

FUNCTION al_edit_var_neu(ar_get,apos,agruppe,xpush,abig,ex_ok,x_syspush,nZeilen)
         LOCAL aButton       := {;
                                 {"Übernehmen",,,{|| DC_ReadGuiEvent(DCGUI_EXIT_ABORT,getlist)},,,,,"Wert übernehmen"},;
                                 {"Abbruch"   ,,,{|| quit_edit(ar_get)},,,,"{|| ." + Transform(ex_ok,"L") + ". }","Abbruch des Vorgangs"};
                                 }
         LOCAL bDatalink
         LOCAL cRahmenTitel  := aGruppe[1,3]
         LOCAL cTitel        := aGruppe[1,4] + oVtPara:cVersion
         LOCAL getlist       := {}
         LOCAL GetOptions
         LOCAL nI
         LOCAL oDialog       := NIL
         LOCAL oDialogZUsatz := mk_dialog():new()
         LOCAL oLocal_style  := Local_style():new():initvaria(oVtPara:us_font_input)
         LOCAL p_gross       := {0,0}
         LOCAL zbig          := {}
         LOCAL zzbreit       := 8
         LOCAL zzhoch        := 16

         MEMVAR oSysPara
         MEMVAR oVtPara
         MEMVAR xx_font_input                                                   // hier unbekannt

         DEFAULT ex_ok   TO .T.                                                 // für die ANzeige der einelnen Pushbutton-
         DEFAULT nZeilen TO Len(ar_get)*2

         oDialogZusatz:standardRahmenKopf(aGruppe[1,3],,@getlist,.F.,,,,.T.,nZeilen)
         xx_font_input := oVTpAra:us_font_input

         zbig    := string_big_text( Replicate("M",100) , xx_font_input )
         zzhoch  := zbig[2]
         zzbreit := Round((zbig[1] / 100),0)
         p_gross := { zzbreit*20 , zzhoch }
********************************************************************************
         aButton[1,2] := p_gross[1]
         aButton[2,2] := p_gross[1]
         aButton[1,3] := p_gross[2]*1.3
         aButton[2,3] := p_gross[2]*1.3
         FOR nI := 1 TO Len(xPush)
             AAdd(aButton,{xPush[nI,3],;                                        /* Caption*/
                           p_gross[1],;                                         /* width*/
                           p_gross[2]*1.3,;                                     /* height*/
                           xPush[nI,4],;                                        /* Action Code Block*/
                           ,;                                                   /* Cargo*/
                           ,;                                                   /* Bitmap Resource*/
                           ,;                                                   /* COnfig Object*/
                           ,;                                                   /* When CodeBlock*/
                           ,;                                                   /* Tooltip*/
                           oLocal_style:sty_user;                               /* Font*/
                          };
                 )
//             AAdd(aButton,{xPush[nI,3],p_gross[1],p_gross[2]*1.3,xPush[nI,4],,,,{|| xPush[nI,5]},,oLocal_style:sty_user})
         NEXT
********************************************************************************
         FOR nI := 1 TO Len(ar_get)
             @ ar_get[nI]:nOben,ar_get[nI]:nLinks DCSAY ar_get[nI]:text;
                                                 OBJECT oDialogZUsatz:oText;
                                                 PARENT oDialogZUsatz:oRahmenKopf;
                                                   SIZE 0
             IF ValType(ar_get[nI]:eingabe) <> "U"                              // es muß was drin stehen, sonst macht es wenig Sinn
                @ DCGUI_ROW,DCGUI_COL DCGET ar_get[nI]:eingabe;
                                     PARENT oDialogZUsatz:oRahmenKopf;
                                    PICTURE ar_get[nI]:picture;
                                    TABSTOP
             ENDIF
         NEXT
********************************************************************************
         DCGETOPTIONS;
           AUTORESIZE;
               BORDER XBPDLG_SIZEBORDER;
              BUTTONS aButton;
                COLOR oSysPara:doParaWS:dialog_hg;
            COLORGETS {oSysPara:doParaWS:colorgets_aktiv,oSysPara:doParaWS:colorgets_inaktiv};
              GETFONT oVtpara:us_font_menue;
           HILITEGETS oSysPara:doParaWS:hilitegets;
          NOESCAPEKEY;
          NOMAXBUTTON;
          NOMINBUTTON;
                PIXEL;
         PRESENTATION oVtPara:aPresGet;
              SAYFONT oVtpara:us_font_menue;/*             SAYWIDTH oDialogZusatz:nSayBreite+oSysPara:skaliereXbParts(30); */
           SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_LEFT;
           SCROLLBARS XBP_SCROLLBAR_VERT+XBP_SCROLLBAR_HORIZ;
         TOOLTIPCOLOR oSysPara:doParaWS:tooltipcolor_vg,oSysPara:doParaWS:tooltipcolor_hg;
          TOOLTIPFONT oSysPara:doParaWS:tooltipfont

         DCREAD GUI;
                FIT;
         		TITLE cTitel;
                OPTIONS GetOptions;
                PARENT @oDialog
	 	 RETURN ar_get <------ hier abgefragt, steht immer noch der Ursprungswert drin, obwohl im Eingabefeld geändert wurde.
	 	 

Re: DCGET aus Array und Update

Verfasst: Mo, 26. Apr 2021 10:49
von Koverhage
Ich mache das so und habe keine Probleme.

Code: Alles auswählen

@  2.5,  1 DCGET ts[1]     pict '999'  MESSAGE msg01_ts
@  2.5,  7 DCGET mnktxt[1] pict 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' GETSIZE 40  message msg02_bez
@  2.5, 48 DCGET mnkdat[1] message msg26

Re: DCGET aus Array und Update [ERLEDIGT]

Verfasst: Mi, 28. Apr 2021 6:48
von Manfred
Problem gelöst.
Eigentlich sollte ich mich schämen, aber da auch keienr von euch das Problem erkannt hat (Quellcode liegt ja vor), schäme ich mich jetzt doch nicht. :angel8:
es ist das

Code: Alles auswählen

DC_ReadGuiEvent(DCGUI_EXIT_ABORT,getlist)}
da muß

Code: Alles auswählen

DC_ReadGuiEvent(DCGUI_EXIT_OK,getlist)}
stehen.
tja, cut & paste war immer schon gefährlich.