Fortschrittsbalken

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Fortschrittsbalken

Beitrag von erikafuchs »

Guten Abend,
da ist noch was, was ich nicht zum Laufen bekommen habe:
In meinem Programm wird ein Dialogfeld geöffnet "Dialog.execute()" und bei Klick auf das Feld "weiter" wird das Dialogfeld aktualisiert indem ein sub aufgerufen wird, danach wird das Programm nach dem "Dialog.execute()" Aufruf fortgesetzt - soweit alles klar. Jetzt hätte ich gerne einen Fortschrittsbalken, an dem man die abgelaufene Zeit sehen kann. Um sowas zu realisieren muss man ja ein entsprechendes Makro schreiben, mit dem den Fortschrittsbalken aktualisiert wird - da müssten jetzt aber doch zwei Programme parallel laufen - wie macht man das? Ich hoffe, ich habe mein Problem klar genug beschreiben können. Vielleicht ist es ja auch gar kein Problem sondern ein Denkfehler meinerseits. Ich habe das jedenfalls nicht hinbekommen.
Pit
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Fortschrittsbalken

Beitrag von komma4 »

Parallel geht nicht.

Du musst den Fortschrittsbalken innerhalb der arbeitenden Routine aufrufen/darstellen/fortschreiben.

In meiner Erweiterung BTL2 nutze ich die Statuszeile zur Ausgabe.
Möglich wäre -bei Dir- aber auch ein Fortschrittsbalken im Dialog.


Beispiele findest Du auch in den mitgelieferten Makros; Suchbegriff ProgressBar StatusIndicator


Das hilft Dir weiter?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: Fortschrittsbalken

Beitrag von ejomi »

komma4 hat geschrieben:Parallel geht nicht.
... geht! (Stichwort "non modal")

Einen schönen guten Abend erikafuchs!

Eine "non-modales" Dialogfenster kann mit "oDialog.setVisible(True)" statt mit "oDialog.execute()" erzeugt werden - juhu!

Während bei "Execute()" das Makro abstoppt und auf die Schließen-Aktion des Dialogfensters wartet, läuft nach "setVisible" das Makro normal weiter. Das non-modale Dialogfenster bleibt dann solange "schwebend" auf dem Bildschirm, bis das Makro abgearbeitet ist. Vor dem Ende dieses Start-Makros können natürlich problemlos weitere Subs angesprungen werden. Wichtig ist nur, daß "oDialog" (= Objekt zum Dialogfenster) als globale Variable deklariert wurde. Damit können dann aus jeder beliebigen Subroutine heraus (welche z.B. die eigentlichen Programm-Aufgaben erledigen) jederzeit die Controls des geöffneten Dialogfensters mittels oDialog.getControl("NameDesControls") angesteuert und dynamisch verändert werden - also auch die Progressbar oder was auch immer!

Es gibt nur ein kleines Problem mit der "X-Schaltfläche" (= schließen, Titelleiste oben rechts), weil die nämlich hier nicht mehr funktioniert. Man muß also eine separate Schaltfläche "Schließen" im Dialogfenster einfügen, dieser aber NICHT die Eigenschaft "Abbrechen" sondern eine weitere Sub zuordnen, welche dann das Dialog-Objekt eigenständig "killt". Auch dazu findet wieder die globale Objekt-Variable oDialog Verwendung: Mit dem Befehl "oDialog.dispose" kann das non-modale Dialogfefenster von jeder Sub aus geschlossen werden (Achtung: "oDialog.endExecute" generiert bei non-modalen Fenstern einen Fehler - man kann hier also nur "dispose" verwenden!) .

Übrigens: Ein schöner Nebeneffekt non-modaler Dialogfenster ist die Möglichkeit, gleichzeitig den Fokus auf die darunterliegenden Fenster setzen zu können und dort ungehindert weiterarbeiten zu können - das Dialogfenster bleibt unbeeindruckt über allem schweben! Wer das nicht möchte, kann noch in die Trickkiste greifen und den Befehl "oDialog.execute()" im Start-Makro nachschieben - damit wird das Dialogfenster wieder "modal", hat aber weiterhin die Funktionalität eines non-modalen Fensters!

Ich hoffe, ich hab' mich halbwegs verständlich ausgedrückt - viel Spaß beim Ausprobieren!

Gruß: ejomi (der jetzt endlich Feierabend macht!)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Hallo Ihr Lieben,
das hätte ich nicht gedacht. Das klingt ja so, als ginge das doch!
Beispiele findest Du auch in den mitgelieferten Makros; Suchbegriff ProgressBar StatusIndicator
Wo sind die?
Eine "non-modales" Dialogfenster kann mit "oDialog.setVisible(True)" statt mit "oDialog.execute()" erzeugt werden - juhu!
da staunt der Fachmann und der Laie wundert sich! Woher weißt du sowas?
... das dauert jetzt etwas, bis ich das ausprobiert habe!
Vielen Dank erstmal!
Pit
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Fortschrittsbalken

Beitrag von komma4 »

BASIC kann nicht parallel - auch nicht mit der nicht-modalen Anzeige eines Dialoges.

Pit: installiere Dir meine Extension BTL2 und starte sie.

BTL2 hat geschrieben:Gibt den Text aller vorhandenen BASIC-Module aus allen installierten Bibliotheken und allen aktuell geladenen Dokumenten in ein Writer-Dokument aus.

Generiert aus dem Text der hier installierten Basic-Module ein etwa 800 Seiten Writer­-Dokument in ca. 4 Sekunden; inkl. Inhaltsverzeichnis.

OOo V2 Extension: benötigt OOo Version 3.0 oder grösser

Ausführen:
starte BasicTextListe2 aus Modul BTL2 der Bibliothek BTL2

+ zusätzliche Ausgabe der Basic-Bibliotheken aktuell geladener Dokumente, auch von Base-Formularen
+ eine Progressbar in der Statuszeile von OOo gibt Auskunft über Fortschritt der Bearbeitung
+ Kopfzeilenaufbau ergänzt:
Bereich: Bereichsbezeichnung Bibliothek: Bibliothekenname Modul: Modulname

+ in den Datei>Eigenschaften wird der Computername und der Name des angemeldeten Benutzers ausgegeben
In dem Dokument lässt es sich leichter suchen als in den Modulen selbst (finde ich).
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
F3K Total
********
Beiträge: 3719
Registriert: Mo, 28.02.2011 17:49

Re: Fortschrittsbalken

Beitrag von F3K Total »

Moin,
komma4 hat geschrieben:BASIC kann nicht parallel - auch nicht mit der nicht-modalen Anzeige eines Dialoges.
Stimmt, ich konnte auch keine "Uhr" zum Laufen bringen. Denn wenn "wait" läuft, wartet alles andere auch.
Darum läuft bei mir jetzt beanshell für den Zeit-Trigger parallel, siehe hier
Viel Erfolg, Gruß R
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Fortschrittsbalken

Beitrag von balu »

Hallo Jens,

das englische Forum scheint momentan nicht erreichbar zu sein. Hat also nix mit dem Link zu tun, sondern mit dortigen technischen Problemen.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: Fortschrittsbalken

Beitrag von ejomi »

F3K Total hat geschrieben:Zeit-Trigger parallel, siehe hier
Zur Info: Das englische OO-Forum ist schon seit einigen Wochen nicht mehr erreichbar - offenbar haben die ihren Betrieb eingestellt. Falls Jemand Interesse hat, kann ich gerne das Original BeanShell-Skript in einem separaten Thread zur Verfügung stellen - ich benutze es schon seit langem für eine spezielle Kalender-Funktion.

Jedoch gehört der Hinweis von F3K Total zu diesem Skript überhaupt nicht zum Thema! Wir wollen doch hier keine Haare spalten, was man unter "parallel" versteht oder auch nicht! Prinzipiell kann man unter BASIC "quasi-parallele" Prozesse z.B. mit Event-Handlern/Listenern verwirklichen - und das erwähnte Skript zeigt, wie diese Technik funktioniert.

Aber wie ich schon sagte: Darum ging es erikafuchs - nach meinem Verständnis - überhaupt nicht! Die Frage war doch, wie man in einen Dialogfenster laufende Prozesse mit einer Progressbar visualisieren kann. Dafür ist eine non-modale Dialogbox völlig ausreichend!

Bevor ich mich hier in seitenlange Romane verliere, habe ich kurzerhand mal ein Beispiel in einem Writer-Dokument eingehämmert (NonModalDialogBeispiel.odt). Es zeigt - oh Wunder - eine laufende Uhr aber ohne irgendwelches Event-Handling! Und man kann "parallel" tatsächlich anderen Code ausführen lassen und sogar gleichzeitig auf dem Writer-Dokument herumschreiben während die Uhr läuft! Dort ist auch ein Fortschrittsbalken realisiert, der die ablaufenden Sekunden darstellt - das wäre dann wieder was für erikafuchs, denke ich.

Ich habe das Makro mit ausführlichen Erläuterungen auskommentiert und hoffe, dass es allgemein verständlich geblieben ist.

Viel Spaß damit, wünscht:
ejomi
Dateianhänge
NonModalDialogBeispiel.odt
NonModalDialogBeispiel.odt = Eine laufende Uhr mal anders!
(15.83 KiB) 315-mal heruntergeladen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Fortschrittsbalken

Beitrag von komma4 »

Will jetzt echt keine Haare spalten, aber...
ejomi hat geschrieben:Das englische OO-Forum ist schon seit einigen Wochen nicht mehr erreichbar
das ist definitiv falsch.

Bin bei oooforum.org Moderator und habe gestern noch einige SPAM-Threads gelöscht. War langsam, aber machbar.
Heute reagiert der Server nicht.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: Fortschrittsbalken

Beitrag von ejomi »

komma4 hat geschrieben:Bin bei oooforum.org Moderator ...
Na - dann scheint ihr aber zumindest ganz massive, technische Probleme zu haben!

So, und nun von wegen "Haare spalten" (hab' nämlich mal gerade mal meine Mails durchforstet):
Ich hatte am 22.10.2012 (also vor 2 1/2 Wochen) in der oo-users Mailingliste nachgefragt, wieso die Seite nicht erreichbar ist. Einige Tage später kam die selbe Frage auch von einem anderen User. Und - wie wir alle festgestellt haben - ist die Seite auch heute nicht erreichbar.

Mein lieber komma4 - man kann aber auch wirklich alles in Frage stellen!

Gruß: ejomi

P.S.
Was hat das alles eigentlich mit dem Problem von erikafuchs zu tun? ... nix!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Fortschrittsbalken

Beitrag von komma4 »

Ja: die Seite hat technische Probleme der Erreichbarkeit.
Ja: das Problem besteht seit längerem.

Nein: die Seite ist NICHT off-line.
Nein: das hat nix mit Pits Problemen zu tun.

Ich bin -wie gesagt- nur Moderator, nicht Betreiber der Seite oder mit dem Betreiber in gutem Kontakt.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
F3K Total
********
Beiträge: 3719
Registriert: Mo, 28.02.2011 17:49

Re: Fortschrittsbalken

Beitrag von F3K Total »

Guten Abend,
habe ich da was falsch verstanden?
erikafuchs hat geschrieben:Jetzt hätte ich gerne einen Fortschrittsbalken, an dem man die abgelaufene Zeit sehen kann.
Ich denke, dafür benötigt man eine Uhr, worauf ich zum englischen Forum verwiesen habe, weil ich auch mal ein Dokument hatte, bei dem ich eine Uhr brauchte, die kontinuierlich läuft, obwohl ich ständig andere Makros laufen lassen musste.
ejomi hat geschrieben:Jedoch gehört der Hinweis von F3K Total zu diesem Skript überhaupt nicht zum Thema!
Aus meiner Sicht schon, denn Deine Uhr bleibt stehen, wenn nur eine Msgbox geöffnet wird. Guter Trick, sie solange auszublenden;-)

Gruß R

PS:
F3K Total hat geschrieben:hier
... hatte ich heute morgen (6.18 Uhr) versucht und ging ...
ejomi
***
Beiträge: 84
Registriert: Mi, 06.09.2006 15:20

Re: Fortschrittsbalken

Beitrag von ejomi »

F3K Total hat geschrieben: ...denn Deine Uhr bleibt stehen, wenn nur eine Msgbox geöffnet wird. Guter Trick, sie solange auszublenden;-)
... das hat mit "Trickserei" überhaupt nichts zu tun. Ich blende an dieser Stelle den Dialog nur deshalb aus, damit die MsgBox nicht versehentlich dahinter verschwindet. Daß eine MsgBox ein normales Makro immer anhält, ist doch nun wirklich nichts neues. Die MsgBox in meinem Beispiel soll nur zeigen, dass hier tatsächlich eine weitere Subroutine aufgerufen wurde - mehr nicht.

Stellen wir uns vor, dass statt meiner MsgBox irgendeine Hintergrundfunktion gestartet wird - z.B. eine komplexe Berechnung diverser Werte einer Calc-Tabelle oder ähnliches - dann braucht das Dialogfenster natürlich überhaupt nicht ausgeblendet zu werden. Dort könnten dann z.B. extrem lange Rechenphasen per Fortschrittsbalken visualisiert und von Fall zu Fall auch die Uhrzeit ebenfalls mit aktualisiert werden.

Nun wissen wir ja leider nicht, was erikafuchs für ein Programm betreiben will und welche Art Zeitmessung sie im Sinn hat. Ich bin davon ausgegangen, daß im Bürobetrieb normalerweise keine Strontium-Uhr erwartet wird (Abweichung in 200 Millionen Jahren = 1 Sekunde). Es fällt doch im Alltag überhaupt nicht auf, falls die Uhr mal einen kurzen Moment hinterher hinkt - Hauptsache das Gesamtbild stimmt.

Selbstverständlich ist diese Technik nicht für exakte Zeitmessungen geeignet. Es handelt sich vielmehr um eine für Laien leicht durchschaubare und schnell programmierbare Lösung - und bitte, nur darum ging es doch hier!

Gruß: ejomi
F3K Total hat geschrieben:PS: hier ... hatte ich heute morgen (6.18 Uhr) versucht und ging ...
... soeben versucht: 15:30 Uhr - ging nicht!
F3K Total
********
Beiträge: 3719
Registriert: Mo, 28.02.2011 17:49

Re: Fortschrittsbalken

Beitrag von F3K Total »

Hi ejomi,
F3K Total hat geschrieben:Es handelt sich vielmehr um eine für Laien leicht durchschaubare und schnell programmierbare Lösung
,
Gut! Soll Pit sich aus dem bunten Strauss nun nehmen was er braucht.

Gruß Rik
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Vielen Dank,
da habe ich ja jetzt was zu tun!
Grüße
Pit
Antworten