DCBROWSCOL dynamisch versorgen

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

DCBROWSCOL dynamisch versorgen

Beitrag von Manfred »

folgendes Einsatzgebiet

Code: Alles auswählen

@ oSysPara:skaliereXbParts(15),oSysPara:skaliereXbParts(5) DCBROWSE ::oBrowsePlaner;
                                                                CURSORMODE XBPBRW_CURSOR_ROW;
                                                                      DATA ::aBrowseplaner;
                                                                      FONT oSysPara:doParaWS:schrifttext;
                                                                ITEMMARKED {|| ::itemMarkedBrowse("browseplaner",@getlist)};
                                                               NOSOFTTRACK;
                                                                    PARENT ::oRahmenUrlaubsplan;
                                                                SIZE DCGUI_PARENTWIDTH - oSysPara:skaliereXbParts(10),DCGUI_PARENTHEIGHT - ::nPbHoehe - oSysPara:skaliereXbParts(30);
                                                              SORTUPBITMAP BITMAP_RD_UP_DARKGRAY;
                                                            SORTDOWNBITMAP BITMAP_RD_DOWN_DARKGRAY ;
                                                                   TABSTOP
       DCBROWSECOL OBJECTVAR {|| ::ermittelbrowserspalte()};
                      HEADER "Test";
                      PARENT ::oBrowsePlaner
Ich möchte OBJECTVAR während der Laufzeit ermitteln, das sich die Spalte aus einem Array ändern kann, die angezeigt werden soll. Das Array ::abrowseplaner hat alle Daten in sich, aber es sollen immer nur einige davon angezeigt werden. Wenn ich Objectvar mit einer Methode aufrufe, wie oben zu sehen, gibt es eine Fehlermeldung, das self nicht bekannt ist. Kann ich mir irgendwie vorstellen. Wenn ich aus der Methode eine Funktion mache, dann müßte ich aber das Browseobjekt ::oBrowsePlaner mitgeben, damit ich in der Funktion ermitteln kann welche Column dran ist umd dann die Spalte aus dem Array zu nehmen, die angezeigt werden soll. Das geht aber dann auch nicht. Das browseobjekt wird genauso unbekannt angemeckert wie die Methode. Wie löse ich sowas?
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
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: DCBROWSCOL dynamisch versorgen

Beitrag von Manfred »

es wird sicherlich wieder was ganz blödes sein, aber ich werde immer verwirrter.

Code: Alles auswählen

METHOD DialogUrlaub:urlaubeZeigen(oParent)
       LOCAL getlist := {}
       LOCAL Getoptions

       LOCAL oDialog       := NIL

       MEMVAR oSysPara

       ::oeffne_db("uebersicht")
//------------------------------------------------------------------------------
       @ oSysPara:skaliereXbParts(15),oSysPara:skaliereXbParts(5) DCGROUP ::oRahmenUrlaubsplan;
                                                                  CAPTION "Urlaubsübersicht";
                                                                     SIZE DCGUI_PARENTWIDTH - oSysPara:skaliereXbParts(10),DCGUI_PARENTHEIGHT - oSysPara:skaliereXbParts(20)
//------------------------------------------------------------------------------
       @ oSysPara:skaliereXbParts(15),oSysPara:skaliereXbParts(5) DCBROWSE ::oBrowsePlaner;
                                                                CURSORMODE XBPBRW_CURSOR_ROW;
                                                                      DATA ::aBrowseplaner;
                                                                      FONT oSysPara:doParaWS:schrifttext;
                                                                ITEMMARKED {|| ::itemMarkedBrowse("browseplaner",@getlist)};
                                                               NOSOFTTRACK;
                                                                    PARENT ::oRahmenUrlaubsplan;
                                                                SIZE DCGUI_PARENTWIDTH - oSysPara:skaliereXbParts(10),DCGUI_PARENTHEIGHT - ::nPbHoehe - oSysPara:skaliereXbParts(30);
                                                              SORTUPBITMAP BITMAP_RD_UP_DARKGRAY;
                                                            SORTDOWNBITMAP BITMAP_RD_DOWN_DARKGRAY ;
                                                                   TABSTOP
       DCBROWSECOL OBJECTVAR gruppe;
                      HEADER "Gruppe";
                      PARENT ::oBrowsePlaner
       DCBROWSECOL OBJECTVAR fahrer;
                      HEADER "Fahrer";
                      PARENT ::oBrowsePlaner
       DCBROWSECOL OBJECTVAR {|o| ermittelbrowserspalte("spalte",oParent)}; [b]<---- oParent wird als unbekannt angemeckert. [/b]
                      HEADER "Test";
                      PARENT ::oBrowsePlaner
       /*;
                      HCOLOR {|o,self| ::ermittelbrowserSpalte("farbeheader",o)};
                      HEADER ::ermittelbrowserspalte("header");
                      PARENT ::oBrowsePlaner */
//------------------------------------------------------------------------------
          DCGETOPTIONS;
                BORDER XBPDLG_SIZEBORDER;
                  BUSY "Daten werden geladen";
                 COLOR oSysPara:doParaWS:dialog_hg;
             COLORGETS {oSysPara:doParaWS:colorgets_aktiv,oSysPara:doParaWS:colorgets_inaktiv};
                  EVAL {|o| SetAppWindow(o) };                                  /* muß hier stehen für das Cascading*/
               GETFONT oSysPara:doParaWS:schrifteingabe;
            HILITEGETS oSysPara:doParaWS:hilitegets;
           NOESCAPEKEY;
           NOMAXBUTTON;
           NOMINBUTTON;
                 PIXEL;
               SAYFONT oSysPara:doParaWS:schrifttext;
            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;
           WINDOWWIDTH AppDesktop():currentsize()[1];
          WINDOWHEIGHT AppDesktop():currentsize()[2] - oSysPara:skaliereXbParts(10)

          DCREAD GUI;
           APPWINDOW oParent:drawingArea;
                EVAL {|| SetAppFocus(::oBrowsePlaner)};
             OPTIONS GetOptions;
              PARENT @oDialog;
             TIMEOUT {300,{|| DCMSGBOX "ACHTUNG dieser Programmteil wird automatisch",;
                                       "nach einer Zeit von 5 Minuten geschlossen",;
                                       "wenn das nicht erwünscht ist, bitte NEIN klicken.";
                                CHOICE 1;
                                 TITLE "Timeout";
                               TIMEOUT 20;
                                 YESNO;
                          };
                      };
               TITLE " " + ::cVersion
       ::schliesse_db("uebersicht")
RETURN self
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
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: DCBROWSCOL dynamisch versorgen

Beitrag von Manfred »

ich habe es jetzt gelöst, in dem ich die Klasse Private gesetzt habe. Jetzt klappt es fast. Aber es ist imer noch ein mehr oder weniger gewichtiges Problem übrig geblieben:
wenn ich es so mache, dann klappt es mit der Inhaltsanzeige der Spalte. leider ist das aber nicht wirklich dynamisch.

Code: Alles auswählen

DCBROWSECOL OBJECTVAR _20191014; /*{|o| oDialogZusatz:ermittelbrowserspalte("spalte",1)}; */
                       COLOR {|o| oDialogZusatz:ermittelBrowserSpalte("farbezelle",1,o)};
                      HEADER {|| oDialogZusatz:ermittelbrowserspalte("header",1)} HCOLOR {|o| oDialogZusatz:ermittelbrowserSpalte("farbeheader",1)};
                      PARENT oDialogZusatz:oBrowsePlaner
********************************************************************************
METHOD DialogUrlaub:ermittelBrowserSpalte(cWoher,nSpalte,objekt)
       LOCAL xWert

       MEMVAR oDialogZusatz

       DEFAULT cWoher TO ""

       IF Upper(cWoher) == "SPALTE"
          xwert := "_" + DToC(::aWoche[1] + nSpalte)  // über den Weg wird genau der Wert als Inhalt angezeigt, der hier zusammengebaut wird. Also nicht der Inhalt der Objectvar.
       ELSEIF Upper(cWoher) == "HEADER"
          xwert := SubStr(CDoW(::aWoche[1] + nSpalte),1,2) + "." + DToC(::aWoche[1] + nSpalte)
       ELSEIF Upper(cWoher) == "FARBEHEADER"
          IF DoW(::aWoche[1] + nSpalte) = 7 .OR. DoW(::aWoche[1] + nSpalte) = 1 // samstag Sonntag
             xWert := {GRA_CLR_BLACK,GRA_CLR_RED}
          ELSE
             xwert := {GRA_CLR_BLACK,GRA_CLR_WHITE}
          ENDIF
       ELSEIF Upper(cWoher) == "FARBEZELLE"
          IF At("/",objekt) > 0                          
             xWert := {GRA_CLR_BLACK,GRA_CLR_RED}
          ELSEIF Upper(SubStr(objekt,1,6)) == "URLAUB"
             xWert := {GRA_CLR_BLACK,GRA_CLR_GREEN}
          ELSEIF Upper(SubStr(objekt,1,5)) == "KRANK"
             xWert := {GRA_CLR_BLACK,GRA_CLR_CYAN}
          ELSE
             xwert := {GRA_CLR_BLACK,GRA_CLR_WHITE}
          ENDIF
       ENDIF
RETURN xWert
wenn ich allerdings den Wert OBJECTVAR als String zurückliefere aus der Funktion, dann wird der Wert selbst, der zurückgeliefert wird in jeder Zelle angezeigt. Wo mache ich hier einen Denkfehler?
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
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: DCBROWSCOL dynamisch versorgen

Beitrag von Manfred »

hat keiner eine Idee?. Ich habe mir Rogers Samples angeschaut
.\samples\browse\objects.prg.
da scheint er den Codeblock aber nicht so zu nutzen, wie ich es versuche!?
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