☆ファイルを扱うときのテンプレート?
ファイルを開いたり、保存したりという処理の中で、ファイルの内容が変更されている場合は、その処理をユーザーに選択させますよね。
今回、その一連の流れをまとめてみました。
確認ダイアログが表示されるかどうか確かめるために、次の処理をします。
よく見るこんなダイアログです。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList; type TForm1 = class(TForm) ActionList1: TActionList; acNew: TAction; acSaveAs: TAction; acOpen: TAction; acSave: TAction; procedure FormCreate(Sender: TObject); procedure acNewExecute(Sender: TObject); procedure acOpenExecute(Sender: TObject); procedure acSaveAsExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure acSaveExecute(Sender: TObject); private FN: String; // 作業中のファイル名 Modified: Boolean; // データが更新されたときにTrueに設定する。 function ConfirmingDialog : Boolean; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // 現在作業中のファイルをどうするのかをユーザーに示して処理させます。 function TForm1.ConfirmingDialog : Boolean; var I: Integer; begin Result := True; if not Modified then Exit; Result := False; // 現在のデータが変更されている場合の確認 I := MessageDlg(Format('%sは変更されています。保存しますか?', [FN]), mtConfirmation, [mbYes, mbNo, mbCancel], 0); case I of id_Yes: begin acSaveExecute(Self); if Modified then Exit; // 保存されなかった場合 end; id_Cancel: Exit; id_No: ; // id_Noは保存しないという選択なので処理不要です。 end; Modified := False; Result := True; end; // 初期設定 procedure TForm1.FormCreate(Sender: TObject); begin FN := ''; Modified := False; end; // 新規作成 procedure TForm1.acNewExecute(Sender: TObject); begin if not ConfirmingDialog then Exit; FN := ''; { 処理 } end; // 開く procedure TForm1.acOpenExecute(Sender: TObject); begin if not ConfirmingDialog then Exit; FN := '開いたファイル名'; { 処理 } end; // 名前を付けて保存 procedure TForm1.acSaveAsExecute(Sender: TObject); begin if not ConfirmingDialog then Exit; FN := '名前を付けたファイル名'; { 処理 } end; // 保存 procedure TForm1.acSaveExecute(Sender: TObject); begin if FN = '' then begin acSaveAsExecute(Self); Exit; end; { 処理 } Modified := False; end; // 終了してもよいかどうか procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := ConfirmingDialog; end; end.
確認ダイアログが表示されるかどうか確かめるために、次の処理をします。
procedure TForm1.Button1Click(Sender: TObject); begin Modified := True; Close; end;
よく見るこんなダイアログです。
デフォルトのファイル名が空白のため、ファイル名部分が表示されていませんが、 実際のアプリケーションでは「Untitled」や「無題」を設定しています。
| 固定リンク