ファイル読み書き(TOpenDialog, TSaveDialog)

メモ帳などのエディタでは、一般的にテキストファイルを開く場合には、モード付きの Windows ダイアログボックスが表示されます。

また、新しく作成されたテキストを保存する場合や、[ 名前を付けて保存 ] 等を選択した場合にも同様に Windows ダイアログボックスが表示されます。

このダイアログボックスの表示を Delphi で実現するにはTOpenDialog, TSaveDialog コンポーネントを使用します。(TOpenDialog, TSaveDialog は、コンポーネントパレットの System ページにあります)。

ここでは、TMemo コンポーネントといっしょに、これらのコンポーネントを用いて簡単なエディタを作成してみます。

TOpenDialog を用いて、ファイルを開く

?

フォームに上図のように、それぞれコンポーネントを貼り付けます。

出来ましたら、Button1 を押すと開きたいファイルを選択するWindows ダイアログボックスを表示します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

上記のように TOpenDialog コンポーネントを利用することで、簡単にダイアログを表示させる事が出来ますが、Execute メソッドがどのように動作するかを理解しなければ、上記のコードの意図が分からないかもしれません。

Execute メソッドは、どのように動作するか

TOpenDialog の Execute メソッドが呼び出されると、モーダル付きのファイル選択用のダイアログボックスが表示されます。

もし、ユーザーがそのダイアログの中でファイルを選択し、[ 開く ] をクリックした場合には、この Execute メソッドは True を返します。ユーザーが [ キャンセル ] を押したとき、及び×ボタンを押した場合には、Execute メソッドは False を返すようになっています。

そう考えると、なぜ if 文を使用しているのか、つまり以下のようなコードになっているのかが理解できます。

if OpenDialog1.Execute then
  ..........
  

結局、ユーザーがファイルを開くことを確定した場合(ファイルを選択して、[ 開く ] を押した場合)にのみ、if 文での評価が True となることが分かります。

TOpenDialog の FileName プロパティとは

Execute メソッドが True を返した場合、次に行うことはTMemo へのファイルの読み込みです。TOpenDialog の Execute メソッド呼び出しで表示されるダイアログの役割は、単なる「ファイルの選択」です。ですから選択されたファイルを実際に Memo へ読み込む作業を行う必要があるわけです。

ファイルを読み込む場合には、TMemo の LoadFromFile メソッドを使用すれば簡単に実現できます。その際に、TOpenDialog の FileName プロパティを使用します。

この FileName プロパティには、Windows ダイアログボックスで選択されたファイルの名前とディレクトリパスが格納されています。ですから、TMemo の LoadFromFile メソッドに、この FileName プロパティを渡すことで、無事ファイルを開くことができるということになります。

ファイル名と、ディレクトリパスの確認の為に、それらをタイトルバーに表示させて見ましょう。コードは以下のようになります。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
    Caption := OpenDialog1.FileName
  end;
end;

?

C:\\MySample にある sample.txt ファイルを読み込んだ例です。

編集したファイルを保存するには

ファイルを保存する方法は、TOpenDialog でファイルを開いた時と全く同じ考え方を利用できます。

まず、ファイルを保存するディレクトリ及びファイル名の決定の為に TSaveDialog コンポーネントを利用します。

procedure TForm1.Button2Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

保存するディレクトリ、ファイル名の決定に TSaveDialog を使用し、実際にファイルを保存するのに SaveToFile メソッドを使用しています。 TOpenDialog の使い方が理解できれば、自然に TSaveDialog も理解できるはずです。

TOpenDialog, TSaveDialog で利用できる各種設定

オブジェクトインスペクタで TOpenDialog, TSaveDialog のプロパティを見ると、様々な設定が出来る事がわかります。それらを簡単に見ていきましょう。

DefaultExt
選択されたファイル名に拡張子が付いていない場合には、この DefaultExt プロパティに設定されたものが自動的に付加されるようになります。また、このプロパティでは 3 文字を超える拡張子を指定する事ができませんので注意してください。
Filter
Windows ダイアログボックスに表示されるファイルマスクを指定します。つまり、拡張子 .txt をもつファイルのみをダイアログボックスに表示したい場合には*.txt をフィルタに設定すれば OK ということです。
InitialDir
Windows ダイアログボックスが最初に表示される時のカレントディレクトリをこの InitialDir プロパティで指定できます。例えば、C::\\MySample ディレクトリをデフォルトに設定する場合には、InitialDir プロパティの値を C::\\MySample に設定します。また、このプロパティの設定は必須ではありません。設定されていない場合には、適宜ディレクトリが選択され表示される事になります。

up next
Last update 2003/2/10