|  
  
  
   
   
   
   
   
   
  | 
| さて、作成したデータは、やはり保存しておきたいですし、保存したデータは開いて編集をしたくなります。 お絵描きプログラムの場合、開いたり保存したりするデータ形式は、Windows標準の「Bitmapファイル」を扱えるようになっています。(その他の、GIFやTIFFやPNG等は標準で保存出来ませんが、保存出来るようにするツールはオンラインウェアや市販ソフトとして出回っているかと思われます)
 
 Imageコンポーネントに画像を読み込ませるには、
 
 
のように行います。(FName:String; // ファイル名)指定したファイルが存在しない場合には例外(エラー)が発生してしまいますので、ファイルがあるかどうか不明な状況の場合には、
| Image1.Picture.LoadFromFile(FName); |  
 
のようにして下さい。関数 FileExistsは、ファイルが存在する場合には True を返し、ファイルが存在しない場合には False を返します。
| if FileExists(FName) then Image1.Picture.LoadFromFile(FName);
 |  
 Imageコンポートで操作した画像を保存したい場合には、
 
 
のように行います。
| Image1.Picture.SaveToFile(FName); |  
 メニューで「開く」や「保存」を選んだら、いきなりファイル読み書きを行うのではなく、『「開く」画面』や『「保存」画面』を表示させ、既存のファイルを指定させたり、ファイル名の入力を行ったり、したい場合には、標準の機能として、「Dialogs」内の「OpenDialog」(特に、BMPファイルを扱う場合には「OpenPictureDialog」を利用すると右側にプレビュー画面が表示されます)、「SaveDialog」(同様に、BMPファイルを扱う場合には「SavePictureDialog」を利用すると右側にプレビュー画面が表示されます)が用意されていますので、これを利用します。
 
 これらの主なプロパティは、以下のようになっています。
 
 
ファイルの種類が複数ある場合には、DefaultExtは使いにくいので、自分で判定させて拡張子を付加させるプログラムにします。
| DefaultExt | in | 拡張子を入力しなかった場合に、自動的に付加される拡張子を指定する。例:「.BMP」 |  
| FileName | in/ out
 | 指定する前のファイル名の初期値、 [OK]したら返されるフルパス・ファイル名
 |  
| Filter | in | 「ファイルの種類」に入れておくリスト |  
| FilterIndex | in/ out
 | 「ファイルの種類」の初期値(1〜) 選択した「ファイルの種類」が返される
 |  
| InitialDir | in | 表示されるファイルの初期フォルダ |  
| Options | in | 画面の状態や操作形態等を指定しておく |  
| Title | in | 画面の任意のタイトルを指定する 何も入れていないと「ファイルを開く」「保存」
 |  例:
 
 
また、「開く」画面の初期値として、既存のフルパス・ファイル名を利用したい場合には、
| ext := ExtractFileExt(FName); if (ext = '') then begin
 Case (OpenDialog1.Filter) of
 1: FName := FName + '.TXT' ;
 2: FName := FName + '.CSV' ;
 3: FName := FName + '.HTM' ;
 end;
 |  
 
のようにして、フォルダとファイル名を切り出して値を与える必要があります。
| OpenDialog1.InitialDir := ExtractFilePath(FName); OpenDialog1.FileName := ExtractFileName(FName);
 OpenDialog1.Execute;
 |  
 
 以上は、画像データの場合ですが、文字データの場合も同様に、「Standard」内の Memo コンポーネントや、「Win32」内の RichEdit コンポーネントを利用すると簡単にテキストデータファイルを作る事が出来ます。
 テキストデータファイルを開く場合
 
 
又は
| Memo1.Lines.LoadFromFile(FName); |  
 
のように行います。
| RichEdit1.Lines.LoadFromFile(FName); |  Memoコンポーネントは、Windows9xで64KBまでという制限がありますが、テキストファイルを簡単に扱えます。
 RichEditコンポーネントは、リッチテキストファイルも扱う事が出来る多機能コンポーネントです。64KBの壁はありません。
 便宜に応じて使い分けて下さい。
 テキストデータを保存する場合には、同様に、
 
 
又は
| Memo1.Lines.SaveToFile(FName); |  
 
のように行います。
| RichEdit1.Lines.SaveToFile(FName); |  
 
 次に、コンポーネントを利用せずにテキストファイルの読み書きをしたい場合には、ファイルのオープン・読み書き作業・ファイルのクローズ、という手順を使って行います。
 テキストデータファイルを開く場合
 
 
| var F : TextFile ; // ファイル変数
 s : String ;
 begin
 〜
 try
 AssignFile(F,FName); // ファイル変数にファイルを割り当てる
 FileMode := 0 ; // 読み取り専用属性が付いていても読めるように
 Reset(F); // ファイルを読み取りモードで開ける
 〜
 ReadLn(F, s); // ファイルから1行分読み込み、変数sに入れる
 〜
 CloseFile(F); // ファイルを閉じる
 except
 (例外処理);
 end;
 〜
 end;
 |  テキストデータファイルを保存する場合
 
 
| var F : TextFile ; // ファイル変数
 s : String ;
 begin
 〜
 try
 AssignFile(F,FName); // ファイル変数にファイルを割り当てる
 Rewrite(F); // ファイルを書込みモードで開ける
 〜
 WriteLn(F, s); // 変数sの内容をファイルへ書き込む(改行コード有)
 〜
 CloseFile(F); // ファイルを閉じる
 except
 (例外処理);
 end;
 〜
 end;
 |  のようになります。
 
 なお、バイナリデータの場合には、上記を「TextFile」の代わりに「File」を使い、「Read」「ReadLn」の代わりに「BlockRead」を、「Write」「WriteLn」の代わりに「BlockWrite」を、利用します。バイト数単位でデータのやり取りを行います。多少難しくなりますし、もしデータが壊れた場合、データを復元するのが困難になってきますので、なるべく、テキストファイルでファイルの読み書きを行うのが無難だと思われます。
 
 例外処理は、ファイルの読み書きに失敗した場合のプログラムを書きます。ファイルを閉じた後、例えば、エラーメッセージを表示したり、書き込み途中のおかしな残骸ファイルがあれば削除したり、します。
 try〜except〜endで例外処理を組んでおかないと、ファイルの読み書きに失敗した場合、標準のエラーメッセージが表示されて、プログラムが終了してしまいます。
 
 
 
 |  | CAD装置(1) CAD装置(2)
 メディア
 AutoCADの
 DIESELマクロ
 CSV
 DXF
 PCES
 IGES
 STEP
 数学とCAD
 CAD作ろ!
 ▲PREV
 ▼NEXT
 
 |