Seite 1 von 1

aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Di, 30.10.2007 11:04
von Elbfischer
Hallo zusammen,

bitte entschuldigt, wenn mein erster Beitrag (besser: meine erste Frage) nicht gleich voll den Ton hier treffen sollte.-

Ich wende mich langsam aber sicher immer mehr von M$ ab und Open Source-Software zu. Zur Zeit habe ich als BS allerdings immer noch Windows XP SP2.

Vor einigen Tagen habe ich mir OpenOffice.org 2.3 runtergeladen und installiert und inzwischen auch schon 'ne Menge rumprobiert. Ich muß sagen: toll. Alles da, was man von M$ kennt, teilweise etwas anders realisiert und auch auf anderem Wege erreichbar, aber eben alles da und teilweise sogar mehr. Also bisher gefällt mir - zumindest der Writer - das Programm sehr sehr gut!

Natürlich habe ich inwischen schon versucht, ein In Word vorhandenes Makro in OOo nachzubilden, indem ich die erforderlichen Schritte aufgezeichnet habe. Dieses Makro soll den Druckauftrag an einen anderen als den Standarddrucker senden und dann wieder zurückschalten auf den Standarddrucker:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub



sub Druck2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Printer"
args1(0).Value = "FaxDruckerTreiber"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Copies"
args2(0).Value = 1
args2(1).Name = "Collate"
args2(1).Value = false

dispatcher.executeDispatch(document, ".uno:Print", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Printer"
args3(0).Value = "StandardDrucker"

dispatcher.executeDispatch(document, ".uno:Printer", "", 0, args3())


end sub
Ich hoffe, das Einfügen mittels "code" funktioniert dann gleich auch.......

Leider hat das Makro eine Macke: es läßt den Writer reproduzierbar abstürzen. Durch Auskommentieren der letzten "dispatcher......"-Zeile konnte ich erreichen, daß der Writer nicht mehr abstürzt. Allerdings wird dann natürlich auch nicht mehr auf den Standarddrucker zurückgeschaltet und der nächste Klick auf den (Standard-)Druckbutton startet wieder das Faxprogramm.......

Kann mir vielleicht jemand hier helfen und auf den richtigen Weg bringen? Ich bin zwar kein absoluter Programmier-Laie, aber mit OOo-Basic noch absolut unvertraut und deshalb noch etwas hilflos.

Also hier nochmal eine hoffentlich klare Formulierung meines Anliegens:

Ich benötige ein Makro, das vom Standarddrucker umschaltet auf das Faxprogramm (WinFax), das Dokument dorthin ausdruckt und anschließend wieder auf den Standarddrucker (Canon Pixma) zurückschaltet, ohne daß der Writer sich verabschiedet.

Ich bedanke mich schon einmal herzlichst im voraus für Eure freundliche Hilfe.

Gruß,
Elbfischer

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Di, 30.10.2007 12:38
von Karolus
Hallo

evtl. wird das Problem durch die Code-Zeile:

Code: Alles auswählen

wait 5000 'unterbricht für 5 sec
eingefügt über der Zeile: 'Dim args3.....' behoben, ! ungetestet und ohne Gewähr !

Gruß Karo

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Di, 30.10.2007 13:19
von Elbfischer
Hi Karo,

ich hab das gleich mal hier im Büro ausprobiert (hab mir hier die portable Version einfach mal "installiert"), wo es auch mit 2 ganz normalen Netzwerkdruckern zu dem Problem kam. HIER ist durch Einfügen der Warteschleife das Problem behoben!

Zu Hause werde ich das dann auch gleich mal mit dem Faxprogramm testen.

Auf jeden Fall schon mal 1000 Dank!

Gruß,
Elbfischer

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Mi, 31.10.2007 08:23
von Elbfischer
Hallo Karo und auch alle anderen!

Karo, Dein Tipp hat funktioniert; klasse und nochmals vielen Dank!

Aber jetzt würde ich gerne auch noch wissen warum? Warum braucht OOo an der Stelle 'ne Warteschleife (über die Dauer wollen wir hier nicht "streiten")?

Ich frage so hartnäckig, weil ich immer gerne verstehe, warum was passiert oder warum ich etwas machen muß. Vielleicht möchte ich ja auch mal selbst ein Makro schreiben und nicht nur aufzeichnen lassen......

Auch hierfür schon mal vielen Dank im voraus.

Schönen Tag noch,
Elbfischer

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Mi, 31.10.2007 08:44
von Toxitom
Hallo Elbfischer,

ich versuche das mal zu erklären: Jeder Prozess braucht so seine Zeit - auch bei schnellen rechnern. Üblicherweise werden dann Listener registriert, die ein "Veto" einlegen, falls sie noch nicht fertig sind und bestimmte Ressourcen benötigen.
Das ist beispielsweise der Fall, wenn du ein Dokument druckst und gelich danach schliessen möchtest. Der Druckprozess verhindert das Schliessen des Dokumentes so lange, bis er dort keine Ressourcen mehr benötigt.
Wie gesagt, wenn du "native" programmierst, also nicht den "dispatcher-Code" nutzt, musst du selbst dafür Sorge tragen, dass alle Prozesse sauber abgeschlossen sind. Daf+ür gibt es dann auch diverse Hilfen.
Ich vermute, bei deinem Makro ist das ähnlich: Der erste Druckprozess ist noch nicht abgeschlossen, du möchtest aber schon die Eigenschaften des Druckers wechseln. Offensichtlich hat der Dispatchercode keine Möglichkeiten, solche "hängenden" Prozesse anzuwarten oder damit umzugehen - daher der Absturz. Eigentlich ist der Dispatchercode auch nur darauf ausgelegt, einen Vorgang auszuführen - und nicht direkt hintereinander mehrere.
Wenn du also mal selbst programmierst, nutzt du sowieso andere Kommandos - direkte UNO API Kommandos - da stellt sich dann alles etwas anders dar, wobei natürlich auch dort eine solche Problematik auftreten kann ;-)

Viele Grüße
Thomas

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Mi, 31.10.2007 09:18
von jwr
Toxitom hat geschrieben: Eigentlich ist der Dispatchercode auch nur darauf ausgelegt, einen Vorgang auszuführen - und nicht direkt hintereinander mehrere.
Hallo Thomas,

Vielen Dank für die einleuchtende Erklärung. Dann aber ist die Bezeichnung "Dispatcher" leicht irreführend. Ich kenne den "Dispatcher" aus der Fluglotsenbranche als denjenigen, der die Landungen ordnet, damit sich die Flieger nicht in die Quere kommen, und im Leo-Übersetzer heisst es: :lol:
- Betriebsbediensteter, der insbesondere bei Schnellbahnen die Fahrzeuge bzw. Züge abfertigt. Er ist Bahnsteigwärter, Haltestellenwärter, Weichensteller und Zugbegleiter.
(http://dict.leo.org/ende?lp=ende&lang=d ... &relink=on)
http://de.wikipedia.org/wiki/Dispatcher

Schöne Grüsse -Hans-

Re: aufgezeichnetes Makro läßt Writer abstürzen

Verfasst: Mi, 31.10.2007 10:21
von Elbfischer
Hallo Toxitom,

danke für die einleuchtende Erklärung!

Und ich hatte gehofft, daß ich in OOo - wie früher in Word-Basic - einfach ein Grundgerüst via 'Makro aufzeichnen' kreieren und dann von Hand weiter verfeinern kann. Aber wenn das eigentlich 2 verschiedene Sprachen sind, dann muß ich wohl mal etwas büffeln, was mir in meinem Alter nicht mehr so ganz leicht fällt. Aber das kriegen wir schon hin.

Nochmal schönen Dank und bis zu meinen nächsten OOo-Anfänger-Fragen.

Gruß,
Elbfischer