von Stephan » Mi, 03.10.2018 08:09
Ich habe jetzt folgende Lösung gefunden:
-es wird zunächst, anhand der Titel, registriert welche Fenster/Dokumente offen sind
-nun wird der Dialog zur Auswahl einer Vorlage geöffnet, dort eine neue Dokumentvorlage gewählt und darauf basierend ein neues Dokument erstellt
-jetzt wird geprüft welche FEnster nun offen sind um, im Vergleich mit der ersten Prüfung, das eine Fenster zu finden das dem neuen Dokument entspricht (hierbei wird auch der Sonderfall berücksichtigt das die Vorlage (fälschlich) zum Bearbeiten geöffnet wurde, denn dieses Dokument hat bereits eine Speicheradresse, ein neues Dokument noch nicht)
-das Dokument kann nun wie gewöhnlich bearbeitet werden
der Code sieht so aus:
Code: Alles auswählen
Sub neues_Dokument_erstellen()
'bestimmen welche Fenster/Dokumente offen
Redim alle_Titel(StarDesktop.Frames.Count-1)
For i = 0 To UBOUND(alle_Titel())
alle_Titel(i) = StarDesktop.Frames(i).title
Next i
vorlagenverwaltung_oeffnen()
If StarDesktop.Frames.Count-1 > UBOUND(alle_Titel()) Then
For i = 0 To StarDesktop.Frames.Count-1
titel_gefunden = 0
For j = 0 To UBOUND(alle_Titel())
If StarDesktop.Frames(i).title = alle_Titel(j) Then
titel_gefunden = 1
Exit For
End If
Next j
If titel_gefunden = 0 Then 'wir haben das neue Fenster gefunden
'unterscheiden ob neues Dokument oder (fälschlich) Vorlage zum Bearbeiten geöffnet
Select Case StarDesktop.Frames(i).getCreator.getCurrentComponent.hasLocation()
Case True
'Vorlage ist zum Bearbeiten geöffnet
Case False
'es existiert ein neues Dokument, jetzt weiteres Bearbeiten durchführen:
'...
End Select
Exit For
End If
Next i
Else
'es wurde kein neues Fenster erzeugt, deshalb nichts zu tun
End If
End Sub
sub vorlagenverwaltung_oeffnen()
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:NewDoc", "", 0, Array())
end Sub
Gruß
Stephan
Ich habe jetzt folgende Lösung gefunden:
-es wird zunächst, anhand der Titel, registriert welche Fenster/Dokumente offen sind
-nun wird der Dialog zur Auswahl einer Vorlage geöffnet, dort eine neue Dokumentvorlage gewählt und darauf basierend ein neues Dokument erstellt
-jetzt wird geprüft welche FEnster nun offen sind um, im Vergleich mit der ersten Prüfung, das eine Fenster zu finden das dem neuen Dokument entspricht (hierbei wird auch der Sonderfall berücksichtigt das die Vorlage (fälschlich) zum Bearbeiten geöffnet wurde, denn dieses Dokument hat bereits eine Speicheradresse, ein neues Dokument noch nicht)
-das Dokument kann nun wie gewöhnlich bearbeitet werden
der Code sieht so aus:
[code]Sub neues_Dokument_erstellen()
'bestimmen welche Fenster/Dokumente offen
Redim alle_Titel(StarDesktop.Frames.Count-1)
For i = 0 To UBOUND(alle_Titel())
alle_Titel(i) = StarDesktop.Frames(i).title
Next i
vorlagenverwaltung_oeffnen()
If StarDesktop.Frames.Count-1 > UBOUND(alle_Titel()) Then
For i = 0 To StarDesktop.Frames.Count-1
titel_gefunden = 0
For j = 0 To UBOUND(alle_Titel())
If StarDesktop.Frames(i).title = alle_Titel(j) Then
titel_gefunden = 1
Exit For
End If
Next j
If titel_gefunden = 0 Then 'wir haben das neue Fenster gefunden
'unterscheiden ob neues Dokument oder (fälschlich) Vorlage zum Bearbeiten geöffnet
Select Case StarDesktop.Frames(i).getCreator.getCurrentComponent.hasLocation()
Case True
'Vorlage ist zum Bearbeiten geöffnet
Case False
'es existiert ein neues Dokument, jetzt weiteres Bearbeiten durchführen:
'...
End Select
Exit For
End If
Next i
Else
'es wurde kein neues Fenster erzeugt, deshalb nichts zu tun
End If
End Sub
sub vorlagenverwaltung_oeffnen()
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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:NewDoc", "", 0, Array())
end Sub
[/code]
Gruß
Stephan