


 
 
 
 
 
 
 |
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
データベース
|