CommonDialog リファレンス

「ファイルを開く」「名前を付けて保存」ダイアログ(Win32 の OPENFILENAME)を扱う CommonDialog オブジェクトのリファレンスです。

記法: P=プロパティ(読み書き)、M=メソッド。メンバー名の照合は大文字小文字を区別しません。

目次

  1. 取得方法
  2. メソッド
  3. プロパティ
  4. OFN_ENABLEHOOK(フォルダ選択)
  5. 注意点
  6. 定数
  7. 使用例

1. 取得方法

const commdlg = api.CreateObject("CommonDialog");   // 推奨
const commdlg2 = te.CommonDialog;                   // te.CommonDialog も同じ(参照のたびに新規生成)

2. メソッド

名前 戻り値 説明
ShowOpen() bool 「ファイルを開く」ダイアログを表示する。OK で true、キャンセル・失敗で false。選択結果は FileName に入る。Flags に OFN_ENABLEHOOK を含めると、フォルダなども選択できる(4章)
ShowSave() bool 「名前を付けて保存」ダイアログを表示する。戻り値と結果の扱いは ShowOpen と同じ。OFN_ENABLEHOOK の特別な処理はない

どちらも、表示前にファイル名のバッファが未確保なら、MaxFileSize 文字分を確保し、空の文字列で初期化します。


3. プロパティ

名前 型 説明
FileName string ダイアログの初期ファイル名/選択結果のパス。代入した文字列は MaxFileSize 文字までに切り詰められる
InitDir string 最初に表示するフォルダ
Filter string ファイルの種類。"説明|パターン|説明|パターン…" の形式で、区切りに | を使う(内部で NUL に変換される)。例: "Text|*.txt|All files|*.*"。; で複数パターンを並べられる("*.jpg;*.png")。取得時の値は InitDir の内容が返る(実装の都合)ため、読み出しには使わない
FilterIndex int 選択中のフィルターの番号(1始まり)。0 は未指定(「カスタムフィルター」)
DefExt string 拡張子が省略されたときに付ける既定の拡張子(. なし。例: "txt")
Title string ダイアログのタイトル
Flags int OFN_* フラグ(下記6章)
FlagsEx int OPENFILENAME.FlagsEx(拡張フラグ)を読み書きする。Flags とは別の値で、初期値は 0。ShowOpen / ShowSave のどちらにも渡される。指定できる値は Windows SDK の定義による(SDK では OFN_EX_NOPLACESBAR = 1)
MaxFileSize int FileName のバッファ文字数

4. OFN_ENABLEHOOK(フォルダ選択)

ShowOpen で Flags に OFN_ENABLEHOOK(0x20) を含めると、TE 独自の動作になります(ShowSave では無効)。

sync.js の OpenDialogEx が、bFilesOnly が偽のときにこのフラグを付けて、ファイルとフォルダの両方を選べるようにしています。


5. 注意点


6. 定数

consts.js で定義されています。

OFN_*(Flags) OFN_READONLY = 1 / OFN_OVERWRITEPROMPT = 2 / OFN_HIDEREADONLY = 4 / OFN_NOCHANGEDIR = 8 / OFN_SHOWHELP = 0x10 / OFN_ENABLEHOOK = 0x20 / OFN_ENABLETEMPLATE = 0x40 / OFN_ENABLETEMPLATEHANDLE = 0x80 / OFN_NOVALIDATE = 0x100 / OFN_ALLOWMULTISELECT = 0x200 / OFN_EXTENSIONDIFFERENT = 0x400 / OFN_PATHMUSTEXIST = 0x800 / OFN_FILEMUSTEXIST = 0x1000 / OFN_CREATEPROMPT = 0x2000 / OFN_SHAREAWARE = 0x4000 / OFN_NOREADONLYRETURN = 0x8000 / OFN_NOTESTFILECREATE = 0x10000 / OFN_NONETWORKBUTTON = 0x20000 / OFN_NOLONGNAMES = 0x40000 / OFN_EXPLORER = 0x80000 / OFN_NODEREFERENCELINKS = 0x100000 / OFN_LONGNAMES = 0x200000 / OFN_ENABLEINCLUDENOTIFY = 0x400000 / OFN_ENABLESIZING = 0x800000 / OFN_DONTADDTORECENT = 0x2000000 / OFN_FORCESHOWHIDDEN = 0x10000000

よく使う組み合わせ: OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_NODEREFERENCELINKS(sync.js の OpenDialogEx と同じ)


7. 使用例

// ファイルを開く
const commdlg = api.CreateObject("CommonDialog");
commdlg.InitDir = "C:\\Users";
commdlg.Title = "画像を選択";
commdlg.Filter = "画像|*.jpg;*.png;*.gif|すべてのファイル|*.*";
commdlg.FilterIndex = 1;
commdlg.Flags = OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING | OFN_HIDEREADONLY | OFN_NODEREFERENCELINKS;
if (commdlg.ShowOpen()) {
    const path = commdlg.FileName;
}

// 名前を付けて保存(既存ファイルは上書き確認)
const save = api.CreateObject("CommonDialog");
save.FileName = "output.txt";
save.DefExt = "txt";
save.Filter = "テキスト|*.txt|すべてのファイル|*.*";
save.Flags = OFN_OVERWRITEPROMPT | OFN_EXPLORER | OFN_ENABLESIZING | OFN_NOCHANGEDIR;
if (save.ShowSave()) {
    const dest = save.FileName;
}

// フォルダも選べる「開く」(OFN_ENABLEHOOK)
const dlg = api.CreateObject("CommonDialog");
dlg.InitDir = "C:\\";
dlg.Filter = "すべてのファイル|*.*";
dlg.Flags = OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_ENABLESIZING | OFN_ENABLEHOOK;
if (dlg.ShowOpen()) {
    const folderOrFile = dlg.FileName;
}

// 長いパスに備えて、バッファを先に広げる
const big = api.CreateObject("CommonDialog");
big.MaxFileSize = 1024;     // FileName を設定する前に
big.FileName = "";

sync.js に OpenDialogEx(path, filter, bFilesOnly) と、フィルターの文字列を作る MakeCommDlgFilter があります。TE の標準スクリプトでは、これらを経由して呼ぶ使い方が一般的です。

関連