Top > OOoBasic > Generic > filedialog
*ファイル選択ダイアログ &aname(filedialog); [#m3f76d32]

ここでは,ファイルの選択ダイアログの表示してみます。

開きたいファイルのパスや,保存するファイルのパスを取得する際にはファイルの選択ダイアログを使用するとファイルの選択が簡単に行えます。

注: KDE のファイル選択ダイアログを利用する可能性がある場合には FILEOPEN_SIMPLE の場合でも必ず initialize してください。


#contents
**ファイルを開くダイアログ [#s369525c]

まずは,ファイルを開くダイアログを表示使用する方法です。

ファイルダイアログは, com.sun.star.ui.dialogs.FilePicker サービスから提供されます。このサービスは createUnoService() メソッドでインスタンス化します。

  Dim oFilePicker As Object
    oFilePicker = createUnoService( _
      "com.sun.star.ui.dialogs.FilePicker" )
    oFilePicker.initialize( Array( _
      com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE ) )


この, oFilePicker を execute() するだけでダイアログが表示されます。

  oFilePicker.execute()
**表示フィルタの追加 [#xdf1f3bd]

ただ開くだけでは味気ないので,ファイルの種類別の表示フィルターを設定します。 表示フィルターの追加には, appendFilter() メソッドを使用します。

 void appendFilter( [in]string タイトル, [in]string フィルタ )

のように指定します。複数の表示フィルタを使用するには,セミコロン ";" で区切ります (*.sxw;*.sxc)。

  oFilePicker.appendFilter( "All Files (*.*)", "*.*" )
  oFilePicker.appendFilter( "Dictionary (*.dic)", "*.dic" )
  oFilePicker.appendFilter( "Writer and Calc", "*.sxw;*.sxc" )

ダイアログを表示したときに最初に表示されるフィルタを指定するには, setCurrentFilter() メソッドを使用します。

  oFilePicker.setCurrentFilter( "All Files (*.*)" )
  ' oFilePicker.setCurrentFilter( "Writer and Calc" )

setCurrentFilter() の引数にはフィルタのタイトルを指定します。タイトルのフィルタがなければエラーになります。 
**ファイルパスの取得 [#da506787]

oFilePicker を execute() メソッドで表示したあと,ユーザーが OK または Cancel ボタンを押したかを取得する必要があります。

  Dim nAccept As Integer
    nAccept = oFilePicker.execute()
    MsgBox nAccept

Cancel を押すと "0" が, OK を押すと "1" が表示されます。これは, com.sun.star.ui.dialogs.ExecutableDialogResults に定義済みの定数で判断できます。
ファイルが選択されて閉じられるたあと, oFilePicker から ファイルの URL が取得します。 URL を取得するのは getFiles() メソッドです。

  Dim sFiles()
  Dim sFileURL() As String
    nAccept = oFilePicker.execute()
    If nAccept = 1 Then
      sFiles() = oFilePicker.getFiles()
      sFileURL = sFiles(0)
      MsgBox sFileURL
    End If

ファイルの URL が取得できます。 URL フォーマットからシステムパスに変換するには, StarBasic の runtime function の ConvertFromURL を使用します。

  Dim sFilePath As String
    sFilePath = ConvertFromURL( sFileURL )
    MsgBox sFilePath

また, com.sun.star.ucb.FileContentProvider サービスを使用してもシステムパスに変換できます。

  Dim oFileContenrProvider As Object
    oFileContentProvider = createUnoService( _
             "com.sun.star.ucb.FileContentProvider" )
    sFilePath = oFileContentProvider.getSystemPathFromURL( sFileURL )
    MsgBox sFilePath

**ファイルの保存ダイアログ [#i386a21d]

ファイルの保存ダイアログは com.sun.star.ui.dialogs.FilePicker サービスを initialize() メソッドで初期化することで変更できます。 initialize() の引数の一つに com.sun.star.ui.dialogs.TemplateDescription の定数を指定します。

  Dim nAny(0)
    nAny(0) = _
       com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
    oFilePicker.Initialize( nAny() )

Initialize() を使用するとチェックボックスなどの拡張されたファイルダイアログも表示できます。

「ファイルに拡張子をつける」チェックボックスを持ったファイルダイアログを使用するには次のようにします。このチェックボックスを使用すると表示フィルタで選ばれた拡張子が付いたファイルの URL が取得できます。

  Dim nAny(0)
    nAny(0) = _
      com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION
    oFilePicker.Initialize( nAny() )

このダイアログを execute() すると,「ファイルに拡張子をつける」チェックボックスが表示されていますが,始めはチェックが入っていません。始めからチェックを入れておくには setValue() メソッドを使用します。 setValue() は Intialize() より後に行います。

 Dim nContentID, nAction As Integer
  nContentID = _
  com.sun.star.ui.dialogs.ExtendedFilePickerElementIds.CHECKBOX_AUTOEXTENSION
  oFilePicker.setValue( nContentID, nAction, True )

 void setValue ( 
    [in]integer コントロールID, 
    [in]integer コントロールアクション, 
    [in]any 値 )

コントロール ID は拡張されたコントロールの場合には com.sun.star.ui.dialogs.ExtendedFilePickerElementIds の定数を,拡張されていないコントロールの場合には com.sun.star.ui.dialogs.CommonFilePickerElementIds の定数で指定します。コントロールアクションは, com.sun.star.ui.dialos.ControlActions の定数で指定します。この定数はリストボックスとボタンのものしか定義されていませんのでここでは空の変数にしています (チェックボックスではいまのところ必要ないようです)。値はここではチェックした状態にするので True を指定します。

Initialize() ではなくインスタンス化する際に ProcessServiceManager から createInstanceWithArguments() メソッドでインスタンス化する際に初期化することもできます。

  Dim oFilePicker As Object
  Dim oProcessServiceManager As Object
  Dim nAny(0) As Integer
    oProcessServiceManager = GetProcessServiceManager()
    nAny(0) = _
       com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
    oFilePicker = oProcessServiceManager.createInstanceWithArguments( _
                 "com.sun.star.ui.dialogs.FilePicker", nAny() )

** 表示ディレクトリ [#tde29393]
最初に表示するディレクトリを指定します。
 sDir = "file:///home/user/Desktop"
 oFilePicker.setDisplayDirectory(sDir)

Windows 7 では動作しない様子 http://www.openoffice.org/issues/show_bug.cgi?id=110141
** 複数ファイル選択モード [#ue0ed96e]
複数のファイルを選択できるように設定します。

 oFilePicker.setMultiSelectionMode(True)

複数のファイルが選択された場合には getFiles メソッドの返り値が次のようになります。
- index 0: ディレクトリへの URL
- index 1: 一つ目のファイル
- index 2 ... 2: 二つ目のファイル...

返り値の要素数が 1 のときには選択されたファイルが一つです。

** デフォルト名 [#da9a4894]
ファイルのデフォルト名を指定します。ファイル名フィールドに最初に入力された状態になります。

 sDefaultName = "Unititled"
 oFilePicker.setDefaultName(sDefaultName)

** ダイアログタイトル [#z04b386e]
ダイアログのタイトルを設定します。
 sTitle = "Title"
 oFilePicker.setTitle(sTitle)

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes