WHEN Codeblock nachträglich ändern.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » So, 20. Jan 2019 18:12

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7693
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Tom » So, 20. Jan 2019 22:04

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.
Herzlich,
Tom

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2201
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Koverhage » Mo, 21. Jan 2019 7:08

WHEN [|| changewhenBegingung() ]
Gruß
Klaus

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » Mo, 21. Jan 2019 7:57

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7693
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Tom » Mo, 21. Jan 2019 8:02

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.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » Mo, 21. Jan 2019 8:16

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
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2201
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Koverhage » Mo, 21. Jan 2019 8:42

Was sagt den lErfolg ?
Ist das sicher das da auch ab und an TRUE zurückgegeben wird ?
Gruß
Klaus

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » Mo, 21. Jan 2019 9:09

auf jeden FAll, sonst würde das KOnzept nicht schon seit Jahren klappen :wink:
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7693
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Tom » Mo, 21. Jan 2019 10:35

Du willst also, dass sich "objekt" ändern kann?
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » Mo, 21. Jan 2019 11:47

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7693
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Tom » Mo, 21. Jan 2019 12:18

Na, dann mach aus der Variablen "objekt" doch einfach eine Funktion, die fallweise das richtige Objekt retourniert.
Herzlich,
Tom

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred » Mo, 21. Jan 2019 12:23

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.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Antworten