Pushbutton und Caption

Moderator: Moderatoren

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

Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 11:20

ich habe eine Methode, die eine pauschale Pushbuttonleiste erzeugt. Pauschal, weil da Standardwerte drin stehen. Diese Standardwerte wollte ich nachträglich über EVAl in DCGUI READ ändern. Das scheint aber nicht so einfach zu sein. CAption einfach über setcaption() ist wohl nicht dauerhaft. Nachdem ich mir über den Debugger mal angesehen habe, was so alles in dem PushButton Objekt hinterlegt ist, habe ich schließlich :captionblock, :captiondisabled und :captionenabled gefunden. Damit geht das wohl dauerhaft. Ob das jetzt die eleganteste Lösung ist? k.A. ich mache es mal so. Jetzt würde mich aber mal interessieren, wo z.B. die Tooltip Texte stehen, weil ich die auch ändern müßte. Wenn ich da aber suchen sollte, werde ich ja wahnsinnig. Roger hat einen so großen Baum darin erzeugt. Wo fängt man da an. Gibt es dafür z.b. irgendeine Methode, die sowas steuert? Vielleicht generell für die Einstellungen und Werte, die ich benötige?
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: Pushbutton und Caption

Beitrag von Tom » Di, 30. Jan 2018 11:33

Nimm einfach Codeblöcke für die Captions. Das ist dann auch "dauerhaft", um es mal im Jimmystyle zu sagen. Obwohl auch SetCaption dauerhaft sein sollte, wenn Du a) keine Codeblöcke für die Captions verwendest (die würden bei jedem DC_GetRefresh neu evaluiert werden) und b) nicht mit DCPUSHBUTTONXP arbeitest, da ist es meiner Erinnerung nach auch noch einmal ein bisschen anders.
Ansonsten könnte, wie immer, etwas Code helfen, um die Situation zu analysieren. Was sind die Standardwerte? Was bedeutet "pauschal erzeugen"?
Herzlich,
Tom

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

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 12:28

Ahhhhhh Tom,
Danke das hatte ich total übersehen, Caption geht ja auch mit Codeblock. Das muß ich mir mal näher ansehen, wie das klappt und was das für mich bedeutet.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 13:49

OK, Codeblock implementiert. Aber wie ändere ich jetzt die Caption? :angry1: Ein einfaches SetCaption() bringt micht nicht weiter. Das muß ja einen Sinn gehabt haben, warum Roger das so programmiert hat.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18818
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 13:57

Einfache Lösung, man nimmt z.B. eine Variable in den Codeblock. Wenn man die dann ändert vom Inhalt her, dann wird die neue Caption dauerhaft angezeigt. Hätte ich auch eher drauf kommen können. :banghead:
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: Pushbutton und Caption

Beitrag von Tom » Di, 30. Jan 2018 15:08

Oder eine Funktion, deren Rückgabewert eine gültige Caption ist. Die Caption aktualisiert sich dann durch DC_GetRefresh(GetList) oder DC_GetRefresh(oButton). Aber ich frage mich weiterhin, warum Du meinst, das Setzen z.B. einer Textcaption eines DCPUSHBUTTON mit :SetCaption wäre irgendwie nicht dauerhaft. Wenn der DCPUSHBUTTON so erzeugt wird:

Code: Alles auswählen

lNeueingabe := .F.
@ 1,1 DCPUSHBUTTON CAPTION "Neueingabe" SIZE 10,1 OBJECT oButton ACTION {||lNeueingabe:=!lNeueingabe,oButton:SetCaption(IF(lNeueingabe,"Speichern","Neueingabe))}
, dann verändert sich die Caption ausschließlich durch diese Zeile bzw. durch das Betätigen des Buttons. Das wäre dann die Codeblock-Version:

Code: Alles auswählen

@ 1,1 DCPUSHBUTTON CAPTION {||IF(lNeueingabe,"Speichern","Neueingabe)} SIZE 10,1 OBJECT oButton ACTION {||lNeueingabe:=!lNeueingabe,DC_GetRefresh(GetList)} // oder DC_GetRefresh(oButton)
Herzlich,
Tom

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: Pushbutton und Caption

Beitrag von Tom » Di, 30. Jan 2018 15:26

Oder, wenn Du nicht mit einzelnen Objektvariablen arbeiten willst:

Code: Alles auswählen

@ 1,1 DCPUSHBUTTON CAPTION 'Test' SIZE 20,1 ACTION {|x,y,o|o:SetCaption(o:Caption+"x")}
Mit jedem Klick verlängert sich die Caption jetzt. Und sie bleibt, ganz egal, was Du in/mit diesem Dialog sonst noch veranstaltest - außer, ihn neu aufzubauen. :wink:
Herzlich,
Tom

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

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 16:22

hm,
vielleicht mache ich ja auch was falsch. Wenn ich in der Reihenfolge die Pushbutton erzeuge und dort dann die Caption angebe, ist die Caption nicht dauerhaft änderbar, wenn ich mit EVAl in der DCGUI READ Area :setcaption("neuerwert") eingebe. Man kann kurz sehen, wie die Änderung "aufblinkt" aber sofort wieder der Ursprungswert angezeigt wird.
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: Pushbutton und Caption

Beitrag von Tom » Di, 30. Jan 2018 17:06

Code: Alles auswählen

@ 1,1 DCPUSHBUTTON CAPTION 'Test 1' SIZE 10,1 OBJECT oButton1
@ 2,1 DCPUSHBUTTON CAPTION 'Test 2' SIZE 10,1 OBJECT oButton2
@ 3,1 DCPUSHBUTTON CAPTION 'Test 3' SIZE 10,1 OBJECT oButton3
DCREAD GUI FIT ADDBUTTONS EVAL {||oButton1:SetCaption('Test 4')}
Du siehst einen Dialog mit drei Buttons, der oberste hat die Caption "Test 4".

In Deinem Code ist was falsch.
Herzlich,
Tom

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

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 17:27

Tom,
hier der Programmauszug

Code: Alles auswählen

oDialogZusatz:standardPbLeiste(.T.,,,@getlist,oDialogZusatz:oTagesdienst,,,,.T.)
//------------------------------------------------------------------------------
          DCGETOPTIONS;
                BORDER XBPDLG_SIZEBORDER;
                  BUSY "Daten werden geladen";
             COLORGETS {{ GRA_CLR_BLACK, GRA_CLR_CYAN },{ GRA_CLR_BLACK, GRA_CLR_WHITE }};
                  EVAL {|o| SetAppWindow(o) };                                  /* muß hier stehen für das Cascading*/
            HILITEGETS GRA_CLR_CYAN;
           NOESCAPEKEY;
           NOMAXBUTTON;
           NOMINBUTTON;
                 PIXEL;
            SAYOPTIONS XBPSTATIC_TEXT_VCENTER+XBPSTATIC_TEXT_RIGHT;
          TOOLTIPCOLOR GRA_CLR_BLACK, GRA_CLR_YELLOW;
           WINDOWWIDTH oDialogZusatz:nFensterBreite;
          WINDOWHEIGHT oDialogZusatz:nFensterHoehe

          DCREAD GUI;
           APPWINDOW oSysPara:oHauptDialog:drawingArea;
                EVAL {|| oDialogZusatz:oTagesdienst:schalteEditControls(.F.),;
                         oDialogZusatz:oPbNeu:setCaption( "Drucken"),;           ------------------------> da sieht man es kurz wechseln aber sofort steht wieder "Neu" drin.
                         oDialogZusatz:oPbAbbruch:cargo[3] := "AUS",;
                         SetAppFocus(oDialogZusatz:oPbNeu);
                     };
             OPTIONS GetOptions;
              PARENT @oDialog;
               TITLE "Tagesdienstedruck " + oDialogzusatz:cVersion

***************************************************************************************************************
METHOD mk_dialog:standardPbLeiste(lNavigationAus,;                              // hier werden Standard PushButton für normale Dialoge aufgebaut
                                                              lLoeschenAus,;
                                  oParent,;
                                  getlist,;
                                  objekt,;
                                  lNeuAus,;
                                  lSpeichernAus,;
                                  lAbbruchAus,;
                                  lNavigationWeg,;
                                  lEditAus,;
                                  lAendernAus)
       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.

       IF ! lNavigationWeg
          @ 0,0 DCPUSHBUTTON;
                      ACTION {|| objekt:skipdb(,,,,,-1),;
                                 ::SkipzusatzDb(),;
                                 dc_getrefresh(getlist),;
                                 dc_getorigset(getlist);
                             };
                     CAPTION {||ICON_GOTOP,NIL};
                        EVAL {|o| o:setpos( {5,10}),;
                                  AAdd(::aPbNavigieren,{o,.T.} );
                             };
                        HIDE {|| lNavigationAus};
                      OBJECT ::oPbTop;
                      PARENT oParent;
                        SIZE ::nPbLaengeBMP,::nPbHoehe;
                     TABSTOP;
                     TOOLTIP "Zum Anfang der Tabelle"
          @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                          ACTION {|| objekt:skipsatz(,,.T.,,,-1),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {||ICON_GOBACK,NIL};
                                            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 + 5 DCPUSHBUTTON;
                                          ACTION {|| objekt:skipsatz(,,.T.),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {||ICON_GONEXT,NIL};
                                            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 "nächster Satz in der Tabelle"
          @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                          ACTION {|| objekt:skipdb(),;
                                                     ::SkipzusatzDb(getlist),;
                                                     dc_getrefresh(getlist),;
                                                     dc_getorigset(getlist);
                                                 };
                                         CAPTION {||ICON_GOBOTTOM,NIL};
                                            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
          @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("neu",objekt,getlist)};
                                         CAPTION  "Neu";
                                           CARGO "AN";
                                            EVAL {|o| IF( lNavigationWeg,o:setPos({5,10}),o:setPos( {::oPbBottom:currentPos()[1] + ::oPbBottom:currentSize()[1],::oPbBottom:currentPos()[2] } ))};
                                            HIDE {|| lNeuAus};
                                          OBJECT ::oPbNeu;
                                          PARENT oParent;
                                            SIZE ::nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Neuanlage eines Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbNeu,objekt,"neu")}
          @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("ändern",objekt,getlist)};
                                         CAPTION {||"Ändern"};
                                           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 "Ändern des angezeigten Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbAendern,objekt,"ändern")}
          @ DCGUI_ROW,DCGUI_COL + 5 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 + 5 DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("abbruch",objekt,getlist)};
                                         CAPTION {||"Abbruch"};
                                           CARGO "AN";
                                            EVAL {|o| o:setPos( {::oPbSpeichern:currentPos()[1] + ::oPbSpeichern:currentSize()[1],::oPbSpeichern:currentPos()[2] } )};
                                            HIDE {|| lAbbruchAus};
                                          OBJECT ::oPbAbbruch;
                                          PARENT oParent;
                                            SIZE ::nPbLaenge,::nPbHoehe;
                                         TABSTOP;
                                         TOOLTIP "Abbruch des Editiervorganges";
                                            WHEN {|| ::pbWhenPruefung(::oPbAbbruch,objekt,"abbruch")}
          @ DCGUI_ROW,DCGUI_COL + 5 DCPUSHBUTTON;
                                          ACTION {|| ::schalteControls("löschen",objekt,getlist)};
                                         CAPTION {||"Löschen"};
                                           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 "Löschen des angezeigten Datensatzes";
                                            WHEN {|| ::pbWhenPruefung(::oPbLoeschen,objekt,"löschen")}
       ENDIF
RETURN self
vielleicht mache ich ja wirklich was falsch. Ich erkenne es aber nicht.
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: Pushbutton und Caption

Beitrag von Tom » Di, 30. Jan 2018 18:14

Was passiert in der Methode pbWhenPruefung? Was ist, wenn Du deren Aufruf im WHEN des Buttons rausnimmst?
Herzlich,
Tom

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

Re: Pushbutton und Caption

Beitrag von Manfred » Di, 30. Jan 2018 18:38

bevor ich jetzt lange rede:

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

Antworten