Seite 1 von 1

WHEN Codeblock nachträglich ändern.

Verfasst: So, 20. Jan 2019 18:12
von Manfred
Bevor ich jetzt wieder in die falsche Richtung losrenne, wie ändert man denn nachträglich einen WHEN Block? Speich, ist der auch irgendwo abgelegt wie seiner Zeit der Filter, den man dann einfach nur austauschen muß/kann? Auf den 1. und 2. Blick habe ich nichts gefunden in dem Objekt im Debugger.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: So, 20. Jan 2019 22:04
von Tom
Das ist keine Eigenschaft der Objekte. Schau Dir mal an, was die Funktion DC_GetWhen() (oder DC_WhenHideEval() - ich hab den Code gerade nicht griffbereit) so alles macht. Bau doch einfach eine eigene Funktion in den WHEN-Codeblock und ändere die. Das ist auch sicherer.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 7:08
von Koverhage
WHEN [|| changewhenBegingung() ]

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 7:57
von Manfred
da ist schon eine Funktion drin. Die bekommt ein Objekt übergeben welches auf EOF() oder BOF() geprüft wird. und das möchte ich austauschen. Alles andere wäre derzeit nicht umsetzbar, weil es zu viele Dinge hinter sich herzeieht, die nicht kalkulierbar sind auf die Schnelle. Deshalb meine Frage.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 8:02
von Tom
Ja, aber das ist doch simpel:

Code: Alles auswählen

... WHEN {||WhenObject()->(EoF())}
Und die Funktion WhenObject() liefert dann das Objekt, das jeweils gemeint ist.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 8:16
von Manfred

Code: Alles auswählen

oDialogZusatz:standardPbLeiste(.T.,.F.,,@getlist,oDialogZusatz:oMaengel,,,,.T.,,,.T.)

Code: Alles auswählen

METHOD mk_dialog:standardPbLeiste(lNavigationAus,;                              // hier werden Standard PushButton für normale Dialoge aufgebaut
                                  lLoeschenAus,;
                                  oParent,;
                                  getlist,;
                                  objekt,;
                                  lNeuAus,;
                                  lSpeichernAus,;
                                  lAbbruchAus,;
                                  lNavigationWeg,;
                                  lEditAus,;
                                  lAendernAus,;
                                  lFilterAn,;
                                  cWoher)
       LOCAL nPbAbstand := oSysPara:skaliereXbParts(5)
       LOCAL nPbLAenge

       MEMVAR oSysPara

       DEFAULT lNavigationAus TO .F.
       DEFAULT lLoeschenAus   TO .T.
       DEFAULT lNeuAus        TO .F.
       DEFAULT lSpeichernAus  TO .F.
       DEFAULT lABbruchAus    TO .F.
       DEFAULT lNavigationWeg TO .F.
       DEFAULT lEditAus       TO .F.
       DEFAULT lAendernAus    TO .F.
       DEFAULT lFilterAn      To .F.
       DEFAULT cWoher         TO ""

       IF ! lNavigationWeg
          @ 0,0 DCPUSHBUTTON;
                      ACTION {|| objekt:skipdb(cWoher,,,,,-1),;
                                 ::SkipzusatzDb(),;
                                 dc_getrefresh(getlist),;
                                 dc_getorigset(getlist);
                             };
                     CAPTION {SATZ_ANFANG_ENABLE,SATZ_ANFANG_DISABLE};
                        EVAL {|o| o:setpos( {oSysPara:skaliereXbParts(5),oSysPara:skaliereXbParts(10)}),;
                                  AAdd(::aPbNavigieren,{o,.T.} );
                             };
                        HIDE {|| lNavigationAus};
                      OBJECT ::oPbTop;
                      PARENT oParent;
                        SIZE ::nPbLaengeBMP,::nPbHoehe;
                     TABSTOP;
                     TOOLTIP "Zum Anfang der Tabelle"
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| objekt:skipsatz(cWoher,,.T.,,,-1),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {SATZ_RUECK_ENABLE,SATZ_RUECK_DISABLE};
                                            EVAL {|o| o:setpos( {::oPbTop:currentpos()[1] + ::oPbTop:currentsize()[1],::oPbTop:currentpos()[2]} ),;
                                                      AAdd(::aPbNavigieren,{o,.T.});
                                                 };
                                            HIDE {|| lNavigationAus};
                                          OBJECT ::oPbZurueck;
                                          PARENT oParent;
                                            SIZE ::nPblaengeBMP,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "vorheriger Satz in der Tabelle"
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| objekt:skipsatz(cWoher,,.T.),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {SATZ_VOR_ENABLE,SATZ_VOR_DISABLE};
                                            EVAL {|o| o:setpos( {::oPbZurueck:currentpos()[1] + ::oPbZurueck:currentsize()[1],::oPbZurueck:currentpos()[2]} ),;
                                                      AAdd(::aPbNavigieren,{o,.T.});
                                                 };
                                            HIDE {|| lNavigationAus};
                                          OBJECT ::oPbVor;
                                          PARENT oParent;
                                            SIZE ::nPblaengeBMP,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Folgesatz in der Tabelle"
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| objekt:skipdb(cWoher),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {SATZ_ENDE_ENABLE,SATZ_ENDE_DISABLE};
                                            EVAL {|o| o:setpos( {::oPbVor:currentpos()[1] + ::oPbVor:currentsize()[1],::oPbVor:currentpos()[2]} ),;
                                                      AAdd(::aPbNavigieren,{o,.T.});
                                                 };
                                            HIDE {|| lNavigationAus};
                                          OBJECT ::oPbBottom;
                                          PARENT oParent;
                                            SIZE ::nPblaengeBMP,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Letzter Satz in der Tabelle"
       ENDIF
       IF ! lEditAus
          nPbLaenge := ::ermittelPbMasse(::cPbNeuCaption)
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("neu",objekt,getlist)};
                                         CAPTION ::cPbNeuCaption;
                                           CARGO "AN";
                                            EVAL {|o| IF( lNavigationWeg,o:setPos({oSysPara:skaliereXbParts(5),oSysPara:skaliereXbParts(10)}),o:setPos({oSysPara:skaliereXbParts(::oPbBottom:currentPos()[1]) + oSysPara:skaliereXbParts(::oPbBottom:currentSize()[1]),oSysPara:skaliereXbParts(::oPbBottom:currentPos()[2])}))};
                                            HIDE {|| lNeuAus};
                                          OBJECT ::oPbNeu;
                                          PARENT oParent;
                                            SIZE nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Neuanlage eines Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbNeu,objekt,"neu")}
          nPbLaenge := ::ermittelPbMasse(::cPbAendernCaption)
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("edit",objekt,getlist)};
                                         CAPTION ::cPbAendernCaption;
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbNeu:currentPos()[1] + ::oPbNeu:currentSize()[1],::oPbNeu:currentPos()[2]})};
                                            HIDE {|| lAendernAus};
                                          OBJECT ::oPbAendern;
                                          PARENT oParent;
                                            SIZE nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Editieren des angezeigten Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbAendern,objekt,"edit")}
          nPbLaenge := ::ermittelPbMasse(::cPbSpeichernCaption)
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("speichern",objekt,getlist)};
                                         CAPTION ::cPbSpeichernCaption;
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbAendern:currentPos()[1] + ::oPbAendern:currentSize()[1],::oPbAendern:currentPos()[2]})};
                                            HIDE {|| lSpeichernAus};
                                          OBJECT ::oPbSpeichern;
                                          PARENT oParent;
                                            SIZE nPblaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Speichern des angezeigten Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbSpeichern,objekt,"speichern")}
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("abbruch",objekt,getlist)};
                                         CAPTION {ABBRUCH_ENABLE,ABBRUCH_DISABLE};
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbSpeichern:currentPos()[1] + ::oPbSpeichern:currentSize()[1],::oPbSpeichern:currentPos()[2]})};
                                            HIDE {|| lAbbruchAus};
                                          OBJECT ::oPbAbbruch;
                                          PARENT oParent;
                                            SIZE ::nPbLaengeBMP,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Abbruch des Editiervorganges";
                                            WHEN {|| ::pbWhenPruefung(::oPbAbbruch,objekt,"abbruch")}
          nPbLaenge := ::ermittelPbMasse(::cPbLoeschenCaption)
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("delete",objekt,getlist)};
                                         CAPTION ::cPbLoeschenCaption;
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbAbbruch:currentPos()[1] + ::oPbAbbruch:currentSize()[1],::oPbAbbruch:currentPos()[2]})};
                                            HIDE {|| lLoeschenAus};
                                          OBJECT ::oPbLoeschen;
                                          PARENT oParent;
                                            SIZE nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Entfernen des angezeigten Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbLoeschen,objekt,"delete")}
          @ DCGUI_ROW,DCGUI_COL + nPbAbstand DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("filter",objekt,getlist)};
                                         CAPTION "Filter";
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbLoeschen:currentPos()[1] + ::oPbLoeschen:currentSize()[1],::oPbLoeschen:currentPos()[2]})};
                                            HIDE {|| ! lFilterAn};
                                          OBJECT ::oPbFilter;
                                          PARENT oParent;
                                            SIZE ::nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Filter auf den Browser";
                                            WHEN {|| ::pbWhenPruefung(::oPbFilter,objekt,"filter")}
       ENDIF
       nPbAbstand := NIL
       nPblaenge  := NIL
RETURN self

Code: Alles auswählen

METHOD mk_dialog:PbWhenPruefung(oXbp,objekt,cWoher,lAktivieren)                   // Prüfung ob PushButton enabled oder disabled sein mnssen
       LOCAL lErfolg := .F.

       DEFAULT lAktivieren TO .T.

       DEFAULT cWoher TO ""

       IF Upper(oXbp:cargo[3]) = "AN"
          lErfolg := .T.
       ENDIF
       IF (objekt:nArea)->(Eof()) .AND. (Upper(cWoher) == "ÄNDERN" .OR. Upper(cWoher) == "LÖSCHEN")
          lErfolg := .F.
       ENDIF
       IF ! lAktivieren
          lErfolg := .F.
       ENDIF
RETURN lErfolg

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 8:42
von Koverhage
Was sagt den lErfolg ?
Ist das sicher das da auch ab und an TRUE zurückgegeben wird ?

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 9:09
von Manfred
auf jeden FAll, sonst würde das KOnzept nicht schon seit Jahren klappen :wink:

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 10:35
von Tom
Du willst also, dass sich "objekt" ändern kann?

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 11:47
von Manfred
ja, da müßte eine andere DBF Tabelle rein, die sich in dem objekt versteckt. Ist wie gesagt nur eine Idee. Im Moment habe ich das über den Cargo Block realisiert, den muß ich aber immer setzen, damit enable oder disable ist. Mit dem Austausch des Objekts wäre das natürlich "eleganter", weil da eben auf EOF() usw. geprüft wird und alles darauf abgestimmt ist.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 12:18
von Tom
Na, dann mach aus der Variablen "objekt" doch einfach eine Funktion, die fallweise das richtige Objekt retourniert.

Re: WHEN Codeblock nachträglich ändern.

Verfasst: Mo, 21. Jan 2019 12:23
von Manfred
Ah, jetzt verstehe ich, wo der Haken liegt. Ich vergas zu erwähnen, das der WhenBlock nur für eine ausgewählte Pushbuttonanzahl oder nur einen getauscht werden muß. Nicht für alle. Die Standardleiste behinhaltet einige PB, die aber nicht immer auf dasselbe Objekt reagieren sollen/dürfen. Ich möchte also nur ab und an mal den WHEn Block für EINEN Pushbutton auswechseln.