Dokument Schließen, jedoch nicht Open Office

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

Moderator: Moderatoren

LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Dokument Schließen, jedoch nicht Open Office

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag von komma4 »

Code: Alles auswählen

ThisComponent.close( TRUE )

Hilft Dir das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag von LokutusvB »

Leider nein, das habe ich schon probiert.

Code: Alles auswählen

thisComponent.Close(True)
schließt genau so ganz Open Office wie

Code: Alles auswählen

thisComponent.Close(False)
Zumindest bleibt die Eigenschaft die gleiche, Dokument Schließen unter Extras/Anpassen.
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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.

Code: Alles auswählen

Sub CloseDoc
thisComponent.Close()
end sub
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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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.
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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.
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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
LokutusvB
***
Beiträge: 77
Registriert: Di, 03.11.2009 09:52

Re: Dokument Schließen, jedoch nicht Open Office

Beitrag 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.
Antworten