前節の最後で、どんな名前のファイルでも読み書きできるようになりました。しかし、長いファイル名などは入力するのが面倒です。特に「読込」ボタンを押すときは、メモ帳などの多くのソフトウェアで「ファイル」→「開く」を選んだときのように、ファイルの一覧から目的のファイルを選ぶ方が楽です。
Delphi にも、このようにファイルの一覧から目的のファイルを選ぶことが出来る、OpenDialog というコンポーネントが[Dialogs]タグ内にあります。では、早速フォームに OpenDialogを1つ配置してください。(場所はどこでも構いません。)
実行してみましょう。実行中は、OpenDialog は表示されませんね。Timer と同様、OpenDialog はコントロール (実行時に表示されるコンポーネント) ではなく非ビジュアルコンポーネントです。ただし、Timer と違い、OpenDialogは Execute というメソッドで画面に表示させることが出来ます。次のように、フォームに「ファイル選択」ボタンを付け加えてください。
また、そのイベントハンドラを次のようにしてください。
procedure TForm1.ButtonFileSelectClick(Sender: TObject); begin OpenDialog1.Execute; EditFileName.Text := OpenDialog1.FileName; end;
それでは、プログラムを実行し、「ファイル選択」ボタンを押してみましょう。
実行し、「ファイル選択」ボタンを押してみると、 | |
ファイルの選択画面が出てくるので、ここで読み込みたいファイルを選んで「開く」を押すと | |
ファイル名がエディットに入り、さらに「読込」ボタンを押すと | |
メモにデータが読み込まれます。 |
OpenDialog には、いくつかのプロパティがありますが、ここでは、頻繁に使われるFileNameおよびFilterプロパティについて説明しておきましょう。
FileName | OpenDialog で選択したファイルの名前がここに入っています。 |
Filter | これを設定しておかないと、OpenDialog
はあらゆる種類のファイルの一覧を表示します。しかし、実際には「拡張子が『txt』であるファイルだけを一覧表示してほしい」というようなことが多いです。そこで、Filter
プロパティを次のように設定しておくと便利です。
「拡張子が『txt』ではないファイルを開きたいこともある」場面も想定される場合は、次のように「全てのファイル」をリストに加えておくと便利です。このように、使用が想定される複数のファイルの種類を Filter プロパティに入れておけば、ダイアログボックスの [ファイルの種類] 欄から (表示させたいファイルの種類を) 選択することができます。 |
試してみると分かりますが、このプログラムのままでは、OpenDialog で「OK」を押しても「キャンセル」を押してもファイル名の欄が埋まってしまいます。これでは不便です。「OK」を押したときだけファイル名の欄を埋め、「キャンセル」を押したときには何もしない、というプログラムなら親切です。プログラムを次のように変更すると、「キャンセル」を押したときには何もしなくなります。
procedure TForm1.ButtonFileSelectClick(Sender: TObject); begin if (OpenDialog1.Execute = True) then begin EditFileName.Text := OpenDialog1.FileName; end ;end;
これは、「OK」を押したときには OpenDialog1.Execute の値が True になり、「キャンセル」を押したときには OpenDialog1.Execute の値が False になるためです。
if を使わない先ほどの
procedure TForm1.ButtonFileSelectClick(Sender: TObject); begin OpenDialog1.Execute; EditFileName.Text := OpenDialog1.FileName; end;
でもプログラムはそれなりに動きますが、今後はなるべく if を使ってより親切なプログラムにしましょう。
このプログラムは、「読込」ボタンと「ファイル選択」ボタンの2つを、「読込」ボタン1つにまとめることができます。また、そうすることによって、EditFileName も不用になります。フォームから「ファイル選択」ボタンを取り除き、それでもプログラムが正しく動くようにしてください。
SaveDialog を使うことによって、保存するファイルの名前も入力しやすくなります (特に何らかのファイルに上書きして保存する場合は大変便利です)。SaveDialogを使うプログラムに変更してください。 また、 EditFileName も不用になるので、フォームから取り除いてください。なお、 SaveDialogの使用方法は、OpenDialogと同様です。
SaveDialog には、DefaultExt という大変便利なプロパティがあります。例えばここに「txt」と設定しておいた場合、SaveDialog が表示されている場面で「test.txt」と入力するつもりが誤って「test」としか入力しなかった場合 (拡張子を付け忘れた場合)、自動的に「.txt」をつけてくれます。