目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
192 / 277 ←次へ | 前へ→

【95】Re:フォルダの選択
Excel  ちゃっぴ  - 05/3/19(土) 0:06 -

引用なし
パスワード
   んでもって本体

'*******************************************************************************************
'[BrowseCallbackProc]          コールバックされたメッセージによってメッセージを送る
'                    (コールバック関数)
'
'引数        hwnd        [SHBrowseForFolder]ウィンドウハンドル(Long)
'          uMsg        受信メッセージコード(Long)
'          lParam       パラメータ値(Long)
'          lpData       BROWSEINFO構造体のlParamメンバに設定された値(Long)
'*******************************************************************************************
Private Function BrowseCallbackProc(ByVal hwnd As Long, ByVal uMsg As BFFM_CallBackMsgCode, _
  ByVal lParam As Long, ByVal lpData As Long) As Long
  
  'メッセージコードが初期化終了の場合
  Select Case uMsg
    Case BFFM_INITIALIZED
      '初期フォルダを設定するメッセージ送信
      Call SendMessage(hwnd, BFFM_SETSELECTIONA, 1, ByVal mstrDefaultPath)
    Case Else
  End Select
End Function

'*******************************************************************************************
'[FARPROC]               AddressOf演算子の戻り値を戻す関数
'
'  ※ AddressOf演算子の値を変数に直接代入することができないので、
'    ダミーとして標準モジュール上に[FARPROC]関数を作成する。
'
'戻り値                 対象モジュールのアドレス
'
'引数        pfn         対象モジュールのアドレス(Long)
'*******************************************************************************************
Private Function FARPROC(pfn As Long) As Long
  FARPROC = pfn
End Function

'*******************************************************************************************
'[F_strSHBrowseForFolder]        BrowseForFolderを表示し、選択されたパス名を返す
'
'戻り値                 選択フォルダパス名(String)
'
'引数        strDefaultPath   初期表示フォルダ(String)
'          strPrompt      表示文字列(String)
'          lngFlag       [BROWSEINFO]構造体のulFlag(Long)
'          lngpidlRoot     [BROWSEINFO]構造体のpidlRoot(Long)
'          hOwner       親ウィンドウハンドル(Long)
'*******************************************************************************************
Public Function F_strSHBrowseForFolder( _
  Optional ByVal strDefaultPath As String = "", _
  Optional ByVal strPrompt As String = "フォルダを選択してください。", _
  Optional ByVal lngFlag As BrowseInfoFlags = BIF_RETURNONLYFSDIRS, _
  Optional ByVal lngpidlRoot As gEnumCSIDL = CSIDL_DESKTOP, _
  Optional ByVal hOwner As Long = -1) As String
  
  Dim udtBrowseInfo  As tagBROWSEINFO      '[BROWSEINFO]構造体
  Dim lngFolderPID  As Long           '選択フォルダPID
  Dim strFolderPath  As String * MAX_PATH    '選択フォルダパス名(初期値:vbNullChar * MAX_PATH )


  '初期フォルダ指定
  mstrDefaultPath = IIf(strDefaultPath = "", CurDir, strDefaultPath)

  '[BROWSEINFO]構造体初期化
  With udtBrowseInfo
    '親ウィンドウ設定
    .hOwner = IIf(hOwner = -1, FindWindow("XLMAIN", vbNullString), hOwner)
    .pidlRoot = lngpidlRoot             'ルートフォルダ指定
    .lpszTitle = strPrompt             '表示文字列指定
    .ulFlags = lngFlag               'オプションフラグ指定
    .lpfn = FARPROC(AddressOf BrowseCallbackProc)  'コールバック関数のアドレス代入
  End With
  
  'フォルダ選択ダイアログの表示
  lngFolderPID = SHBrowseForFolder(udtBrowseInfo)
  
  '選択フォルダのPIDが取得できた場合
  If lngFolderPID <> 0 Then
    '選択フォルダのPIDをパス名に変換
    If SHGetPathFromIDList(lngFolderPID, strFolderPath) <> 0 Then
      'NULL文字を削除
      F_strSHBrowseForFolder = _
         Left$(strFolderPath, InStr(strFolderPath, vbNullChar) - 1)
    End If
    '選択フォルダPIDのメモリを開放
    Call CoTaskMemFree(lngFolderPID)
  End If
End Function

Sub Test()
  MsgBox F_strSHBrowseForFolder("", , BIF_NEWDIALOGSTYLE Or BIF_NONEWFOLDERBUTTON)
End Sub
7,635 hits

【62】フォルダの選択 Jaka 04/8/11(水) 9:06 Excel[未読]
【68】フォルダ選択<API使用> BOTTA 04/8/23(月) 19:31 Excel[未読]
【69】フォルダ選択<Shell使用> BOTTA 04/8/23(月) 19:32 Excel[未読]
【70】フォルダ選択<FileDialog使用> BOTTA 04/8/23(月) 19:32 Excel[未読]
【93】Re:フォルダ選択<FileDialog使用> ちゃっぴ 05/3/18(金) 23:48 Excel[未読]
【71】Re:フォルダの選択 Jaka 04/8/30(月) 16:33 Excel[未読]
【94】Re:フォルダの選択 ちゃっぴ 05/3/19(土) 0:04 Excel[未読]
【95】Re:フォルダの選択 ちゃっぴ 05/3/19(土) 0:06 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
192 / 277 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free