DCBROWSE unsichtbar nach Erzeugung

Moderator: Moderatoren

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

DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

Hi,
ich habe ein Szenario, in dem ich mehrere Browse erzeugen muß, von denen aber immer nur jeweils einer sichtbar sein darf. Also erzeuge ich alle Browser direkt am Anfang und zeige dann immer nur den benötigten über HIDE Codeblock an. leider hat das zur Folge, das bei mehreren Browsern, die erzeugt werden am Anfang immer ein Flackern entsteht und dann erst die Browser versteckt werden. Das stört den User natürlich. Jetzt habe ich es umgekehrt gemacht also nicht so, das der Hideblock versteckt, wenn .F. zurück geliefert wird, sondern direkt ein .F. und wenn der Codeblock .F. zurückliefert, dann wird angezeigt. Das bringt es auch nicht. Also als nächstes in EVAL ein Hide() eingebaut um dann in Kombination mit HIDE Codeblock zum Ziel zu kommen. Das klappt auch nicht. Das Flackern bleibt. Man sieht also erstmal, wie die browser aufgebaut und dann ausgeblendet werden. Also auch nicht erquicklich. Wie bekomme ich es hin, das die Browser erstmal nicht zu sehen sind während der jeweiligen Erzeugung und dann eben nur der jeweils eine Browser sichtbar wird und das Flackern aufhört? Normalerweise kann sowas doch unter xbase++ pur mit show() hide() gemacht werden. Aber wie sage ich express++ das erstmal alles Hide() ist und dann auf Wunsch show() wird? Natürlich nur für die besagten Browser.
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Häng mal das HIDE direkt in die DCGET OPTIONS. Und setze im EVAL des DCREAD GUI eine Var, die das richtige Browse zur Anzeige bringt. Danach dann Show() für den gesamten Dialog.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

habe ich gemacht. DA passiert gar nichts. Es wird nichts versteckt.... Sehr merkwürdig
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Mmh. Das hier funzt einwandfrei:

Code: Alles auswählen

FUNCTION MAIN()
LOCAL GetList := {}, GetOptions := {}, oBrowse1, oBrowse2, oDialog, a := Directory(), lShowBrowse1 := .T., lShowBrowse2 := .F.
DCGETOPTIONS NOMINBUTTON HIDE

@ 1,1 DCBROWSE oBROWSE1 DATA a SIZE 100,20 HIDE {||!lShowBrowse1}
DCBROWSECOL ELEMENT 1 HEADER "Test1" WIDTH 20 PARENT oBrowse1

@ 1,1 DCBROWSE oBROWSE2 DATA a SIZE 100,20 HIDE {||!lShowBrowse2}
DCBROWSECOL ELEMENT 2 HEADER "Test2" WIDTH 20 PARENT oBrowse2

@ 22,1 DCPUSHBUTTON CAPTION 'Toggle' SIZE 10,1 ACTION {||lShowBrowse1:=!lShowBrowse1,lShowBrowse2:=!lShowBrowse2,DC_GetRefresh(GetList)}

DCREAD GUI FIT ADDBUTTONS OPTIONS GetOptions PARENT @oDialog EVAL {||oDialog:Show()}

RETURN NIL
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

Code: Alles auswählen

********************************************************************************
         DCGETOPTIONS;
           AUTORESIZE;
               BORDER XBPDLG_SIZEBORDER;
                 BUSY "Daten werden geladen";
                COLOR oSysPara:doParaWS:dialog_hg;
            COLORGETS {oSysPara:doParaWS:colorgets_aktiv,oSysPara:doParaWS:colorgets_inaktiv};
              GETFONT oVtpara:us_font_menue;
              HIDE;
           HILITEGETS oSysPara:doParaWS:hilitegets;
          NOESCAPEKEY;
          NOMAXBUTTON;
          NOMINBUTTON;
                PIXEL;
         PRESENTATION oVtPara:aPresGet;
              SAYFONT oVtpara:us_font_menue;
           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 oDialogZusatz:nFensterBreite;
         WINDOWHEIGHT oDialogZusatz:nFensterHoehe

         DCREAD GUI;
               EVAL {|| oDialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED),;
                        oDialogZusatz:setzePbButton(x_wechsel,oDialog,x_filter,@getlist),;
                        passeBreiteAn(oDialogZusatz),;                          /* oDialogZusatz:MausImKopf(2,"dat_buc",,.T.),; */
                        oDialogZUsatz:aktualisiereBrowse(oDialogZUsatz:oJo),;
                        SetAppFocus(oDialogZusatz:oBrowse);
                    };
              MODAL;
            OPTIONS GetOptions;
             PARENT @oDialog;
              TITLE sag_kopf( oVtPara:N_JOURNAL + x_filter , "JTNR" )
wo ist der Unterschied?
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

wo ist der Unterschied?
Ich sehe kein oDialog:Show(), aber auch überhaupt kein DCBROWSE (muss ich auch nicht). Hast Du mein Beispiel ausprobiert? Was macht Dein Code genau? Was siehst Du? Nix? Alles? Teile?
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

ach so, sorry. Hide versteckt gar nichts. es ist so, als wenn ich es überhaupt nicht benutzen würde. Ich habe DIch/die ANleitung doch so verstanden, das der gesamte Dialog erstmal nicht zu sehen sein dürfte/sollte. Er ist es aber.
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Doch, tut es. Nimm mal aus meinem Dialog das "oDialog:Show()" aus der EVAL-Klausel des Dialogs, und Du siehst nix. Du kannst das Programm nur noch über die Taskleiste beenden. Wenn es bei Dir anders ist, ist irgendwas im Code falsch.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

ok, in einem anderen Programm klappt es. Das muß ich jetzt mal näher untersuchen, was das wieder für ein Mist 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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

kann man die Browser nicht während des Betriebs austauschen? Also eine Funktion statt des DCBROWSE in der dann jeweils der entsprechende Browser erstellt wird und dann durch irgendein Refresh oder so den jweils gewünschten browser reinholen und anzeigen? geht sowas innerhalb eines Dialogs mit DCREAD GUI?
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Das geht mit DC_MergeGetLists().
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

ok, und damit kann ich dann jeweils die browser gegeneinander austauschen? Das ist eigentlich das. was ich damit bezwecken möchte.
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Nein, Dinge aus der Getlist und aus den Childlists herauszupopeln, das ist recht aufwendig. Ich arbeite auch mit Hide() und Show() - und überlagere mehrere Browses. Das hat - je nach GUI-Performance - manchmal unschöne Seiteneffekte, aber da es das nur in sehr wenigen Dialogen gibt, leben wir bislang damit. DC_MergeGetLists() ist nur für die optionale Erweiterung eines Dialogs gedacht, nicht für das Gegenteil.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

ok, ich lese heraus, das Du evtl. das gleiche Flackern hast wie ich. Also muß ich erstmal damit leben.
In der Version, die ich gerade umbaue wird das in einer Do While Schleife mit Appbrowse gelöst. Das baut den brower jedesmal neu und da flackert es nicht.
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

Hallo, Manfred.

DCBROWSE ist sowieso, äh, flackeranfällig. Ich durchstöbere die Klasse schon seit einer Weile, da gibt es m.E. hier und da ein RefreshAll() zu viel.
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2750
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Wolfgang Ciriack »

Hallo Manfred,
ich würde darauf tippen, dass dein BUSY "Daten werden geladen" dein HIDE aushebelt.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

Wolfgang,
das ist es auch nicht. Wenn ich Busy ausbaue und dann wie Tom zu Anfang ein Hide mache, dann wird der Dialog zwr erst später aktiv, aber es werden dann trotzdem ert die ganzen browser aufgebaut und die wecken dann den Anschein beim Anwender, als wenn alles flackern würde, weil eben mehrere erzeugt und dann direkt versteckt werden.
D.h. also nachdem alles fertig ist, werden erst die Browser aufgebaut
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

wo ist der Unterschied?
HIDE als Option in DCGETOPTIONS bewirkt, dass die Objekte erzeugt werden, aber die ganze GUI-Schose wartet, um dann beim Show() des Dialogs nachgeholt zu werden. Die HIDE-Klausel beim Control selbst bedeutet, dass es aufgebaut wird (mit GUI) und dann versteckt.

XbpBrowses sind im Vergleich zu anderen Grids in vielerlei Hinsicht problematisch. Ich hatte ja gehofft, dass sich da mit der vollständigen Neuprogrammierung, die es mit/in Xbase++ 2.0 gab, einiges ändert. Ist aber leider nicht der Fall. Abwärtskompatibilität ist ein Killer.
Herzlich,
Tom
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 918
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 12 Mal
Danksagung erhalten: 5 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von HaPe »

Hallo Zusammen !

Es gibt in der Windows-API die Funktion LockWindowUpdate in der user32.dll.
Damit konnte ich auch in EXCEL-VBA das Flackern der Oberfläche minimieren.
--
Hans-Peter

Organisator der XUG Stuttgart
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 418
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 13 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Marcus Herz »

Die gibst auch als dBase Methode:lockupdate()
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2750
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 4 Mal
Danksagung erhalten: 7 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Wolfgang Ciriack »

aber es werden dann trotzdem ert die ganzen browser aufgebaut und die wecken dann den Anschein beim Anwender, als wenn alles flackern würde, weil eben mehrere erzeugt und dann direkt versteckt werden.
Dann stimmt in deinem Code etwas nicht, dann sind die Browser auch nicht mit HIDE richtig versehen.
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 20110
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 62 Mal
Danksagung erhalten: 29 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Manfred »

Wolfgang,
nur für den Fall,d as es hier irgendwo falsch rübergekommen ist. Das HIDE klappt, aber.....
Es werden erst alle Browser erzeugt und dann angezeigt nacheinander und dann ausgeblendet über HIDE. Und diese Flackerei, die nervt.
Das HIDE ansich funktioniert. Nur erst nachdem alles erzeugt wurde.
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 kannste sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8503
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 24 Mal
Danksagung erhalten: 101 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Tom »

LockUpdate() stackt nicht. Da Roger das in seinem Code auch nutzt, löst er jedes vorherige LockUpdate(.T.) mit nur einem einzigen LockUpdate(.F.).
Herzlich,
Tom
Benutzeravatar
Marcus Herz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 418
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 13 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von Marcus Herz »

Flackern ist wohl xbase spezifisch. In xclass haben wir da auch immer zu kämpfen...
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 918
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 12 Mal
Danksagung erhalten: 5 Mal

Re: DCBROWSE unsichtbar nach Erzeugung

Beitrag von HaPe »

Was ist, wenn man die Controls beim Erstellen erstmal auf TOP = -10000 setzt und diese erst dann an die gewünschte Position bringt wenn Sie angezeigt werden sollen?
So hatte ich ein widerspenstiges OCX txTextControl 25 einigermaßen im griff.
--
Hans-Peter

Organisator der XUG Stuttgart
Antworten