Seite 1 von 1
Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Do, 01.10.2009 09:00
von snickers
Hallo,
Ich starte über ein Dialogfenster ein Makro, welches wiederum verschiedene Untermakros aufruft.
Im unteren Bereich des Dialogfensters habe ich einen Fortschrittsbalken angebracht und darunter
ein Textfeld. In dem Textfeld werden parallel zum Fortschrittsbalken Statusmeldungen bzgl. des
Verlaufs der Makroausführung angezeigt.
An verschiedenen Stellen des Hauptmakro wird der Wert des Fortschrittsbalken erhöht und eine
zugehörige Meldung über das Textfeld ausgegeben. Z.B.:
oProgressBarModel.ProgressValue = 5
oSteuerZugriff = oDialog.getControl("Label7")
oSteuerZugriff.Text = "Datei '...' öffnen..."
..
..
oProgressBarModel.ProgressValue = 50
oSteuerZugriff = oDialog.getControl("Label7")
oSteuerZugriff.Text = "Daten konvertieren..."
..
..
oProgressBarModel.ProgressValue = 95
oSteuerZugriff = oDialog.getControl("Label7")
oSteuerZugriff.Text = "Datei '...' schließen..."
Falls die Textausgabe bei 5% und 50% deaktiviert wird, so erscheint die Meldung "Daten konvertieren..."
erst wenn der Fortschrittsbalken bei 50% oder 95% bereits ist.
Falls alle Textausgaben aktiviert sind, so werden einzelne Meldungen nicht ausgegeben.
Ist es möglich, dass der Code erst dann weiter ausgeführt wird, nachdem die Textausgabe auch wirklich
ausgeführt worden ist?
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Do, 01.10.2009 20:01
von Stephan
Ist es möglich, dass der Code erst dann weiter ausgeführt wird, nachdem die Textausgabe auch wirklich
ausgeführt worden ist?
Nein, wobei mir nicht so recht klar ist wie Du Textausgabe verstehen willst denn Du gibst keinen Text aus sondern änderst nur einen Eigenschaftswert eines Steuerelements, wobei, nach meiner ERfahrung, u.U. die Aktualisierung der Darstellung 'hängen' kann, aber trotzdem wird der Code weiterlaufen.
Ein Dialog kann mittels zwei Methoden angezeigt werden:
Dialog.Show()
Dialog.Execute()
Kannst Du bitte Code-Beispiele zum Aufruf mittels Dialog.Show() liefern und Code-Beispiele die das folgende Verhalten belegen:
Bei der Show Methode läuft das Makro weiter.
Bedeutet, während ein Dialog aufgerufen wurde, werden nur Ereignisse
der Steuerelemente auf dem Dialog ausgeführt, wenn der Dialog mit
Execute aufgerufen wurde.
Mir ist .Show() aus VBA bekannt, nicht jedoch aus StarBasic, und zu dem Hinweis das das Makro 'weiterlaufen' soll, weiß ich eigentlich auch nicht so recht was.
Gruß
Stephan
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Do, 01.10.2009 22:28
von keksi1970
ein dialog kann mit Dialog.visible = true angezeigt werden (mach ich immer mit dialogen, die nur eine Progressbar beinhalten, hab irgendwo hier mal n beispiel gepostet ! )
und mit .visible = false wieder unsichtbar gemacht werden.
auf die Steuerelemente hat man zugriff, so daß die Progressbar weiterläuft(und angezeigt wird), während man mit .execute alle weiteren aktionen aus dem Dialog heraus starten muß.
LG
>Andreas
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Fr, 02.10.2009 13:21
von snickers
Zum besseren Verständnis:
Ich habe einen Dialog mit einem Button designt. Beim Betätigen dieses Buttons wird mein Hauptmakro aufgerufen,
von dem aus Untermakros aufgerufen werden. Das Hauptmakro wird in einer Zeit von ca. 10Sekunden komplett
abgearbeitet. Während dieser Zeit läuft der Fortschrittsbalken von 0 nach 100% und es sollen 8 Statusmeldungen
darunter angezeigt werden.
Gleich zu Beginn des Hauptmakros wird die Anzeige des Fortschrittsbalken auf 5% gesetzt und darunter die Status-
Meldung "Datei '...' öffnen..." ausgegeben. Theoretisch sollten beide Ausgaben zeitgleich erfolgen. Praktisch liegt
zwischen beiden Ausgaben aber eine Zeitspanne von 3-4Sek.! Siehe Code:
oProgressBarModel.ProgressValue = 5
oSteuerZugriff = oDialog.getControl("Label7")
oSteuerZugriff.Text = "Datei '...' öffnen..."
Es muß so sein, dass die Anzeige des Text teilweise sehr verzögert aktualisiert wird.
Frage zu dem Zitat von Stephan:
"Nein, wobei mir nicht so recht klar ist wie Du Textausgabe verstehen willst denn Du gibst keinen Text aus sondern änderst nur einen Eigenschaftswert eines Steuerelements, wobei, nach meiner ERfahrung, u.U. die Aktualisierung der Darstellung 'hängen' kann, aber trotzdem wird der Code weiterlaufen."
Ihm scheint dieser Verzögerungseffekt bekannt zu sein.
Gibt man solche Statustexte über einen ganzen anderen Weg aus?
Da mir keine andere Vorgehensweise bekannt ist (Ich bin noch Anfänger unter den Makroprogrammierern), habe ich
im Dialog-Editor ein Label angeordnet, dessen Text-Eigenschaft ich ständig ändere.
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Sa, 03.10.2009 11:18
von Stephan
Frage zu dem Zitat von Stephan:
"Nein, wobei mir nicht so recht klar ist wie Du Textausgabe verstehen willst denn Du gibst keinen Text aus sondern änderst nur einen Eigenschaftswert eines Steuerelements, wobei, nach meiner ERfahrung, u.U. die Aktualisierung der Darstellung 'hängen' kann, aber trotzdem wird der Code weiterlaufen."
Ich habe schon Situationen erlebt wo die Darstellung eines Dialoges nicht richtig aktualisiert wurde, wenn die Text-Eigenschaft eines Label-Feldes zur Laufzeit geändert wurde.
Das hatte dann allerdings nichts mit Verzögerung zu tun, sondern es erfolgte dann garkeine Änderung. Wobei diese Aussage ganz genau betrachtet werden muß weil unter solchen Umständen das Ganze doch verzögert erscheinen kann weil andere Ereignisse Fokusänderungen beim Dialog hervorrufen unnd diese dann doch eine Aktualisierung der Anzeige des Labelfeldes bewirken. ES besteht als keine konkrete Verzögerung aber durch das Zusammenwirken der dinge sieht es so aus.
Wenn ich mich recht erinnere, und voraussetze das auch DEin dialog mit .Visible() aufgerufen wird, sollte es helfen den dialog nach der Änderung kurz auszublenden und wieder einzublenden, ungefähr also:
'
Code: Alles auswählen
...
oDialog.Visible = False
oProgressBarModel.ProgressValue = 50
oSteuerZugriff = oDialog.getControl("Label7")
oSteuerZugriff.Text = "Daten konvertieren..."
oDialog.Visible = True
'...
Gibt man solche Statustexte über einen ganzen anderen Weg aus?
Nein, DEin WEg ist einer unter verschiedenen Möglichkeiten, es spricht nichts gegen Deinen Weg.
Beispielsweise könntest du auch die statusleiste von OOo nutzen, beispielcode dazu stet bereits irgenwo hier im Forum, das ist aber nicht irgendwie 'besser' sondern nur eine andere Möglichkeit, die man verwenden kann aber nicht muß.
Gruß
Stephan
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Sa, 03.10.2009 11:33
von turtle47
Hallo Zusammen,
vielleicht hilft ja folgender
Beitrag weiter.
Schönes Wochenende.
Jürgen
Re: Textausgabe erscheint verzögert im Dialogfenster
Verfasst: Di, 06.10.2009 11:06
von snickers
Der Vorschlag mit dem Visible = True / False hat nicht zu dem gewünschten Effekt geführt. In diesem Fall war
der Dialog teilweise ausgeblendet, weil er nicht schnell genug wieder aktualisiert wurde.
Ich habe mir noch das Beispiel von Turtle47 angeschaut. Da fiel mir diese Pause mit "wait 40" nach jeder Aktualisierung
auf. Nachdem ich in meinem Code auch nach jeder Änderung der Statusinformation ein "wait 50" ergänzt habe,
funktioniert die Anzeige endlich korrekt. Juhu!