ホーム > カテゴリ > Visual Basic >

「フォルダを選択」ダイアログを表示する

「フォルダを選択」ダイアログを表示するサンプルです。

サンプルの実行画面

APIの宣言

[FolderDlg.bas]

'-------------------------------------------
'「ファイルを参照」ダイアログを表示するAPI関数
'-------------------------------------------

  'lpBrowseInfo:BROWSEINFO構造体
  
  '戻り値:キャンセル0 選択した時はそのパスの値
  
Public Declare Function SHBrowseForFolder Lib "shell32.dll" (lpBrowseInfo As BROWSEINFO) As Long

'---------------------------------------------------
' SHBrowseForFolderで取得した値をパスに変換するAPI関数
'---------------------------------------------------

Public Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long

Public Type BROWSEINFO
  hwndOwner As Long        'ウインドウのハンドル
  pidlRoot As Long         '定数(CSIDL_××参照)
  pszDisplayName As String '
  lpszTitle As String      'タイトル
  ulFlags As Long          '定数(BIF_××参照)
  lpfn As Long             'コールバック
  lParam As Long           'コールバックのパラメータ
  iImage As Long           '
End Type

'定数
Public Const CSIDL_DESKTOP = &H0           '[デスクトップ]
Public Const CSIDL_INTER_EXP = &H1         '[InterNet Explorer]
Public Const CSIDL_PROGRAMS = &H2          '[プログラム]
Public Const CSIDL_CONTROLS = &H3          '[コントロールパネル]
Public Const CSIDL_PRINTERS = &H4          '[プリンター]
Public Const CSIDL_PERSONAL = &H5          '[My Documents]
Public Const CSIDL_FAVORITES = &H6         '[お気に入り]
Public Const CSIDL_STARTUP = &H7           '[スタートアップ]
Public Const CSIDL_RECENT = &H8            '[Recent]
Public Const CSIDL_SENDTO = &H9            '[SendTo]
Public Const CSIDL_BITBUCKET = &HA         '[ごみ箱]
Public Const CSIDL_STARTMENU = &HB         '[スタートメニュー]
Public Const CSIDL_DESKTOPDIRECTORY = &H10 '[デスクトップ(フォルダ)]
Public Const CSIDL_DRIVES = &H11           '[マイコンピュータ]
Public Const CSIDL_NETWORK = &H12          '[ネットワークコンピュータ]
Public Const CSIDL_NETHOO = &H13           '[NetHood]
Public Const CSIDL_FONTS = &H14            '[Fonts]
Public Const CSIDL_TEMPLATES = &H15        '[ShellNew]

Public Const BIF_CLOSE = &H1    '特殊フォルダは表示しない
Public Const BIF_SHOW = &H2     '特殊フォルダも表示する
Public Const BIF_FILES = &H4000 'ファイルも表示する

'------------------------------------------------------------------
'■関数名    FolderDlg
'■用途    「ファイルを参照」ダイアログを表示して選択したパスを取得
'■引数     nHwnd:親ウインドウのハンドル
'■戻り値    ファイル、ディレクトリを選択した場合はそのパス名
'        キャンセルした場合はCancel
'------------------------------------------------------------------
Public Function FolderDlg(nHwnd As Long) As String

  Dim BI As BROWSEINFO  'BROWSEINFO構造体
  Dim nPath As String   '選択されたパス名を格納する変数
  Dim Ret As Long       '戻り値
      
    With BI
       BI.hwndOwner = nHwnd            'ウインドウハンドルの設定
       BI.lpszTitle = "フォルダの選択"  'タイトルの設定
       BI.pidlRoot = CSIDL_DESKTOP     'ルートの設定
       BI.ulFlags = BIF_CLOSE          'フラグの設定
    End With
    
  '「フォルダを参照」ダイアログを表示
   Ret = SHBrowseForFolder(BI)
  'バッファを確保
   nPath = String(256, Chr(0))

   If Ret <> 0 Then
     'パスを取得
      Call SHGetPathFromIDList(Ret, nPath)
     'パスを格納
      FolderDlg = nPath
   Else
     'キャンセルに
      FolderDlg = Cancel
   End If

 End Function

APIの呼び出し

[FolderDlg.frm]

Private Sub Command1_Click()

  Dim Path As String   'パスが格納される変数

    '選択したパスを取得する
    Path = FolderDlg(Form1.hWnd)

  If Path = Cancel Then
     MsgBox "キャンセルを選択"
  Else
     MsgBox "パス名: " & Path
  End If
   
End Sub

ソースコード一式のダウンロード

vbapi_folderdlg.zip 2.64 KB (2,706 バイト)

このサンプルの動作環境について

このサンプルは 「Windows98」及び「Microsoft Visual Basic 5.0 Professional Edition」で確認しております。環境が異なる場合は正常に動作しない場合もございますのでご了承下さい。





関連記事



公開日:2015年03月03日
記事NO:00321