WHEN Codeblock nachträglich ändern.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

WHEN Codeblock nachträglich ändern.

Beitrag 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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: WHEN Codeblock nachträglich ändern.

Beitrag 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.
Herzlich,
Tom
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: WHEN Codeblock nachträglich ändern.

Beitrag von Koverhage »

WHEN [|| changewhenBegingung() ]
Gruß
Klaus
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: WHEN Codeblock nachträglich ändern.

Beitrag 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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: WHEN Codeblock nachträglich ändern.

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: WHEN Codeblock nachträglich ändern.

Beitrag 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
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: WHEN Codeblock nachträglich ändern.

Beitrag von Koverhage »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: WHEN Codeblock nachträglich ändern.

Beitrag von Manfred »

auf jeden FAll, sonst würde das KOnzept nicht schon seit Jahren klappen :wink:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: WHEN Codeblock nachträglich ändern.

Beitrag von Tom »

Du willst also, dass sich "objekt" ändern kann?
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: WHEN Codeblock nachträglich ändern.

Beitrag 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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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: WHEN Codeblock nachträglich ändern.

Beitrag von Tom »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: WHEN Codeblock nachträglich ändern.

Beitrag 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.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten