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

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

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
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
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.