Seite 2 von 2

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Di, 16. Mär 2021 21:26
von Marcus Herz
So was in der Art haben wir in xclass implementiert. Es flackert kaum noch

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 7:20
von Manfred
ich glaube hier geht es doch wieder in die falsche Richtung. Das Flackern kommt wohl bei mir daher, das zunächst erstmal die ganzen Browser aufgebaut werden müssen. D.h. Sie werden aufgebaut und dann erstmal übereinander gelegt. Das meinte ich mit Flackern. (War dann wohl anfänglich etwas unglücklich ausgedrückt) Es sind die einzelnen Browser, die man erstmal alle sieht und dann verschwinden sie zum Schluß. Bis auf den, der gebraucht wird.
Es ist ja so, das sie erstmal alle nacheinander in das Array geschrieben werden und dann zuletzt daraus erzeugt werden. Und da alle Browser sich von links nach rechts aufbauen, siht das eben wie geflackert aus. Und das möchte ich unterbinden, das man das nicht sieht. Was aber bisher nicht geklappt hat.

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 7:42
von HaPe
Hallo Manfred !
ich glaube hier geht es doch wieder in die falsche Richtung
Nein, das glaube ich nicht.
Marcus hat sich zum Flackern dazu ja ebenso geäußert.
Die Controls, Container, Browser, usw. außerhalb des sichbaren Bereiches aufbauen und erst zum Schluß in den sichtbaren Bereich schieben.
Das Flackern kommt wohl bei mir daher, das zunächst erstmal die ganzen Browser aufgebaut werden müssen
Was nicht sichtbar ist, kann nicht Flackern ...

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 7:43
von Jan
Manfred,

abseits von eXpress++: Im "normalen" XbpBrowse gibt es ja diese manchmal sehr störende Zeitverzögerung bis hin zum zeitlupenförmigen Aufbau durch das Erzeugen der Spalten. Was wäre, wenn Du den Browse erzeugst, den dann erstmal versteckst (beim XbpBrowse :hide()), die ganzen zeitaufwändigen Sachen machst, und dann erst das :show() machst?

Ich weiß nicht ob das beim DCBrowse so geht, aber es wäre vielleicht einen Versuch wert.

Jan

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 7:53
von Tom
Jan, das macht Manfred ja in dem einen Beispiel. Ich mache das auch so. Wichtig ist, dass man, wenn es nur um GUI, also Anzeige und Darstellung geht, bei entsprechenden Operationen z.B. mit LockUpdate() dann nicht mit RefreshAll() oder solchem Unsinn arbeitet, sondern mit InvalidateRect().

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 8:00
von Manfred
HaPe,
Du bist auf dem falschen Gedanken.
Es geht hier bei mir um teilweise bis zu 5 Browser, die "übereinander" liegen. Jeder Browser wird (dem Anschein nach) zellenweise von links oben nach rechts unten erzeugt. Dann wird er ausgeblendet und dann kommt der nächste. Wieder von links oben nach rechts unten. Wenn das nun mehrmals hintereinander geschieht (und das über einen größeren Bildschirmbereich hinweg), dann nimmt man das als Flackern war. Und das stört. Am besten wäre, wenn ich es schaffen würde alle Browser im Verborgenen zu erzeugen und dann nur den anzuzeigen, der benötigt wird. Aber dann höre ich schon wieder den Anwender schreien: "Das dauert alles so lange, warum denn nur?" Weil er während des Vorgangs nicht sieht, das was gemacht wird und deshalb der Meinung ist es würde ewig dauern. Was aber nicht der Fall ist, weil es sichtbar evtl. sogar noch länger dauern würde, aber er sieht, das sich was tut und somit einen anderen Eindruck gewinnt.

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 8:09
von Manfred
OK,
wobei ich mir das gerade nochmal selbst ganz genau angeschaut habe. Was flackert ist, das jeder Browser einen anderen Spaltenaufbau hat und das erzeugt das vermeindlich Flackern. Die Spalten verschieben sich eben x-mal hin und her. Wie schon gesagt, es wäre dienlich wenn ich es irgendwie schaffen würde nur den Browser anzuzeigen der benötigt wird und den Rest erst gar nicht sichtbar hätte. Aber das scheint ja wohl nicht zu klappen, mit Rogers Technik.

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 8:21
von Tom
Ich sehe gerade, dass ich solche doppelten Browses, von denen ich nur eines brauche, auf Statics lege (simple DCSAYs), die HIDE-Klausel ist jeweils für das Static und das Browse aktiv, über eine logische iVar des Dialogobjekts. Dann flackert nichts - und die Umschaltung zwischen den Browses geht auch vergleichsweise sauber. Wichtig ist natürlich, dass der logische Wert schon beim Aufbau der GetList .F. ist.

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 8:31
von Manfred
bei mir sieht das so aus. ICh habe mal 2 Browser eingestellt, es folgen aber noch mehr

Code: Alles auswählen

@ oSysPara:skaliereXbParts(15),oSysPara:skaliereXbParts(5) DCBROWSE oDialogZUsatz:oBrowse;
              CURSORMODE XBPBRW_CURSOR_ROW;
                    DATA oDialogZUsatz:aBrowse;
                  FILTER {|o| IF(o:schnellfilter,.F.,.T.)};
               HEADLINES 2;
                    HIDE {|| versteckeBrowse("ALLES")};
              ITEMMARKED {|| oDialogZUsatz:itemmarkedbrowse(oDialogZusatz:oFla),;
                             dc_getrefresh(getlist),;
                             dc_getorigset(getlist);
                          };
              NOSOFTTRACK;
                   PARENT oDialogZusatz:oRahmenBrowse;
             PRESENTATION oVtPara:aPresBrowse;
                     SIZE DCGUI_PARENTWIDTH-oSysPara:skaliereXbParts(10),DCGUI_PARENTHEIGHT - oSysPara:skaliereXbParts(20);
             SORTUPBITMAP BITMAP_RD_UP_DARKGRAY ;
           SORTDOWNBITMAP BITMAP_RD_DOWN_DARKGRAY

         DCBROWSECOL OBJECTVAR jjjj;
                        HEADER "JJJJ";
                        PARENT oDialogZusatz:oBrowse;
                          SORT {|aMousePos, nColPos, self| oDialogZusatz:MausImKopf(nColPos,"jjjj")};
                       TOOLTIP "rechte Maustaste sortiert die Spalte" 
		
		@ oSysPara:skaliereXbParts(15),oSysPara:skaliereXbParts(5) DCBROWSE oDialogZUsatz:oBrowseBuchung;
              CURSORMODE XBPBRW_CURSOR_ROW;
                    DATA oDialogZUsatz:aBrowse;
                  FILTER {|o| IF(o:schnellfilter,.F.,.T.)};
               HEADLINES 2;
                    HIDE {|| versteckeBrowse("BUCHUNG")};
              ITEMMARKED {|| oDialogZUsatz:itemmarkedbrowse(oDialogZusatz:oFla),;
                             dc_getrefresh(getlist),;
                             dc_getorigset(getlist);
                          };
              NOSOFTTRACK;
                   PARENT oDialogZusatz:oRahmenBrowse;
             PRESENTATION oVtPara:aPresBrowse;
                     SIZE DCGUI_PARENTWIDTH-oSysPara:skaliereXbParts(10),DCGUI_PARENTHEIGHT - oSysPara:skaliereXbParts(20);
             SORTUPBITMAP BITMAP_RD_UP_DARKGRAY ;
           SORTDOWNBITMAP BITMAP_RD_DOWN_DARKGRAY

         DCBROWSECOL OBJECTVAR jjjj;
                        HEADER "JJJJ";
                        PARENT oDialogZusatz:oBrowseBuchung;
                          SORT {|aMousePos, nColPos, self| oDialogZusatz:MausImKopf(nColPos,"jjjj")};
                       TOOLTIP "rechte Maustaste sortiert die Spalte"

Re: DCBROWSE unsichtbar nach Erzeugung

Verfasst: Mi, 17. Mär 2021 8:33
von Tom
Gib dem Browse mal ein zusätzliches Static als Parent. Liefert <VersteckeBrowse("ALLES")> wirklich .T., bis der Dialog im EVAL "Show()" sagt?