ich beschäftige mich gerade mit dem
- Öffnen
- Speichern und Schließen
meiner Calc-Anwendung.
Folgendes soll beim Öffnen passieren:
Beim Öffnen der Datei wird der Name geprüft. Falls es sich um das Original handelt, öffnet sich der 'Speichern Unter' - Dialog, ansonsten wird die Datei normal geöffnet:
Code: Alles auswählen
If Left(StarDesktop.getActiveFrame().Title,11) = Original Then
SpeichernUnter
End If
Code: Alles auswählen
Sub SpeichernUnter
Dim speicherDialog as Object
Dim dateiname As String
Dim DialogTyp(0)
Dim arg()
Dim antwort
kPfad = ThisComponent.URL
sPfad = DirectoryNameoutofPath(kPfad, "/") 'Pfad des akt. Dokuments
arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION)
speicherDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
With speicherDialog
.Initialize(arg())
.appendFilter("ODS-Dateien (*.ods)","*.ods")
.SetMultiselectionMode(False)
.setDisplayDirectory(ConvertToURL(sPfad()))
.SetTitle("Vergeben sie einen Namen und speichern sie das Angebot")
End With
antwort = speicherDialog.execute()
If antwort = 1 Then
datei = speicherDialog.Files(0)
Dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FilterName"
args1(0).Value = "StarOffice XML (Calc)"
Thiscomponent.storeAsUrl(datei, args1())
End If
End Sub
Unter Linux ist das Häkchen da, unter Windows nicht.
Zum Speichern und Schließen habe ich mir einen eigenen Dialog gebaut.
Je nach dem welchen Optionsbutton man angeklickt, wird die Anwendung gespeichert oder geschlossen:
Code: Alles auswählen
Sub cmdOK
If oFrmDateiverwaltung.getControl("optSp_Schl").State = True Then 'Speichern und Schließen
If (ThisComponent.hasLocation And (Not ThisComponent.isReadOnly)) Then
ThisComponent.store()
End If
DokumentSchliessen 'Symboleisten, etc. werden zurückgesetzt
closeFlag = True
oFrmDateiverwaltung.endExecute
ElseIf oFrmDateiverwaltung.getControl("optSp").State = True Then 'nur Speichern
oFrmDateiverwaltung.endExecute
If (ThisComponent.hasLocation And (Not ThisComponent.isReadOnly)) Then 'nur Schließen
ThisComponent.store()
End If
ElseIf oFrmDateiverwaltung.getControl("optSchl").State = True Then
DokumentSchliessen
closeFlag = True
oFrmDateiverwaltung.endExecute
End If
End Sub
Code: Alles auswählen
Sub cmdDateiverwaltung
closeFlag = False
DialogLibraries.LoadLibrary("Labs_Dialoge")
oFrmDateiverwaltung = CreateUnoDialog(DialogLibraries.Labs_Dialoge.frmDateiverwaltung)
oFrmDateiverwaltung.Execute()
If closeFlag = True Then
ThisComponent.close(True)
End If
End Sub
Die Anwendung kann aber immer noch über das Schließen-Kreuz (oben rechts im Frame) beendet werden. Das muss ich verhindern, bzw. abfangen. Wie geht das?
Das Speichern bzw. Schließen dauert einige Zeit (etwa 10 Sekunden), ohne dass der Anwender merkt, dass etwas passiert. Der Fortschrittsbalken, der beim 'normalen' Speichern erscheint, taucht bei meiner Variante nicht auf.
Kann ich einen Fortschrittsbalken in den Dialog einbauen, der so lange läuft, wie der Speichervorgang dauert?
Gruss
Thomas