AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
Delphi2010 「開く」画面(OpenDialog) 2010/10/30
 
前回は[System]内の「OleContainer」(OLEコンテナ)について見ました。その他[System]内には、COM+管理用の COMAdminCatalog、DDE通信用の DdeClientConv、DdeClientItem、DdeServerConv、DdeServerItem、がありますがパスします。また、[Win 3.1]内も今時 Windows3.1?って事でこれもパスします。よって今回からは、[Dialogs]内のコンポーネントを見ていきます。「テスト21」として新規作成しておきます(フォルダ「021」)。
 
[Dialogs]内の「OpenDialog」(オープンダイアログボックス=「開く」画面)です。ダイアログという言葉は、対話・会話というような意味ですが、ファイルを開きます、どのファイルですか?と利用者に問いかけるような場合に利用します。「開く」画面は Delphi6 にもあります。

 
取り合えず配置してみます。1つ目ですので Nameプロパティは「OpenDialog1」となります。アイコン絵となりますが実行時には「開く」画面が表示されます。

 
これだけだとどうしようもありませんから、取り合えず、「開く」画面を表示させるためのボタンと、テキストファイルを開くという前提で、メモを配置します。ファイル名を表示するためラベルも付けておきます。

 
ボタンをクリックした時の処理を記述します。取り合えず簡単化してあります。
procedure TForm1.Button1Click(Sender: TObject);
var
 fn : string ;
begin
 if (OpenDialog1.Execute) then begin
  fn := OpenDialog1.FileName ;
  Memo1.Lines.LoadFromFile(fn);
  Label1.Caption := fn ;
 end;
end;
これで保存・コンパイル(再構築)・実行を行います。

ボタン「開く」をクリック


「開く」画面が表示されるので
フォルダ、ファイル名を選択


指定したファイルを開きました
 
「開く」画面を表示=実行するには、「OpenDialog1.Execute」というように、Executeメソッドを使用します。「開く」をクリックしたりダブルクリックをすればこのメソッドは「True」を返します。「キャンセル」すると「False」を返します。
この「開く」画面は、使用するWindowsの種類によって違ってきます。ここでは Windows7 にて動作を行っていますからこのような画面ですが、Windows98での画面、Windows2000での画面、WindowsXpでの画面、はそれぞれ違ってくる可能性があります。これは他のコンポーネントでも多かれ少なかれあるのですが、まぁ見た目は多少違っても、行う事は同じです。
 
選択したファイル名は、FileNameプロパティでフルパスファイル名が取得できます。「開く」画面を表示する時には、フォルダ・ファイル名は前回状態になりますが、初期状態はどこになるのか不明であったり、敢えてどこそこに固定したい、という場合もあります。その場合は、Executeメソッドを使用する前に、InitialDirプロパティでフォルダを、FileNameプロパティでパス部分を除いたファイル名だけを指定出来ます。
procedure TForm1.FormShow(Sender: TObject);
begin
 Label1.Caption := '' ;
 Memo1.Lines.Clear ;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
 fn : string ;
begin
 fn := Label1.Caption ;
 OpenDialog1.InitialDir := ExtractFilePath(fn);
 OpenDialog1.FileName := ExtractFileName(fn);
 if (OpenDialog1.Execute) then begin
  fn := OpenDialog1.FileName ;
  Memo1.Lines.LoadFromFile(fn);
  Label1.Caption := fn ;
 end;
end;
 
テキストファイルを選択するのだから、テキストファイルだけを指定したい=ファイルの種類で指定をさせたい、という場合には、Filterプロパティを指定します。<オブジェクトインスペクタ>にて、Filterプロパティの入力欄の右端[…]をクリックします。



フィルタ名、フィルタを入力します


[OK]をクリックします
 
保存・コンパイル(再構築)・実行をして、ボタン[開く]をクリックすると



のように、ファイルの種類の指定が出来るようになります。
 
 
ファイル名の入力時、拡張子(ファイルの種類)を入力しなかった場合、自動的に拡張子を付加させたい場合には、DefaultExtプロパティを指定します。例えば「.txt」のように入力をしておきます。但し、取り扱うファイルの種類が多くなる場合には、敢えてここを未入力状態にしておき、プログラム上で
if (ExtractFileExt(fn) = '') then begin
 case OpenDialog1.FilterIndex of
 1: fn := fn + '.txt';
 2: fn := fn + '.csv';
 3: fn := fn + '.dat';
 ・・・
のようにします。
 
 
ファイル選択時、ファイル名の入力欄でテキトウな入力をしたり、存在しないファイル名を入力すると、下記のような例外が発生します。



例外処理を行うようにするのも可能ですが、存在しないフォルダやファイル名を入力出来ないようにする事も出来ます。<オブジェクトインスペクタ>にて、Optionsプロパティ内のofPathMustExist 及び ofFileMustExist を「True」にします。

保存・コンパイル(再構築)・実行をして・・・



というようにメッセージは出ますが、「開く」画面に戻って、例外は発生しません。つまりそこでプログラム停止されません。
 
そのほか、Optionsプロパティには様々な設定があります。
 
例えば、ファイルを複数選択したい場合は、ofAllowMultiSelect を「True」にします。

すると、ファイル選択時、マウスドラッグによる範囲指定や[Shift]キー・[Ctrl]キーを押しながらクリック指定での複数ファイル選択が出来るようになります。

この場合、FileNameプロパティでは1つのファイル名しか取得できませんのでこの場合には、Filesプロパティを参照するようにします。各ファイル名はフルパスファイル名として取得できます。
procedure TForm1.Button1Click(Sender: TObject);
var
 fn : string ;
 i : integer ;
begin
 fn := Label1.Caption ;
 OpenDialog1.InitialDir := ExtractFilePath(fn);
 OpenDialog1.FileName := ExtractFileName(fn);
 if (OpenDialog1.Execute) then begin
  fn := OpenDialog1.FileName ;
  Label1.Caption := fn ;
  
  Memo1.Lines.Clear;
  for i:=0 to OpenDialog1.Files.Count-1 do
   Memo1.Lines.Add(OpenDialog1.Files[i]);
 end;
end;
 
 
Optionsプロパティで指定出来る値については下記(ヘルプより)。
ofReadOnlyダイアログボックスが開いたときにデフォルトで[読み出し専用ファイルとして開く]チェックボックスを選択する
ofOverwritePromptすでに使用されているファイル名をユーザーが選択しようとしたときにエラーメッセージを生成し,既存のファイルを上書きするかどうかを尋ねる(保存ダイアログボックスで使用する)
ofHideReadOnlyダイアログボックスから[読み出し専用ファイルとして開く]チェックボックスを削除する
ofNoChangeDirユーザーが[OK]をクリックした後,カレントディレクトリを,ファイル選択用のダイアログボックスが開かれる前のディレクトリに再設定する
ofShowHelp[ヘルプ]ボタンがダイアログボックスに表示される
ofNoValidateファイル名の無効な文字の検査をしない。無効な文字のあるファイル名の選択を許可する
ofAllowMultiSelectユーザーがダイアログボックスで複数のファイルを選択できる
ofExtensionDifferentこのフラグは,実行時に DefaultExt と異なる拡張子を持つファイル名が選択された場合に設定される。アプリケーションでこのフラグを使用する場合には必ず再設定を行う
ofPathMustExist存在しないディレクトリパスのファイル名をユーザーが選択しようとしたときにエラーメッセージを生成する
ofFileMustExist存在しないファイルをユーザーが選択しようとしたときにエラーメッセージを生成する([ファイルを開く]ダイアログボックスにのみ適用)
ofCreatePrompt存在しないファイルをユーザーが作成しようとしたときに警告メッセージを生成し,指定の名前で新しいファイルを作成するかどうか尋ねる
ofShareAware共有エラーを無視し,共有違反が発生した場合にもファイルの選択を許可する
ofNoReadOnlyReturnユーザーが読み出し専用のファイルを選択しようとしたときにエラーメッセージを生成する
ofNoTestFileCreateネットワークファイルが保護されているか,またはディスクドライブにアクセスできるかの検査を無効にする。作成は可能だが,変更はできない共有ネットワークディレクトリにユーザーがファイルを保存しようとしたときだけ有効
ofNoNetworkButtonファイル選択用のダイアログボックスから[ネットワーク]ボタン([ネットワークドライブの割り当て]ダイアログボックスを開く)を削除する。
ofOldStyleDialogフラグが設定されている場合にのみ有効
ofNoLongNames8.3 文字のファイル名だけを表示する。このオプションは Options プロパティに ofOldStyleDialog が含まれている場合にのみ有効
ofOldStyleDialog古いスタイルの選択用ダイアログボックスを作成する
ofNoDereferenceLinksWindows ショートカットの逆参照を無効にする。ユーザーがショートカットを選択した場合に,[ファイル名]にはそのショートカットとリンクしているファイルではなく,ショートカット自体(.LNK ファイル)のパスとファイル名を代入する
ofEnableIncludeNotify(Windows 2000 またはそれ以降のバージョン) ユーザーがフォルダを開いたときにダイアログボックスに CDN_INCLUDEITEM 通知メッセージを送信する。新たに開かれたフォルダの項目ごとに通知が送信される。これらのメッセージを使用すると,フォルダの項目リストに表示される項目を制御できる
ofEnableSizing(Windows 98 またはそれ以降のバージョン)マウスまたはキーボードを使ってエクスプローラスタイルのダイアログボックスをサイズ変更できるようにする。デフォルトでは,このオプションの値にかかわりなく,ダイアログボックスのサイズを変更できる。フック手続きまたはカスタムテンプレートを提供する場合にのみ設定する必要がある(古いスタイルのダイアログボックスではサイズ変更は許可されない)
ofDontAddToRecent最近使ったファイルのリストにファイルが追加されないようにする
ofForceShowHidden非表示ファイルがダイアログボックスで表示されることを保証する
 
また、拡張オプションの OptionsExプロパティについては下記(ヘルプより)。
ofExNoPlacesBarファイル選択ダイアログの左のサイドバーが無効になり、ダイアログの外観が Windows 2000 スタイルに固有のものとなります。
 
 
<オブジェクトインスペクタ>を見ると以下のようになっています。


 

 
 
というわけで、「開く」画面の外観は、Windows7(Aero)の場合、Windows2000と比較すると少し変わっているのは分かりますが、プロパティや動き等は変わらないようなので、そのまま使えるかなという感じです。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
▲2010/10/29
 2010/10/30
▼2010/10/31
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.