Speicherdialog

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

Moderator: Moderatoren

toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Speicherdialog

Beitrag von toni »

Hallo zusammen,

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
Diesen Dialog rufe ich folgendermaßen auf:

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
Frage: Wie setzte ich im Dialog das Häckchen bei 'automatische Dateinamenerweiterung'?
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
So wird der Dialog aufgerufen:

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
Fragen:
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