C++Builderでファイルの保存を行うコンポーネントには、TSaveDialogとTFileSaveDialogコンポーネントがあります。この記事では、TFileSaveDialogに使い方について説明します。
TFileSaveDialogは、Vista および、より新しい Windows オペレーティング システム スタイルの、ファイル保存のためのダイアログのクラスです。
TFileSaveDialog
TFileSaveDialogの使い方を説明します。
Vcl.Dialogs.TFileSaveDialog - RAD Studio API Documentation
サンプルコード1
TFileSaveDialogを使用して、フォルダを選択するサンプルコードです。
void __fastcall TSDIAppForm::FileSave1Execute(TObject *Sender)
{
String fname = "D:\\画像\\201411\\small\\2014-11-15 12.55.55.jpg";
try
{
try
{
FileSaveDialog1->DefaultFolder = TPath::GetDirectoryName(fname);
// ----------------
TFileTypeItem *FileType;
FileSaveDialog1->FileTypes->Clear();
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "JPEG";
FileType->FileMask = "*.jpg";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "PNG";
FileType->FileMask = "*.png";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "webp";
FileType->FileMask = "*.webp";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "BMP";
FileType->FileMask = "*.bmp";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "GIF";
FileType->FileMask = "*.gif";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "TIFF";
FileType->FileMask = "*.TIF";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "icon";
FileType->FileMask = "*.ico";
// ----------------
FileSaveDialog1->FileName = TPath::GetFileName(fname);
if (FileSaveDialog1->Execute())
{
// Memo1->Lines->Add(FileSaveDialog1->FileName);
// Memo1->Lines->Add(IntToStr((int)FileSaveDialog1->FileTypeIndex));
}
} catch(...) {
MessageDlg("ファイルの保存に失敗しました", mtError , TMsgDlgButtons() << mbYes, 0);
}
} __finally{
//
}
}
実行結果です。

サンプルコード2
TFileSaveDialogを使用して、フォルダを選択するサンプルコードです。
Title、FileNameLabel、OkButtonLabel を使用したサンプルです。
void __fastcall TSDIAppForm::FileSave1Execute(TObject *Sender)
{
FileSaveDialog1->Title ="フォルダを選択してください";
FileSaveDialog1->FileNameLabel = "フォルダ名:"; // ファイル名編集ボックスの隣にあるラベルのテキスト。
FileSaveDialog1->OkButtonLabel = "フォルダの選択"; // 開く または 保存 ボタンのテキスト。
// FileSaveDialog1->Options << fdoPickFolders << fdoAllowMultiSelect;
FileSaveDialog1->DefaultFolder = "D:\\画像\\";
if (FileSaveDialog1->Execute())
{
// Memo1->Lines->Add(FileSaveDialog1->FileName);
}
}実行結果です。

主なプロパティ
主なプロパティの一覧です。
| 主なプロパティ | 種別 | 説明 |
|---|---|---|
| DefaultExtension | published | ファイル名に追加されるデフォルトの拡張子。 |
| DefaultFolder | published | 最近使ったフォルダがなかった場合のデフォルトのフォルダ。 |
| FileName | published | ダイアログのファイル名編集ボックス内のテキスト。 |
| FileNameLabel | published | ファイル名編集ボックスの隣にあるラベルのテキスト。 |
| Files | public | 選択されたファイル名のリスト。 |
| FileTypeIndex | published | ダイアログを開いたときに、デフォルトで選択されているフィルタを指定します。 |
| FileTypes | published | ダイアログで利用できるファイル タイプ マスク(フィルタ)を判定します。 |
| Name | published | コードで参照されている、コンポーネントの名前を示します。 |
| OkButtonLabel | published | 開く または 保存 ボタンのテキスト。 |
| Options | published | ダイアログの制御するオプションのリスト。 |
| Tag | published | NativeInt 整数値をコンポーネントの一部として保持します。 |
| Title | published | ダイアログボックスのタイトルバーに表示するテキストを指定します。 |
FileTypes
FileTypes は TFileTypeItems のインスタンスで、ファイル タイプのリストを保有しており、それぞれが TFileTypeItem のインスタンスです。
ファイル タイプをダイアログに追加するには、TFileTypeItems インスタンスを FileTypes から取得し、次のサンプルにあるように、TFileTypeItems.Add メソッドを使用します。
FileTypes->Add()でTFileTypeItemを新規に作成し、DisplayNameと、FileMaskを設定します。
TFileTypeItem *FileType;
FileSaveDialog1->FileTypes->Clear();
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "画像ファイル";
FileType->FileMask = "*.bmp;*.dib;*.jp*;*.gif;*.png;*.webp;*.ICO;*.TIF*;*.heic";
// ----------------
FileType = FileSaveDialog1->FileTypes->Add();
FileType->DisplayName = "JPEG";
FileType->FileMask = "*.jp*";OkButtonLabel
OkButtonLabelを使用すると、開く または 保存 ボタンのテキストを設定できます。
FileSaveDialog1->OkButtonLabel = "画像を開く"; // 開く または 保存 ボタンのテキスト。Options
ダイアログの制御するオプションのリストです。
次の表に,指定できる値を示します。
| 値 | 意味 |
|---|---|
| fdoOverWritePrompt | ファイルを保存するときに,同じ名前の既存ファイルを上書きする前にプロンプトを表示します。 これは保存ダイアログのデフォルトです。 |
| fdoStrictFileTypes | 保存するファイルのファイル拡張子が選択したファイルの種類と一致している必要があります。 |
| fdoNoChangeDir | 未使用。 |
| fdoPickFolders | ファイルではなくフォルダを選択します。 |
| fdoForceFileSystem | ファイルシステム項目を返す必要があります。 |
| fdoAllNonStorageItems | シェル名前空間内の任意の項目を選択できます。 このフラグを fdoForceFileSystem と組み合わせることはできません。 |
| fdoNoValidate | 選択したファイルをアプリケーションが開くことを禁止する状況(共有違反,アクセス拒否エラーなど)がないかどうかをチェックしません。 |
| fdoAllowMultiSelect | 開くダイアログで複数の項目を選択できます。 |
| fdoPathMustExist | 既存のフォルダ内の項目を返す必要があります。 これはデフォルトです。 |
| fdoFileMustExist | 存在する項目を返す必要があります。 これは,開くダイアログのデフォルト値です。 |
| fdoCreatePrompt | 保存ダイアログで返す項目が存在しない場合に作成を確認するメッセージを表示します。 項目の作成は行いません。 |
| fdoShareAware | ファイルを開く際に共有違反があった場合は,アプリケーションをコールバックして通知します。 このフラグは fdoNoValidate によって無効になります。 |
| fdoNoReadOnlyReturn | 読み取り専用項目を返しません。 |
| fdoNoTestFileCreate | 保存ダイアログから返される項目の作成をテストしません。 これを設定しない場合は,呼び出し側のアプリケーションが作成テストで検出されたエラーを処理する必要があります。 |
| fdoHideMRUPlaces | 最近開いたまたは保存した項目の場所を非表示にします。 |
| fdoHidePinnedPlaces | ユーザーが選択できるピン設定された場所を非表示にします。 |
| fdoNoDereferenceLinks | ショートカットをショートカットのターゲット項目として処理しません。つまり,アプリケーションは .lnk ファイルを開くことができます。 |
| fdoDontAddToRecent | 開くまたは保存する項目を最近の場所のリストに追加しません。 |
| fdoForceShowHidden | 非表示の項目を表示します。 |
| fdoDefaultNoMiniMode | 保存ダイアログボックスを拡張モードで開きます。拡張モードでは,ユーザーがフォルダを参照できます。 保存ダイアログボックスの左下隅にあるボタンをクリックすると,拡張モードを設定したり解除することができます。 |
| fdoForcePreviewPaneOn | プレビューペインを表示します。 |


