「ファイルを開く」「名前を付けて保存」ダイアログの作成          <TOP>


GetOpenFileName 「ファイルを開く」ダイアログボックスを作成
GetSaveFileName 「保存」ダイアログボックスを作成
 

 

'================================================================
'= 「ファイルを開く」「名前を付けて保存」ダイアログの作成
'=    (OpenSave.bas)
'================================================================
#include "Windows.bi"

Type OPENFILENAME
    lStructSize       As Long      '構造体のサイズをバイト単位で指定
    hwndOwner         As Long      'ダイアログボックスを所有するウィンドウへのハンドルを指定
    hInstance         As Long      'メモリオブジェクトへのハンドルを指定
    lpstrFilter       As Long      '任意の数のNULL文字で終わる文字列のペアを保持するバッファへのポインタを指定
    lpstrCustomFilter As Long      'ユーザーによって選択されたファイル フィルター文字列のペアが保存される
    nMaxCustFilter    As Long      'lpstrCustomFilterメンバのバッファ サイズを指定
    nFilterIndex      As Long      'フィルターの初期インデックスを指定
    lpstrFile         As Long      '文字列バッファを指定
    nMaxFile          As Long      'lpstrFileメンバのバッファ サイズを指定
    lpstrFileTitle    As Long      '選択されたファイルの名前、および拡張子を保存するための文字列バッファを指定
    nMaxFileTitle     As Long      'lpstrFileTitle メンバのバッファ サイズを指定
    lpstrInitialDir   As Long      '初期ディレクトリのパスを指定
    lpstrTitle        As Long      'ダイアログボックスのタイトルバーに表示する文字列を指定
    Flags             As Long      'イアログボックスの初期化フラグを、「OFN_・・・・」の定数を組み合わせて指定
    nFileOffset       As Integer   'lpstrFileメンバが示すパス内の、ファイル名の位置がバッファの先頭から何バイト目であるかを示す
    nFileExtension    As Integer   'lpstrFileメンバが示すパス内の、拡張子の位置がバッファの先頭から何バイト目であるかを示す
    lpstrDefExt       As Long      'デフォルト拡張子の文字列を示す
    lCustData         As Long      'lpfnHookメンバが示すフック プロシージャへ渡すデータを指定
    lpfnHook          As Long      'フック プロシージャへのポインタを指定
    lpTemplateName    As Long      'hInstanceメンバが示すモジュール内にあるダイアログ テンプレートを指定
End Type

' 「ファイルを開く」ダイアログボックスを作成
Declare Function Api_GetOpenFileName& Lib "comdlg32" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME)

' 「保存」ダイアログボックスを作成
Declare Function Api_GetSaveFileName& Lib "comdlg32" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME)

#define OFN_HIDEREADONLY &H4            '読み取り専用のチェックボックスを非表示
#define OFN_PATHMUSTEXIST &H800         '有効なパスだけをうけつける
#define OFN_FILEMUSTEXIST &H1000        '存在しないファイル名は入力不可

Var Shared Text1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

'================================================================
'=
'================================================================
Declare Function ShowOpen(Filter As String, Flags As Long, hWnd As Long) As String
Function ShowOpen(Filter As String, Flags As Long, hWnd As Long) As String
    Var Buffer As String
    Var ofn As OPENFILENAME
    Var Ret As Long

    Buffer = String$(128, Chr$(0))

    ofn.lStructSize = Len(ofn)
    ofn.hwndOwner = hWnd
    ofn.Flags = Flags
    ofn.nFilterIndex = 1
    ofn.nMaxFile = Len(Buffer)
    ofn.lpstrFile = StrAdr(Buffer & Chr$(0))
    ofn.lpstrFilter = StrAdr(Filter & Chr$(0))

    Ret = Api_GetOpenFileName(ofn)
    
    If Ret <> 0 Then
        ShowOpen = Left$(Filter, InStr(Filter, Chr$(0)) - 1)
    End If
End Function

'================================================================
'=
'================================================================
Declare Function ShowSave(Filter As String, Flags As Long, hWnd As Long, FileName As String) As String
Function ShowSave(Filter As String, Flags As Long, hWnd As Long, FileName As String) As String
    Var ofn As OPENFILENAME
    Var Buffer As String
    Var Ret As Long

    Buffer = FileName & String$(128 - Len(FileName), 0)
    
    ofn.lStructSize = Len(ofn)
    ofn.hwndOwner = hWnd
    ofn.Flags = OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
    ofn.nFilterIndex = 1
    ofn.nMaxFile = Len(Buffer)
    ofn.lpstrFile = StrAdr(Buffer & Chr$(0))
    ofn.lpstrFilter = StrAdr(Filter & Chr$(0))
    
    Ret = Api_GetSaveFileName(ofn)
    
    If Ret <> 0 Then
        ShowSave = Left$(Filter, InStr(Filter, Chr$(0)) - 1)
    End If
End Function

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var Filter As String
    Var FileName As String
    Var Flags As Long
  
    Flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
            
    Filter = "全てのファイル(*.*)" & Chr$(0) & "*.*" & Chr$(0) & "モジュール・クラス(*.bas , *.cls)" & Chr$(0) & "*.bas;*.cls" & Chr$(0) & Chr$(0)
    
    FileName = ShowOpen(Filter, Flags, GethWnd)

    Text1.SetWindowText FileName
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Filter As String
    Var FileName As String
    Var Flags As Long
    
    Flags = OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY Or OFN_PATHMUSTEXIST
            
    Filter = "全てのファイル(*.*)" & Chr$(0) & "*.*" & Chr$(0) & "モジュール・クラス(*.bas , *.cls)" & Chr$(0) & "*.bas;*.cls" & Chr$(0) & Chr$(0)
    
    FileName = ShowSave(Filter, Flags, GethWnd, "Test.txt")

    Text1.SetWindowText FileName  
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End