Seite 1 von 1
Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 09:24
von LokutusvB
Guten Morgen

,
bisher habe ich über Makros und Quelltext immer ein neues Dokument geöffnet und dann wieder vollständig inclusive Open Office geschlossen. Jetzt möchte ich auch die Möglichkeit haben, nur das Dokument schließen zu können, Open Office jedoch offen zu lassen. Wie kann ich das über ein Makro realisieren? Und auf welche Eigenschaft müßte ich reagieren, wenn ich bisher ein Makro über Dokument Schließen gestartet habe?
Auf was müßte ich dann beim Öffnen eines Dokuments achten? Oder wird das automatisch im Open Office Hauptfenster geöffnet?
Viele Grüße
LvB
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 10:34
von komma4
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 10:50
von LokutusvB
Leider nein, das habe ich schon probiert.
schließt genau so ganz Open Office wie
Zumindest bleibt die Eigenschaft die gleiche, Dokument Schließen unter Extras/Anpassen.
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 11:57
von ykcim
Interessante Idee.
Du nimmst die Aktion "Dokument schließen" und setzt noch ein Dokument schließen drauf. Das muß schief gehen.
Die genannte Methode thisComponent.Close() schließt ein Dokument und nicht OpenOffice.
Wenn Du aber diese Methode dem Ereignis "Dokument schließen" folgen läßt ziehst Du OO anscheinend ins Nirwana.
Bei mir stürzt OO dann auch mit einem geöffneten anderen Dokument ab.
Der Befehl thisComponent.Close() funktioniert einwandfrei wenn man ihn einem eigenständigen Makro aufruft.
Wenn Du bisher dein Makro über "Dokument schließen" gestartet hast, ist danach auch OO geschlossen worden (ohne den Befehl im Makro) ? Sollte nämlich eigentlich nicht passieren bei Dokument schließen.
mfg
Michael
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 12:07
von Stephan
Die genannte Methode thisComponent.Close() schließt ein Dokument und nicht OpenOffice.
WEnn das Dokument das einzige geöffnete FEnster von OOo ist, schließt diese Codezeile OOo komplett (im Sinne des sichbaren OOo, im Hintergrund unsichtbar laufende Prozesse meine ich nicht), nur wenn mehrere Dokumente/Fenster offen sind wird lediglich das konkret angesprochene dokument geschlossen.
Gruß
Stephan
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 12:23
von ykcim
OK - Das war mein letzter Beitrag.
Ich habe keine Ahnnung mehr von diesem Starbasic-Mist.
Macht's gut.
mfg
Michael
Die FAQ geht demnächst vom Netz.
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 12:36
von Stephan
OK - Das war mein letzter Beitrag.
Ich habe keine Ahnnung mehr von diesem Starbasic-Mist.
Macht's gut.
mfg
Michael
Entschuldigung, Michael, ich wollte Dir nicht über den Mund fahren oder sonstwie was Falsches sagen.
(Das hingegen das Verhalten von .Close so ist wie genannt, ist bereits seit OOo 1.x so)
Gruß
Stephan
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 12:48
von ykcim
Nein, Du brauchst Dich nicht entschuldigen!!!! Das hat mit Dir nichts zu tun!
OO und Starbasic geht mir seit einiger Zeit auf den Keks.
Und jetzt beende ich das Drama. Man hat mir mal bei Sun die Zukunft von OO gezeigt (2001) und die sah gut aus.
Inzwischen sehe ich die Zukunft: Es ist und bleibt ein Frickel-Produkt!
Alleine die Fehler in meinem System nach Umstellung auf 3.2 langen schon um zu kot...
mfg
Michael
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 14:30
von LokutusvB
Ich habe mich wohl leider etwas mißverständlich ausgedrückt. Ich arbeite an einer Art Dokumentverwaltungsprogramm in Delphi für Open Office und bastel mir hierfür meine eigene OO-Delphi-API. Das Makro, was beim Schließen eines Dokumentes ausgeführt wird, führt andere Aktivitäten für das Delphi-Programm aus.
Ja, und leider schließt Document.Close() die vollständige Open Office-Instanz. Ich habe ein wenig im Netz gesucht, konnte aber noch nichts passendes finden. Neben Close gibt es wohl noch .dispose() und der ganz harte Weg .terminate. Beides nützt mir aber nichts. Ich möchte gern, wenn Open Office schon geöffnet ist ohne ein geladenes Dokument (eben nur Open Office) in diese Instanz das Dokument öffnen. Das geht, wenn ich das richtig verstehe, über LoadComponentFromURL(...'_blank'...), dann aber eben nicht blank, sondern ein anderes Attribut (default oder self?). Wenn aus irgend einem Grund das Dokument nun wieder geschlossen werden muß, dann möchte ich in diesem Fall jedoch die Open Office Intanz geöffnet lassen. Daher meine Frage.
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 14:50
von Stephan
Ja, und leider schließt Document.Close() die vollständige Open Office-Instanz. Ich habe ein wenig im Netz gesucht, konnte aber noch nichts passendes finden. Neben Close gibt es wohl noch .dispose() und der ganz harte Weg .terminate. Beides nützt mir aber nichts.
In jedem Fall sollte ein dispatch mit CloseDoc möglich sein:
Code: Alles auswählen
sub schliessen()
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:CloseDoc", "", 0, Array())
end sub
Ich möchte gern, wenn Open Office schon geöffnet ist ohne ein geladenes Dokument (eben nur Open Office) in diese Instanz das Dokument öffnen. Das geht, wenn ich das richtig verstehe, über LoadComponentFromURL(...'_blank'...), dann aber eben nicht blank, sondern ein anderes Attribut (default oder self?).
Kann es sein das Du hier "Instanz" mit "Frame" (meinethalben auch "Fenster") verwechselt? Alles was Du hier schreibst sollte nämlich automatisch richtig laufen, nur ist OOo nun mal keine MDI-Anwendung und erzeugt somit für jedes neue Dokument ein neues Fenster/Frame, was aber KEINE neue Instanz ist.
Wie Du hingegen Dokumente in einen bestehenden FRame lädst dürfte (glaube ich) in dem Makrodokument von Pitoniak stehen, siehe erster Thread hier im Basic-Forum.
Gruß
Stephan
Re: Dokument Schließen, jedoch nicht Open Office
Verfasst: Fr, 12.02.2010 14:58
von LokutusvB
Ja, mit Instanz meinte ich Frame, bzw. ein Fenster. Mit der Standard-Methode
Code: Alles auswählen
Document := Desktop.LoadComponentFromURL(datei, '_blank', 0, VarArrayCreate([0, - 1], varVariant));
wird automatisch ein neues Fenster mit dem Dokument geöffnet. Das wird wohl aber, wenn ich das richtig verstehe, am _blank liegen.
Danke für den Tip mit dem Dispatch, das werde ich probieren.