Makro mehrfachen Start verhindern

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Makro mehrfachen Start verhindern

Beitrag von clag »

Hallo Kenner und Könner,

wie kann man sicherstellen das ein Makro nur einmal gestartet wird?
kann man das irgendwie direkt abfragen ob ein bzw welches Makro läuft?

Meine Idee wäre eine Globale Variable die abgefragt
und bei Makro Start auf "on" gesetzt wird.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro mehrfachen Start verhindern

Beitrag von balu »

Hallo clag
wie kann man sicherstellen das ein Makro nur einmal gestartet wird?
Gegenfrage. Wie schaffst Du es das ein Makro mehrfach gestartet wird? Das ist mir momentan etwas schleierhaft.

Nun gut, wie auch immer.
Meine Idee wäre eine Globale Variable die abgefragt
und bei Makro Start auf "on" gesetzt wird.
Globale Variable ist nicht schlecht. Das Makro welches nur einmal gestartet werden darf setzt den Status der Variablen auf TRUE oder 1.
Pseudocode. ACHTUNG NICHT GETESTET!!!

Code: Alles auswählen

Global FirstRun as Boolean
	Sub NurEinmal
		FirstRun = 1
	End Sub

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
Dreh-Gel
**
Beiträge: 28
Registriert: Sa, 25.10.2014 16:58

Re: Makro mehrfachen Start verhindern

Beitrag von Dreh-Gel »

Code: Alles auswählen

Global FirstRun as Boolean
	Sub NurEinmal
		FirstRun = 1
	End Sub
Also da fehlt die Abfrage, ob FirstRun 0 oder 1 ist.

Code: Alles auswählen

Global FirstRun as Boolean

Function WarNochNicht
	if FirstRun = 0 Then 
		WarNochNicht = True
		FirstRun = 1
	else
		WarNochNicht = False
	EndIf
End Function
ok, die Abfrage fehlt nicht, man kann die globale Variable abfragen. Ich bleib trotzdem bei meinem Vorschlag.

Gruss DG
Win7, AOO 4.1.1
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro mehrfachen Start verhindern

Beitrag von clag »

Hallo
und Danke für die schnellen Antworten

habe es jetzt auch in der Art gemacht, blieb mir ja auch nichts anderes übrig ;)

Code: Alles auswählen

Global LoopShouldRun as Boolean

Sub StopLoop
	LoopShouldRun = false
End Sub

Sub RefreshLoop
	if LoopShouldRun = true then 
		msgbox "RefreshLoop Makro läuft bereits, dieser Start wird ignoriert"
		exit sub
	end if
LoopShouldRun = true
myDoc = thisComponent
..
..
			if LoopShouldRun = false then
				msgbox "RefreshLoop Makro wurde angehalten"
				exit sub


was ich noch nicht verstehe warum funktioniert das nicht mit einer "Private" Variablen?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Dreh-Gel
**
Beiträge: 28
Registriert: Sa, 25.10.2014 16:58

Re: Makro mehrfachen Start verhindern

Beitrag von Dreh-Gel »

clag hat geschrieben: was ich noch nicht verstehe warum funktioniert das nicht mit einer "Private" Variablen?
Hätt ich auch gedacht. Und mit Static?

In der Hilfe steht:
STATIC VarName As TYPNAME
Die Variable behält ihren Wert bis zum nächsten Einstieg in die FUNCTION oder SUB. Die Deklaration muss innerhalb einer SUB oder FUNCTION stehen.
Win7, AOO 4.1.1
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Makro mehrfachen Start verhindern

Beitrag von Karolus »

Hallo

@Dreh Gel

Code: Alles auswählen

Global FirstRun as Boolean

Function WarNochNicht
     WarNochNicht = FirstRun
End Function 
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Makro mehrfachen Start verhindern

Beitrag von balu »

Hallo
was ich noch nicht verstehe warum funktioniert das nicht mit einer "Private" Variablen?
Da Du mal wieder mit Infos extrem sparsam umgehst, kann ich nur eins sagen: Natürlich funktioniert das mit Private.

Und nun kommt das ganz dicke fette ABER.

Aber auch nur dann, wenn die einzelnen Subs im ein und den gleichen Modul stehen. Denn Private ist auf das Modul begrenzt wo es aufgerufen wird.

Mensch clag, das müsstest Du doch schon mittlerweile Wissen das dies z.B. bei Dannenhöfer nachzulesen ist.



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
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Makro mehrfachen Start verhindern

Beitrag von clag »

Hallo Balu,

da habe ich ungeprüft geplappert
denn jetzt funktioniert es auch mit "Privat" :oops:

Zuvor hatte ich erfolglos als "Private" deklariert und habe dann als Global deklariert womit es umgehend funktionierte.

Die Zusammenhänge habe ich nicht weiter erforscht, weil ich schon des öfteren an "Private"
gescheitert bin und immer hat es dann mit "Global" funktioniert?
Das liegt aber eher in meinem Basic Minimalwissen begründet.

Darum tauche ich hier ja öfters als Frager auf :lol:
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Dreh-Gel
**
Beiträge: 28
Registriert: Sa, 25.10.2014 16:58

Re: Makro mehrfachen Start verhindern

Beitrag von Dreh-Gel »

Hallo Karolus

Code: Alles auswählen

Global FirstRun as Boolean

Function WarNochNicht
     WarNochNicht = FirstRun
     FirstRun = 1    ' oder im Macro Code auf 1 setzen :)
End Function 
Gruss
DG
Win7, AOO 4.1.1
Karolus
********
Beiträge: 7453
Registriert: Mo, 02.01.2006 19:48

Re: Makro mehrfachen Start verhindern

Beitrag von Karolus »

Hallo

Wenn du das Ding vorher als boolean deklarierst, dann weise dem Ding auch einen solchen zu, statt einer impliziten Konvertierung 1 →→ True
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Dreh-Gel
**
Beiträge: 28
Registriert: Sa, 25.10.2014 16:58

Re: Makro mehrfachen Start verhindern

Beitrag von Dreh-Gel »

Karolus hat geschrieben:Wenn du das Ding vorher als boolean deklarierst, dann weise dem Ding auch einen solchen zu, statt einer impliziten Konvertierung 1 →→ True
Du hast ja recht, aber DEN Fehler hatte ich schon von balu übernommen.

Gruss
DG
Win7, AOO 4.1.1
Antworten