Makro -> Bildschirmmeldung während einer Schleife

Hallo *,

kennt jemand eine Lösung für folgendes Problem:
Ich habe ein Makro mit einer Schleife geschrieben und möchte, dass während der Schleife eine Bildschirmmeldung erscheint. Mit "print" oder "msgbox" ist dies IMHO nicht realisierbar, da beide Funktion immer auf eine Eingabe warten und diese Eingabe nicht durch das Makro selbst gesteuert werden kann.
Die "kontinuierliche Anzeige" kann ja mit einem kleinen Trick gelöst werden. Aber das Problem der Bildschirmmeldung kann ich nicht lösen.

Die Syntax lautet:
sub Bildschirmmeldung
dim document as object
dim dispatcher as object
Dim i As Integer
Dim TimeS as double
Dim TimeWait as double
TimeWait=0.1
For i = 0 To 5
TimeS=Timer
Do
'msgBox ("Timer läuft", 0, "Hinweis")
print "Timer läuft"
Loop Until Timer>=TimeS+TimeWait
Next i
end sub

Gruß

Jochen

LO: LibreOffice 3.4.4 OOO340m1 (Build:402)
OS: Windows 7 Prof 64 Bit

Hallo Jochen,

Ich habe ein Makro mit einer Schleife geschrieben und möchte, dass
während der Schleife eine Bildschirmmeldung erscheint. Mit "print"
oder "msgbox" ist dies IMHO nicht realisierbar, da beide Funktion
immer auf eine Eingabe warten und diese Eingabe nicht durch das
Makro selbst gesteuert werden kann.

Wie wär´s mit einem Dialog, statt einer Messagebox?

Gruß

Stefan

Hallo Jochen,

Jochen schrieb:

Hallo *,

kennt jemand eine Lösung für folgendes Problem:
Ich habe ein Makro mit einer Schleife geschrieben und möchte, dass
während der Schleife eine Bildschirmmeldung erscheint. Mit "print" oder
"msgbox" ist dies IMHO nicht realisierbar, da beide Funktion immer auf
eine Eingabe warten und diese Eingabe nicht durch das Makro selbst
gesteuert werden kann.
Die "kontinuierliche Anzeige" kann ja mit einem kleinen Trick gelöst
werden. Aber das Problem der Bildschirmmeldung kann ich nicht lösen.

Wenn du die Anzeige in einem Fenster nicht möchtest, dann könntest du ein Dokument anlegen und die Anzeige in dem Dokument machen.

Ansonsten fällt mir nur ein, den Text in die Titelleiste des Applikation-Window zu schreiben. Das wäre dann ein
StarDesktop.CurrentFrame.Title

Mit freundlichen Grüßen
Regina

Hallo Stefan,

Ich habe ein Makro mit einer Schleife geschrieben und möchte, dass
während der Schleife eine Bildschirmmeldung erscheint. Mit "print"
oder "msgbox" ist dies IMHO nicht realisierbar, da beide Funktion
immer auf eine Eingabe warten und diese Eingabe nicht durch das
Makro selbst gesteuert werden kann.

Wie wär´s mit einem Dialog, statt einer Messagebox?

o.k. Idee habe ich aufgegriffen. Bis jetzt verhält sich aber der Dialog genauso wie "print" oder "msgbox", d.h. wartet auf eine Eingabe. Aber da muss ich noch "Forschungsaufwand" betreiben - außer Du oder jemand andere weiß eine Lösung, wie der Dialog automatisch beendet werden kann.

@Regina:
Die Idee mit dem Dokument hatte ich auch schon. Problem: wenn Makro auf einem Rechner verwendet wird, auf dem diese Datei nicht abgespeichert ist, funktioniert dieses Konzept nicht.
Auch die Idee, den Text in die Titelleiste des Applikation-Window zu schreiben, hatte ich auch schon. Problem: eine Message-Box bzw. ein Dialog ist nicht zu übersehen - eine Titelleiste schon.

Gruß

Jochen

Hallo
Beenden eines Dialogs:
Dialog wählen (heißt Dialog1)

  DialogLibraries.LoadLibrary("Standard")
  oDlg1=CreateUnoDialog(DialogLibraries.Standard.Dialog1)

und beenden:

oDlg1.EndExecute(True)

Gruß Frieder

Hallo Frieder,

Beenden eines Dialogs:
Dialog wählen (heißt Dialog1)
DialogLibraries.LoadLibrary("Standard")
oDlg1=CreateUnoDialog(DialogLibraries.Standard.Dialog1)
und beenden:
oDlg1.EndExecute(True)

Ich habe jetzt den Quellcode gemäß Deines Vorschlags angepasst, d.h. "oDlg1.EndExecute(True)" eingefügt.
Den Befehl für das Wählen des Dialogs habe ich nicht integriert, da ich nicht verstehe, warum dies bei meinem Beispiel nötig ist.
Leider wird dadurch der Dialog nicht beendet. Was mache ich falsch?

sub Bildschirmmeldung
dim document as object
dim dispatcher as object
Dim i As Integer
Dim TimeS as double
Dim Time Wait as double
TimeWait=0.1
For i = 0 To 5
TimeS=Timer
Do
Dim oDlgModel As Object
Dim oWindow As Object
dim oDlg As Object
oDlgModel=CreateUnoService("com.sun.star.awt.UnoControlDialogModel")
oDlgModel.PositionX = 50
oDlgModel.PositionY = 50
oDlgModel.Width = 150
oDlgModel.Height = 150
oDlgModel.Title = "Timer läuft"
oDlg = CreateUnoService("com.sun.star.awt.UnoControlDialog")
oWindow = CreateUnoService("com.sun.star.awt.Toolkit")
oDlg.setModel(oDlgModel)
oDlg.createPeer(oWindow, null)
oDlg.execute()
oDlg.EndExecute(True)
Loop Until Timer>=TimeS+TimeWait
Next i
end sub

Gruß

Jochen

Hallo Jochen

oDlg.execute()
oDlg.EndExecute(True)

so kann das leider nicht gehen.
du mußt den Dialog per Hand im der Bibliothek Standard dort erstellen.
Der Dialog hat den Name "Dialog1", und enthäld ein Textfeld mit dem Name "Label1".

Nun kannst du mit einem Trick arbeiten:
Du verknüpfst das Ereignis "Bei Fokuserhald " des Dialogs mit dem Makro "Timmer", und startest das makro "Dlg1"
'***BASIC***

Global oDlg1 as object

Sub Dlg1

  DialogLibraries.LoadLibrary("Standard")
  oDlg1=CreateUnoDialog(DialogLibraries.Standard.Dialog1)
  oDlg1.getControl("Label1").setText ("Timer läuft")
  on error resume next
  oDlg1.setFocus
  oDlg1.Execute(True)

End sub

Sub Timer
TimeWait=0.1
For i = 0 To 5
TimeS=Timer
Do
oDlg1.getControl("Label1").setText ("Timer läuft & i")
Loop Until Timer>=TimeS+TimeWait
oDlg7.EndExecute(True)
Next i

end sub

'Gruß Frieder

Hallo Jochen

Leider war in meinem Code von vorhin noch ein Fehler.

ich habe hier ein vollständiges Dokument mit Makro erstellt und online gestellt.

https://docs.google.com/open?id=0B0GTh9rnF-BPZjRhZTY0ZjEtYjM5Ni00MjRiLTkwZmEtZmUxNWYyNmY3ODA0

Gruß Frieder

Hallo Frieder,

Leider war in meinem Code von vorhin noch ein Fehler.
ich habe hier ein vollständiges Dokument mit Makro erstellt und online
gestellt.
https://docs.google.com/open?id=0B0GTh9rnF-BPZjRhZTY0ZjEtYjM5Ni00MjRiLTkwZmEtZmUxNWYyNmY3ODA0

Vielen Dank für die Bereitstellung der Muster-Datei. Jetzt verstehe ich langsam, was Du meinst.

Was ich noch nicht verstehe, ist der Ablauf des von Dir erstellten Makros.
Beim Klick auf das Button startet der Dialog - klar.
Aber was soll danach passieren? Mein Wunsch war ja, dass der Dialog nach einer Zeit X wieder automatisch beendet wird. Dies ist IMHO bei Deiner Muster-Datei nicht der Fall.

Gruß

Jochen

Hallo Jochen

Aber was soll danach passieren? Mein Wunsch war ja, dass der Dialog nach einer Zeit X wieder automatisch beendet wird. Dies ist IMHO bei Deiner Muster-Datei nicht der Fall.

Doch genau das tut er bei mir nach ca 6 Sekunden.

Gruß Frieder

Hallo Frieder,

Aber was soll danach passieren? Mein Wunsch war ja, dass der Dialog
nach einer Zeit X wieder automatisch beendet wird. Dies ist IMHO bei
Deiner Muster-Datei nicht der Fall.

Doch genau das tut er bei mir nach ca 6 Sekunden.

Das ist aber blöd. Bei mir tut sich nichts.

LO: LibreOffice 3.4.4 OOO340m1 (Build:402)
OS: Windows 7 Prof 64 Bit

Gruß

Jochen

Hallo *,

Aber was soll danach passieren? Mein Wunsch war ja, dass der Dialog
nach einer Zeit X wieder automatisch beendet wird. Dies ist IMHO bei
Deiner Muster-Datei nicht der Fall.

Doch genau das tut er bei mir nach ca 6 Sekunden.

Für Alle, die es interessiert:
Frieder verwendet die 3.3-Serie
Ich verwende die 3.4-Serie

Wenn die Beispieldatei, die Frieder mit der 3.3-Serie erstellt hat bzw. zum Download zur Verfügung gestellt hat, mit der 3.4-Serie aufgerufen wird, erscheint im Dialog ein Button "CommandButton1". Dieses Button stört den Ablauf des Makros.
Wenn diese Button manuell gelöscht wird, läuft das Makro auch in der 3.4-Serie.
Warum das Button "CommandButton1" in er 3.4-Serie auftaucht, ist noch nicht geklärt.

Gruß

Jochen