|  
  
  
   
   
   
   
   
   
  | 
| 
| Delphi2010 テキストファイルを開く/保存の画面 2010/11/02 |  前回は[Dialogs]内の「OpenPictureDialog」(「画像を開く」画面)および「SavePictureDialog」(「画像を保存」画面)について見ましたので今回も同じく[Dialogs]内の「OpenTextFileDialog」(「テキストファイルを開く」画面)および「SaveTextFileDialog」(「テキストファイルを保存」画面)をみてみます。これら画面は Delphi6 にはありません。
 
 1つ戻って「テスト21」を開いてそこに配置してみます。1つ目ですので Nameプロパティはそれぞれ「OpenTextFileDialog1」「SaveTextFileDialog1」となります。アイコン絵となりますが実行時には「開く」「保存」画面が表示されます。
 
 この2つのコンポーネントは、テキストファイルを扱う場合のために特化したもののようです。<オブジェクトインスペクタ>を見て比較すると、画像の場合のようにFilterプロパティが初期状態で既にセットされている、という事はありませんが、EncodingIndexプロパティ、及び、Encodingsプロパティが追加されている様子です。プログラムコードを少し書き直して表示される画面を確認してみます。
 
 
保存・コンパイル(再構築)・実行を行います。
| procedure TForm1.Button1Click(Sender: TObject); var
 fn : string ;
 begin
 fn := Label1.Caption ;
 with OpenTextFileDialog1 do begin
 InitialDir := ExtractFilePath(fn);
 FileName := ExtractFileName(fn);
 if (Execute) then begin
 fn := FileName ;
 try
 Memo1.Lines.LoadFromFile(fn);
 Label1.Caption := fn ;
 except
 ;
 end;
 end;
 end;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
 fn : string ;
 begin
 fn := Label1.Caption ;
 with SaveTextFileDialog1 do begin
 InitialDir := ExtractFilePath(fn);
 FileName := ExtractFileName(fn);
 if (Execute) then begin
 fn := FileName ;
 try
 Memo1.Lines.SaveToFile(fn);
 Label1.Caption := fn ;
 except
 if (FileExists(fn)) then
 DeleteFile(fn);
 end;
 end;
 end;
 end;
 |  
  
[開く]ボタンをクリック 
↓
  
画面下部に「エンコーディング」が追加されています 
↓
  
右端の▼マークをクリックすると・・・
 
  
保存の方も同じく「エンコーディング」が追加されています<オブジェクトプロパティ>にて、Encodingsプロパティの入力欄の右端[…]をクリックすると・・・
 
 となっているようです。 
↓
 この「エンコーディング」を利用する場合には、それに適するコーディングを行う必要があるでしょう。以下は一例です。上記の内容を変更しないものとしています。
 
 
| procedure TForm1.Button1Click(Sender: TObject); var
 fn : string ;
 Encoding : TEncoding;
 begin
 fn := Label1.Caption ;
 with OpenTextFileDialog1 do begin
 InitialDir := ExtractFilePath(fn);
 FileName := ExtractFileName(fn);
 if (Execute) then begin
 fn := FileName ;
 Encoding := TEncoding.Default ;
 Case(EncodingIndex)of
 1: Encoding := TEncoding.ASCII ;
 2: Encoding := TEncoding.Unicode ;
 3: Encoding := TEncoding.BigEndianUnicode ;
 4: Encoding := TEncoding.UTF8 ;
 5: Encoding := TEncoding.UTF7 ;
 End;
 try
 Memo1.Lines.LoadFromFile(fn,Encoding);
 Label1.Caption := fn ;
 except
 ;
 end;
 end;
 end;
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 var
 fn : string ;
 Encoding : TEncoding;
 begin
 fn := Label1.Caption ;
 with SaveTextFileDialog1 do begin
 InitialDir := ExtractFilePath(fn);
 FileName := ExtractFileName(fn);
 if (Execute) then begin
 fn := FileName ;
 Encoding := TEncoding.Default ;
 Case(EncodingIndex)of
 1: Encoding := TEncoding.ASCII ;
 2: Encoding := TEncoding.Unicode ;
 3: Encoding := TEncoding.BigEndianUnicode ;
 4: Encoding := TEncoding.UTF8 ;
 5: Encoding := TEncoding.UTF7 ;
 End;
 try
 Memo1.Lines.SaveToFile(fn,Encoding);
 Label1.Caption := fn ;
 except
 if (FileExists(fn)) then
 DeleteFile(fn);
 end;
 end;
 end;
 end;
 |  実行すれば分かりますが、同じテキスト文書であっても、保存を行う際にエンコーディングの指定によってその文字コード状態で保存されますので、それを開く際、同じエンコーディングを指定しないと正常に読み込むことが出来ません。文字化けします。この辺りを注意しないといけないと思われますが、基本的に、この
 「OpenTextFileDialog」(「テキストファイルを開く」画面)
 「SaveTextFileDialog」(「テキストファイルを保存」画面)
 は「エンコーディング」欄の指定が追加されているだけで、別段、何かをしてくれる訳ではありませんので、利用者にとって煩雑であると思われてしまうようなケースでは逆に使用しないほうが無難かもしれません。
 
 |  | バッチファイル BASIC
 C言語のお勉強
 拡張子な話
 DOSプログラム
 Delphi
 >Delphi入門編
 >Delphi2010
 ▲2010/11/01
 2010/11/02
 ▼2010/11/03
 
 シェアウェア
 Script!World
 データベース
 
 |