uzfH8 schrieb:
Ich habe keinerlei OO-Writer-Macro-Erfahrung und habe mal rumgespielt.
Mein Programm, also das das auf mir läuft, soll so aussehen
1
2
3
4
5
6
7
8
9
10
11
12 | # Polling
Do while not Zusammenbruch vor Erschöpfung
arbeite mit Libreoffice
reset makrofertigflag
Makro in LibreOffice starten
Do while not makrofertigfleg
arbeite mit anderen Programmen
LibreOffice in den Vordergrund bringen
set makrofertigflag if Abfrage sichtbar
Loop
beantworte abfrage
Loop
|
Das ist leider ganz unbrauchbarer Pseudocode. Du hättest Dich ja wenigstens an Deinen eigenen Macrocode anlehnen können und WHILE...WEND statt do while...loop verwenden können.
not Zusammenbruch vor Erschöpfung: soll wohl true bedeuten - Endlosschleife.
arbeite mit Libreoffice: Das ist BS. Du kannst dem Makro ja nicht sagen, was Du machen sollst.
reset makrofertigflag: Und was ist reset? True, False?
Makro in LibreOffice starten: Ein zweites Makro starten? Das Makro soll sich selbst starten?
Do while not makrofertigfleg: WHILE FERTIG = FALSE oder so. Dass es ein Makro ist ergibt sich aus dem Kontext.
arbeite mit anderen Programmen: Nein, das Makro soll wohl kaum mit anderen Programmen arbeiten
LibreOffice in den Vordergrund bringen: Ich dachte es soll nicht in den Vordergrund, v.a. nicht, solange es nicht fertig ist.
set makrofertigflag if Abfrage sichtbar: Geht das so mit Rückwärts-Ifs in diesem Basic?
Loop: WEND ist auch nicht schlecht im Pseudocode
beantworte abfrage: Das ist die einzig halbwegs plausible Codezeile.
Ich dachte mir folgendes: Man macht ein Markierfeld (=Checkbox) in das Libreofficeprogramm, ob man gestört werden will. Das geht über Extras/anpassen/Menüs:
Kategorie Steuerelemente/Markierfeld
Ziel/Ansicht, zum Testen erstmal weit oben, 3. Punkt hinter Webvorschau, Umbenennen: mfMakro
Wenn man dann das Menü Ansicht öffnet ist da ein Punkt mfMakro (kann, wenn es funktioniert, einen besseren Namen bekommen).
Das schaltet man aus und startet das Makro.
Dann arbeitet man mit einem anderen Dokument oder legt sich schlafen oder führt die Katze aus.
Dein 1. Code sähe dann etwa so aus:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | Sub Main
Dim iAntwort As Integer
iAntwort = IDYES
Dim lWaitMilliseconds As Long
lWaitMilliseconds = 8000
While iAntwort = IDYES
Wait lWaitMilliseconds
IF private:resource/menubar/Ansicht/mfMakro.State = 1 Then
iAntwort = Msgbox("Wiederholen?", MB_YESNO, "Nochmal warten")
else
iAntwort = IDYES
ENDIF
Wend
End Sub
|
Leider ist "private:resource/menubar/Ansicht/mfMakro.State = 1" falsch - so geht es nicht, aber ich denke in irgendeiner Weise müsste man das Mistding abfragen können.
Dein Subprozess, der da werkelt, soll ja die wohl die Millisekunden ersetzen und meldet sich 50 Mal am Tag. Aber 49x sagt er "Habe Step 17/50 erledigt" oder so und einmal "Step 50 erledigt. Fertig!" und nur die letzte Meldung soll aufpoppen.
Oder fragst Du in fixen Zeitintervallen irgendwas ab, das sich schlecht abschätzen lässt?
Ohne nähere Infos kann man da dann keinen guten Testcode entwickeln. Wenn jmd. rausfindet, wie man irgendein Mehrfachfeld aus dem Menü abfragt, dann finden wir wohl auch raus, wie man so ein eigens geschaffenes abfragt.
Wie man rausfindet, ob das Makro fertig ist, weiß ich nicht, aber eine weitere Bedingung zum if zuzufügen sollte gelingen, wenn man es weiß.