Aktivitätsanzeige
Moderator: Moderatoren
Aktivitätsanzeige
Hallo,
ich habe ein länger laufendes Script und würde gerne eine "Aktivitätsanzeige" einbauen, die zeigt, daß das Script noch arbeitet. Gibt es dazu eine einfache Idee? Irgendeine Ausgabe durch eine Msgbox würde reichen. Aber die bildet ja leider ein modales Fenster, das das Script unterbricht.
Gruss, wonk
ich habe ein länger laufendes Script und würde gerne eine "Aktivitätsanzeige" einbauen, die zeigt, daß das Script noch arbeitet. Gibt es dazu eine einfache Idee? Irgendeine Ausgabe durch eine Msgbox würde reichen. Aber die bildet ja leider ein modales Fenster, das das Script unterbricht.
Gruss, wonk
Re: Aktivitätsanzeige
z.B. ein nicht-modales Fenster zur Laufzeit erzeugen:
stoppen mit:
Gruß
Stephan
Code: Alles auswählen
Dim warten_dialog As Object
Sub erzeuge_warten()
warten_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
warten_model.setPropertyValue("Width", 150) '343
warten_model.setPropertyValue("Height", 20)
warten_model.SetPropertyValue("Title","Bitte etwas Geduld")
oMod_warten = warten_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
With oMod_warten
.setPropertyValue("Name","warten1")
.setPropertyValue("PositionX",5) '192
.setPropertyValue("PositionY",5)
.setPropertyValue("Width",140)
.setPropertyValue("Height",13)
.setPropertyValue("Label","Formatierung wird gelesen ...")
'.setPropertyValue("Align",1)
'nicht verfügbar in OOo 1.x
'.setPropertyValue("VerticalAlign",1)
End With
warten_model.insertByName("warten1", oMod_warten)
warten_dialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
warten_dialog.setModel(warten_model)
oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
warten_dialog.createPeer(oWin2, null)
warten_dialog.setVisible(True)
End Sub
stoppen mit:
Code: Alles auswählen
warten_dialog.setVisible(False)
Gruß
Stephan
Re: Aktivitätsanzeige
Hallo,
danke, funktioniert so. Allerdings verstehe ich es trotz Doku-Studium nicht (dummy). Vielleicht kannst Du noch schreiben, wie ich das Fenster in der aufrufenden Prozedur wieder zu machen! Die Fenster von meinen Tests sind alle noch offen, ich kann sie auch mit dem Schließkästchen nicht zumachen.
Das Fenster ist auf dem BS oben in der Mitte. Wenn ich Positionx/y verändere verschiebt sich das Fenster aber nicht .
Vielleicht sollte ich noch sagen, daß mein Script gar kein eigenes sichtbares Fenster hat, nur zum Schluß rufe ich msgbox "Beendet!"auf.
Habe schon versucht ein Dialogfenster als Parent zu erzeugen:
Dann bekomme ich aber "DlgDef nicht gefunden".
Gruss, wonk
danke, funktioniert so. Allerdings verstehe ich es trotz Doku-Studium nicht (dummy). Vielleicht kannst Du noch schreiben, wie ich das Fenster in der aufrufenden Prozedur wieder zu machen! Die Fenster von meinen Tests sind alle noch offen, ich kann sie auch mit dem Schließkästchen nicht zumachen.
Das Fenster ist auf dem BS oben in der Mitte. Wenn ich Positionx/y verändere verschiebt sich das Fenster aber nicht .
Vielleicht sollte ich noch sagen, daß mein Script gar kein eigenes sichtbares Fenster hat, nur zum Schluß rufe ich msgbox "Beendet!"auf.
Habe schon versucht ein Dialogfenster als Parent zu erzeugen:
Code: Alles auswählen
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Gruss, wonk
Zuletzt geändert von wonk am Sa, 19.08.2017 21:17, insgesamt 1-mal geändert.
Re: Aktivitätsanzeige
Das habe ich doch bereits extra hingeschrieben, Schreibe an de Stelle DEines Codes wo das Fenster wieder schliessen soll:Vielleicht kannst Du noch schreiben, wie ich das Fenster in der aufrufenden Prozedur wieder zu machen!
Code: Alles auswählen
warten_dialog.setVisible(False)
richtig, denn dazu müsste zusätzlich ein entsprechender sog. Listener registriert werden, aber für eine Fortschrtittsdialog ist das doch wohl unnötig.ich kann sie auch mit dem Schließkästchen nicht zumachen.
Gruß
Stephan
Re: Aktivitätsanzeige
Hallo,
sorry, jetzt hatte ich an meinem Beitrag darüber noch editiert. Wie auch immer:
Ich bekomme beim Schließen des Fensters einen Fehler, denn die Variable "warten_dialog" ist doch in der aufrufenden Prozedur nicht bekannt. Ich müßte sie wohl dort erzeugen!? Das "Dim" in der aufrufenden Prozedur hatte ich gemacht.
Und nochmal den Teil, den ich im letzten Post später eingefügt habe:
Das Fenster ist auf dem BS oben in der Mitte. Wenn ich Positionx/y verändere verschiebt sich das Fenster aber nicht .
Vielleicht sollte ich noch sagen, daß mein Script gar kein eigenes sichtbares Fenster hat, nur zum Schluß rufe ich msgbox "Beendet!"auf.
Habe schon versucht ein Dialogfenster als Parent zu erzeugen:
Dann bekomme ich aber "DlgDef nicht gefunden".
Gruss, wonk
sorry, jetzt hatte ich an meinem Beitrag darüber noch editiert. Wie auch immer:
Ich bekomme beim Schließen des Fensters einen Fehler, denn die Variable "warten_dialog" ist doch in der aufrufenden Prozedur nicht bekannt. Ich müßte sie wohl dort erzeugen!? Das "Dim" in der aufrufenden Prozedur hatte ich gemacht.
Und nochmal den Teil, den ich im letzten Post später eingefügt habe:
Das Fenster ist auf dem BS oben in der Mitte. Wenn ich Positionx/y verändere verschiebt sich das Fenster aber nicht .
Vielleicht sollte ich noch sagen, daß mein Script gar kein eigenes sichtbares Fenster hat, nur zum Schluß rufe ich msgbox "Beendet!"auf.
Habe schon versucht ein Dialogfenster als Parent zu erzeugen:
Code: Alles auswählen
DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.DlgDef)
Dlg.Execute()
Gruss, wonk
Re: Aktivitätsanzeige
Hallo wonk,
Du beschreibst hier irgendetwas, was wir nicht nachvollziehen können. Und wenn man mit selbsterstellten Dialogen arbeitet, und ich spreche hier jetzt nicht von einer Messagebox oder ähnliche, dann gibt es reichlich Stolperfallen.
Mit deinen 3 Zeiler-Code können wir hier nix anfangen, dazu wäre eine Beispieldatei wirklich von Vorteil.
Gruß
balu
Du beschreibst hier irgendetwas, was wir nicht nachvollziehen können. Und wenn man mit selbsterstellten Dialogen arbeitet, und ich spreche hier jetzt nicht von einer Messagebox oder ähnliche, dann gibt es reichlich Stolperfallen.
Hast Du wirklich die Variablendeklaration (Dim) für den Dialog IN einer Sub geschrieben, oder außerhalb der Sub ganz zu Anfang des dementsprechendem Modul? Und nein! Das ist keine blöde Haarspalterei, sondern extrem wichtig zu wissen wie Du wo was machst.Das "Dim" in der aufrufenden Prozedur hatte ich gemacht.
Mit deinen 3 Zeiler-Code können wir hier nix anfangen, dazu wäre eine Beispieldatei wirklich von Vorteil.
Tja, und eine MsgBox kannst Du nicht so einfach handeln wie ein selbst erstellten Dialog, denn das sind zwei verschiedene Paar Schuhe.Vielleicht sollte ich noch sagen, daß mein Script gar kein eigenes sichtbares Fenster hat, nur zum Schluß rufe ich msgbox "Beendet!"auf.
Wie gesagt, ohne Beispieldatei wirds extrem schwer irgendwie zu helfen, bis hin zu unmöglich.Habe schon versucht ein Dialogfenster als Parent zu erzeugen:
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
wehr rächtschraipfähler findet khan si behalden
Re: Aktivitätsanzeige
Ich hatte AUSDRÜCKLICH darauf hingewiesen das das AUSSERHALB der Prozedur geschehen muss!Das "Dim" in der aufrufenden Prozedur hatte ich gemacht.
Nebenher ist wohl mein Dim nicht ausreichend sondern es muss ein Global sein.
Hier ist ein vollständiger Code wo auch das [x] im Dialog funktioniert. Dein Code zum Arbeiten müsste in Sub hier_wird_gearbeitet() stehen und die Variable "ende" ist hier nur nötig, um für die Spielerei mit dem Schliessenkreuz das andere Makro sofort (10ms) zu beenden.
Code: Alles auswählen
Global warten_dialog As Object
Dim ende
Sub erzeuge_warten()
warten_model = CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
warten_model.setPropertyValue("Width", 150) '343
warten_model.setPropertyValue("Height", 20)
warten_model.SetPropertyValue("Title","Dialog schliesst nach 10 Sekunden ...")
oMod_warten = warten_model.createInstance("com.sun.star.awt.UnoControlFixedTextModel")
With oMod_warten
.setPropertyValue("Name","warten1")
.setPropertyValue("PositionX",5) '192
.setPropertyValue("PositionY",5)
.setPropertyValue("Width",140)
.setPropertyValue("Height",13)
.setPropertyValue("Label","... oder klicken Sie auf [x]")
End With
warten_model.insertByName("warten1", oMod_warten)
warten_dialog = CreateUnoService("com.sun.star.awt.UnoControlDialog")
warten_dialog.setModel(warten_model)
warten_dialog.addTopWindowListener(CreateUnoListener("WindowListener_", "com.sun.star.awt.XTopWindowListener"))
oWin2 = CreateUnoService("com.sun.star.awt.Toolkit")
warten_dialog.createPeer(oWin2, null)
warten_dialog.setVisible(True)
hier_wird_gearbeitet()
warten_dialog.setVisible(false)
End Sub
Sub hier_wird_gearbeitet()
For i = 1 To 1000
Wait 10
If ende = 1 Then Exit Sub
Next i
End Sub
Sub WindowListener_disposing(event)
End Sub
Sub WindowListener_windowOpened(event)
End Sub
Sub WindowListener_windowClosing(event)
warten_dialog.setVisible(false)
ende = 1
End Sub
Sub WindowListener_windowClosed(event)
End Sub
Sub WindowListener_windowMinimized(event)
End Sub
Sub WindowListener_windowNormalized(event)
End Sub
Sub WindowListener_windowActivated(event)
End Sub
Sub WindowListener_windowDeactivated(event)
End Sub
Stephan
Re: Aktivitätsanzeige
Hallo,
vielen Dank für den Service. Mit
funktioniert es. Mein Script braucht dazu auch kein eigenes Fenster. Den Listener habe ich jetzt weggelassen, da das Fenster mit dem Beenden des Scripts auch geschlossen wird. Das Problem der nicht schliessbaren Fenster ist nur vorher aufgetaucht, wenn das Script abgestürzt ist.
Außerdem kann ich mit z.B.
das Fenster noch positionieren.
Gruss, wonk
vielen Dank für den Service. Mit
Code: Alles auswählen
Global warten_dialog As Object
Außerdem kann ich mit z.B.
Code: Alles auswählen
warten_model.setPropertyValue("PositionX",100)
warten_model.setPropertyValue("PositionY",100)
Gruss, wonk