Wechsel zwischen geöffneten Dokumenten

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

Moderator: Moderatoren

Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Wechsel zwischen geöffneten Dokumenten

Beitrag von Mr.Ed »

Hallo zusammen,

ich bin kürzlich ermutigt worden, einfache Fragen hier ruhig zu stellen, auch wenn sie vielleicht anfängerhaft sind. Mein Problem:

Zwei Dokumente (Writer) sind geöffnet, also Tasks auf der Windows-Oberfläche. Ich kann zwischen ihnen unter Windwows mit <alt tab> wechseln. Unter OOo-basic sind diese Dokumente als "oDoc" und "oDoc2" präsent. Wie kann ich in OOo-basic den Fokus zwischen diesen beiden Dokument-Objekten einfach wechseln, also das machen, was unter Windows mit <alt tab> geschieht? Ich habe schon verschiedenes ausprobiert, zum Beispiel getCurrentController oder aquire, komme aber nicht so recht weiter.

Übrigens habe ich den Rat befolgt und Xray installiert, war erst mal nicht ganz einfach, funktioniert aber jetzt. Xray ist schon ziemlich hilf- und lehrreich, aber die Methoden der oDoc-Objekte sind so zahlreich, dass ich mir die Finger wundtippen müsste, um alles auszuprobieren.

Weiß jemand, wie es einfach geht? Mein Dank träfe ihn mit voller Wucht!

Mfg Mr.Ed
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Wechsel zwischen geöffneten Dokumenten

Beitrag von komma4 »

Willkommen im Forum.

Zur Frage:

Ich öffne Dokumente zur Bearbeitung im Hintergrund

Code: Alles auswählen

Dim OpenProperties(1) as new com.sun.star.beans.PropertyValue
OpenProperties(0).Name = "Hidden"
OpenProperties(0).Value = True
als letzten Parameter beim loadComponentFromURL-Befehl angeben


Die lassen sich nach erfolgter Manipulation dann wieder anzeigen mit:

Code: Alles auswählen

oFrame = oDoc1.getCurrentController().getFrame() 
oFrame.getContainerWindow().Visible = TRUE 
Damit entfällt das nervige Geflacker und zeitaufwändiges Berechnen des Bildschirms während das Makro läuft.

Hilft Dir das?

Mr.Ed hat geschrieben:Übrigens habe ich den Rat befolgt und Xray installiert
Und Du hast Dir auch Andrews Makro-Dokument besorgt... stehen viele gute, lesenswerte Sachen drinne.


Viel Erfolg!
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)
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Wechsel zwischen geöffneten Dokumenten

Beitrag von Mr.Ed »

komma4 hat geschrieben:
Damit entfällt das nervige Geflacker und zeitaufwändiges Berechnen des Bildschirms während das Makro läuft.
Genau das habe ich mir davon auch versprochen. Ich habe jetzt folgenden kleinen Testcode geschrieben:

Code: Alles auswählen

Sub Test
	Dim oDoc1 as Object, oDoc2 as Object, oFrame1 as Object, oFrame2 as Object
	Dim OpenProperties(1) as new com.sun.star.beans.PropertyValue
	oDoc1 = ThisComponent
	oFrame1 = oDoc1.getCurrentController().getFrame()
	OpenProperties(0).Name = "Hidden"
	OpenProperties(0).Value = True
	oDoc2 = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, OpenProperties())
	oFrame2 = oDoc2.getCurrentController().getFrame()
	oFrame2.getContainerWindow().Visible = TRUE
	oFrame1.getContainerWindow().Visible = TRUE
End Sub
Ich starte von einem geöffneten Writer-Dokument aus (oDoc1 = ThisDocument), hole mir dann den Controller (ist das an dieser Stelle überhapt nötig?). Anschließend bestimme ich die Parameter und lege mit diesen oDoc2 an, aktiviere den Controller dort und mache oDoc2 sichtbar. Bis zu dieser Stelle funktioniert es. Aber wie komme ich wieder nach oDoc1 zurück?

Andrews Makro-Dokument, danke für den Tipp. Liest man aber nicht mal so eben durch. Ich taste mich schrittweise ran.

Vielen Dank für deine Hinweise!

MfG Mr.Ed
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Wechsel zwischen geöffneten Dokumenten

Beitrag von komma4 »

Code: Alles auswählen

oFrame = oDoc1.getCurrentController().getFrame() 
oFrame.getContainerWindow().toFront()

funktioniert hier, auch wenn das Fenster zuvor nicht im Hintergrund war.

Bei Dir auch?
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)
Mr.Ed
**
Beiträge: 47
Registriert: Di, 16.02.2010 18:38

Re: Wechsel zwischen geöffneten Dokumenten

Beitrag von Mr.Ed »

Prima! Es funktioniert. Jetzt muss ich noch ein bisschen "verdauen" und ausprobieren, ob ich den Code nicht noch vereinfachen kann.

Code: Alles auswählen

Sub Test	' Zwei Fenster parallel öffnen, eins als "Werkbank" (unbenannt)
	Dim oDoc1 as Object, oDoc2 as Object, oFrame1 as Object, oFrame2 as Object, oTxt as Object
	Dim OpenProperties(1) as new com.sun.star.beans.PropertyValue
	oDoc1 = ThisComponent
	oFrame1 = oDoc1.getCurrentController().getFrame()
	OpenProperties(0).Name = "Hidden"
	OpenProperties(0).Value = True
	oDoc2 = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, OpenProperties())
	oFrame2 = oDoc2.getCurrentController().getFrame()
	oTxt = oDoc2.text
	oTxt.insertString(oTxt.getStart(), "Hallo Welt!", False)
	oFrame2.getContainerWindow().Visible = TRUE
	oFrame1 = oDoc1.getCurrentController().getFrame()
	oFrame1.getContainerWindow().toFront()
	msgBox "Dies ist Frame 1"
	oFrame2 = oDoc2.getCurrentController().getFrame()
	oFrame2.getContainerWindow().toFront()
	msgBox "Dies ist Frame 2"
End Sub
Vielen Dank noch mal für deine Hilfe! (Sehr freundlich, dieses Forum!)

Mr.Ed
Antworten