「ファイルを開く」「名前を付けて保存」ダイアログの作成 <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