


 
 
 
 
 
 
 |
Delphi2010 「保存」画面(SaveDialog) 2010/10/31 |
前回は[Dialogs]内の「OpenDialog」(オープンダイアログボックス=「開く」画面)について見ましたので、今回も同じく[Dialogs]内の「SaveDialog」(セーブダイアログボックス=「保存」画面)です。「セーブ」という言葉はゲームソフトで遊ぶ人にはお馴染みの用語ですが、そうでない人には余りピンと来ないかもしれません。前回の「開く」画面と同じような感じですが、こちらは、作成したデータ等をディスクに保存(保管・記録・登録…)する際に利用するもので、フォルダの指定、ファイル名の選択/入力を行います。「保存」画面は Delphi6 にもあります。
取り合えず配置してみます。1つ目ですので Nameプロパティは「SaveDialog1」となります。アイコン絵となりますが実行時には「保存」画面が表示されます。
「開く」画面と同様、「保存」画面を表示させるためのボタンを付けて、そのボタンをクリックした時の処理を記述してみます。扱い方は「開く」画面の時とほとんど変わりません。
procedure TForm1.Button2Click(Sender: TObject);
var
fn : string ;
begin
fn := Label1.Caption ;
SaveDialog1.InitialDir := ExtractFilePath(fn);
SaveDialog1.FileName := ExtractFileName(fn);
if (SaveDialog1.Execute) then begin
fn := SaveDialog1.FileName ;
try
Memo1.Lines.SaveToFile(fn);
Label1.Caption := fn ;
except
if (FileExists(fn)) then
DeleteFile(fn);
end;
end;
end; |
保存時の例外処理を入れてあります。保存先が存在しない場合や容量不足の場合、プロテクトが掛かっている場合など、正常保存出来ない場合は例外が発生します。容量不足の場合には、中途半端状態の欠落ファイルを生成してしまう場合があるので、もし(欠落)ファイルが存在する場合は、その(欠落)ファイルを削除する、という風にしておきます。
これで保存・コンパイル(再構築)・実行を行います。

メモ欄に文章を入力して、[保存]ボタンをクリック
↓

「名前を付けて保存」画面が表示されます
↓

ファイル名の入力欄に「test.txt」と入力して
[保存]ボタンをクリックすると
メモ欄に入力した文章を保存します
「保存」画面を表示=実行するには、「開く」画面同様、「SaveDialog1.Execute」というように、Executeメソッドを使用します。ファイル名を入力して「保存」をクリックしたりファイル名をダブルクリックをすればこのメソッドは「True」を返します。「キャンセル」すると「False」を返します。この「保存」画面は、使用するWindowsの種類によって違ってきます。入力/選択したファイル名は、FileNameプロパティでフルパスファイル名が取得できます。
テキストファイルを選択するのだから、テキストファイルだけを指定したい=ファイルの種類で指定をさせたい、という場合には、Filterプロパティを指定します。<オブジェクトインスペクタ>にて、Filterプロパティの入力欄の右端[…]をクリックします。また、拡張子(ファイルの種類)を入力しなかった場合、拡張子を自動的に付けるためのDefaultExtプロパティを「.txt」と入力しておきます。

↓

既に入力してある「開く」画面 OpenDialog1 の Filter欄からコピー&ペーストする事でもOKです。
保存・コンパイル(再構築)・実行をして、メモ欄に文章を入力し、[保存]ボタンをクリックします。ファイルの種類を指定してあると、ファイル一覧は該当するファイル名だけが表示されますので、分かりやすくなります。

↓

なお、1つのファイルの種類に複数の拡張子を指定したい場合は、ワイルドカード(*,?)を使う事も出来ますが、セミコロン(;)で区切って指定する事も可能です。
この場合のFilterプロパティの内容(文字列データ)は
テキストファイル(*.txt)|*.txt|その他のテキストファイル|*.txt;*.csv;*.dat;*.ini|全てのファイル(*.*)|*.* |
となります。フィルタ名とフィルタ、各行は「|」で区切られます。勿論プログラム上で実行時に指定させる事も可能です。
ファイルの種類の指定によってDefaultExtプロパティの内容を変えたい、という事は出来ませんので、その場合はDefaultExtプロパティを未入力状態にしておいてプログラム上で補完してやります。
if (ExtractFileExt(fn) = '') then begin
case SaveDialog1.FilterIndex of
1: fn := fn + '.txt';
2: fn := fn + '.csv';
3: fn := fn + '.dat';
・・・ |
保存を行う際、既に存在するファイルを選択する場合、「上書きをしてもいいですか?」という画面を出したい場合があります。その場合は、Optionsプロパティの ofOverwritePromptを「True」にします。
保存・コンパイル(再構築)・実行を行うと、

↓

のように、既に存在するファイル名を指定すると、注意を促すメッセージ画面が表示されます。「いいえ」をするとファイル名の指定に戻ります。「はい」をすると「保存」画面を閉じます。
但し、DefaultExtプロパティを未入力状態にして、プログラム上で FilterIndexプロパティを参照し拡張子を追加している場合には対応できませんので、このような注意メッセージ画面を表示したい場合にはプログラム上で MessageDlg関数等を使って自分で表示させる必要があります。
その他、Optionsプロパティ・OptionsExプロパティの内容については、前回の「開く」画面と同じですので、そちらを参照して下さい。
<オブジェクトインスペクタ>を見ると以下のようになっています。
というわけで、「保存」画面は、「開く」画面とほとんど同じです。
|
|
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/10/30
2010/10/31
▼2010/11/01
シェアウェア
Script!World
データベース
|