========================================================================== パラメータ保存用コンポーネント TParameter Parameter Store Component Version 0.1 Copyright(C) 2008 seizo ========================================================================== 【 概要 】 アプリケーション作成の過程で、必らずと言っていいほど登場するのが アプリケーション終了時の状態を保存して、次回の起動時に同じ状態 で起動する事が出来る様にするという工程です。 TParameter は、この工程を簡素化する為に作成したコンポーネントで、 ディフォルトでは、アプリケーションと同じフォルダにパラメータ保存用 ファイルを作成し、そこに各パラメータを保存するという仕様になって います。各パラメータは、「名前 = 値」という形式の文字列です。 例えば、実行ファイル名が、C:\Program Files\Sample\Sample.exe なら C:\Program Files\Sample\Sample.ini に保存する様になりますが、これ とは別のフォルダに別のファィル名で保存する事も可能です。 レジストリにアプリケーションの情報を保存しませんので、可搬性が 高くUSB メモリ等に入れて持ち運ぶ事の出来るアプリケーションの作成 に向いています。 具体的には、アプリケーションの OnShow で TParameter にファイルから 各パラメータをロードし、OnCloseQuery で各パラメータに値をストアして ファイルに保存して終了するというイメージです。 通常は、各パラメータ用に多くの変数を用意する等して、大変面倒な作業 を強いられるのですが、この様な変数を用意する必要もなくなり、ソース ファイルの中身が大変スッキリします。 【 プロパティ 】 このコンポーネント TParameter で追加されたプロパティは、以下の通りです。 property Dir: String; パラメータ保存ファイルを置くフォルダを指定します。 ディフォルトでは、実行ファイルと同じフォルダになります。 Init を呼ぶと Dir は、ディフォルト値に設定されますので 通常の使用では、この値を指定する必要はありません。 property FileName: String; パラメータ保存ファイル名を指定します。ファイル名のみを指定し フォルダ名を付けないで下さい。ディフォルトでは、実行ファイル名 の拡張子部分を .ini にしたものになります。 (例 : Sample.exe ===> Sample.ini の様な感じです。) Init を呼ぶと FileName は、ディフォルト値に設定されますので 通常の使用では、この値を指定する必要はありません。 property ExeName: String; アプリケーションの実行ファイル名を指定します。 Init を呼ぶと ExeName にアプリケーションの実行ファイル名が設定 されますので通常の使用では、この値を指定する必要はありません。 property Count: Integer; パラメータ格納領域の項目数を返すリードオンリィのプロパティです。 Init メソッドを呼び出した後で Count が 0 であれば、パラメータ 保存ファイルをロード出来なかった事を示す目安になります。 (はじめてそのアプリケーションを起動したとき等です。) property Params[Index: Integer]: String; パラメータ格納領域に直接アクセスする為の配列プロパティです。 0 <= Index <= Count - 1 でなければなりません。 property SValues[const Name: String]: String; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 文字データを追加・変更する為の配列プロパティです。 property BValues[const Name: String]: Boolean; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 論理データを追加・変更する為の配列プロパティです。 property IValues[const Name: String]: Integer; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 数値データを追加・変更する為の配列プロパティです。 このプロパティは、TParameter のディフォルトプロパティです。 【 メソッド 】 このコンポーネント TParameter で追加されたメソッドは、以下の通りです。 function Add(const S: String): Integer; パラメータ格納領域の最後尾に文字列を追加する関数です。 戻り値は、文字列を追加した位置のインデックス番号です。 function IndexOfName(const Name: String): Integer; パラメータ格納領域の「名前 = 値」という形式の項目の中で、名前部分が Name と一致する項目のインデックス番号を返す関数です。見つからない ときは、-1 を返します。 procedure Init; TParameter を初期化して使用可能な状態にする手続きです。 ExeName, Dir, FileName に現在の値を設定し、各パラメータを パラメータ保存ファイルからロードします。この手続きは、 アプリケーションの OnShow 等で、最初に一度だけ呼んで下さい。 procedure Insert(Index: Integer; const S: String); パラメータ格納領域の Index 番目の位置に文字列を挿入する手続きです。 procedure Delete(Index: Integer); パラメータ格納領域の Index 番目の項目を削除する手続きです。 procedure LoadFromFile; 各パラメータをパラメータ保存ファイルからロードする手続きです。 ファイルが存在しない場合は、パラメータ格納領域内のデータは変更 されません。 procedure SaveToFile; 各パラメータをパラメータ保存ファイルに保存する手続きです。 ファイルが存在しない場合は、新しくファイルを作成します。 【 テクニカル情報 】 ◎Count = 0 の時、あるいは「名前 = 値」という形式で存在しない名前 を指定した時に、項目の値を読もうとするとエラーが発生します。 例1: Count = 0 の時に Width := Parameter1.IValues['Width']; の様にすると常にエラーになります。 例2: Count > 0 であっても、存在しない名前 'Waizu' を指定して Width := Parameter1.IValues['Waizu']; の様にするとエラーになります。 例3: Count = 0 の時に Parameter1.IValues['Width'] := Width; としてもエラーにはなりません。 新たに「Width=400」の様な項目が追加されます。 ◎現在、Integer, String, Boolean の3つのデータ型をサポートして いますが、これ以外のデータ型のパラメータを保存される場合は、 その型を String 型に変換される等して保存して下さい。 ◎「名前 = 値」という項目を削除する場合、例えば以下の様に i := Parameter1.IndexOfName('Width'); Parameter1.Delete(i); // 名前が 'Width' の項目を削除 の様にしても良いのですが、 Parameter1.SValues['Width'] := ''; // 名前が 'Width' の項目を削除 の様にすると簡単に削除出来ます。 【 収録ファイル 】 Param.pas - TParameter 本体のソースファイル Param.dcr - TParameter のアイコン用ファイル Readme.txt - このファイル Test.exe - TParameter を使用したサンプルアプリケーション Test.lzh - サンプルアプリケーションのソースファイル 【 TParameter のインストール方法 】 適当なフォルダを作成して、そのなかに Param.pas と Param.dcr を コピーしてからコンポーネントのインストールで、その Param.pas を 選択して下さい。 【 TParameter の使用方法 】 まず、作成するアプリケーションのフォームに TParameter を配置します。 このとき通常の使用でしたら TParameter の各プロパティ値は特に何も設定 する必要はありません。 次にアプリケーションの OnShow で TParameter にファイルから各パラメータ をロードするコードを記述します。具体的には、以下の様な感じです。 procedure TFrameForm.FormShow(Sender: TObject); begin Parameter1.Init; // Parameter1 を初期化してから各パラメータをファイルからロードする。 if Parameter1.Count > 0 then // パラメータのロードに成功した場合 begin Left := Parameter1['Left']; // Integer 型のデータを得る。 Top := Parameter1['Top']; Width := Parameter1['Width']; Height := Parameter1['Height']; if Parameter1.BValues['Maximized'] then // Boolean 型のデータを得る。 WindowState := wsMaximized else WindowState := wsNormal; Edit1.Text := Parameter1.SValues['適当な文字']; // String 型のデータを得る。 end; end; 最後にアプリケーションの OnCloseQuery で各パラメータに値をストアして ファイルに保存して終了するコードを記述します。具体的には、以下の様な 感じです。 procedure TFrameForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin Parameter1['Left'] := Left; // Integer 型のデータをストアする。 Parameter1['Top'] := Top; Parameter1['Width'] := Width; Parameter1['Height'] := Height; if WindowState <> wsMaximized then // Boolean 型のデータをストアする。 Parameter1.BValues['Maximized'] := True else Parameter1.BValues['Maximized'] := False; Parameter1.SValues['適当な文字'] := Edit1.Text; // String 型のデータをストアする。 Parameter1.SaveToFile; // パラメータ保存ファイルに保存する。 end; 【 著作権 】 このプログラムの著作権は、seizo が有します。 【 ソフトウェア種別 】 このプログラムはフリーソフトウェアです。以下の事項を御承諾頂ければ、 自由にコピー、使用、配布を行なって頂いて構いません。 ◎このプログラムを使用した上でのいかなる損害、損失にも当方は一切 責任を負いません。このプログラムの使用は、使用者の責任において 行なって下さい。 ◎このプログラムを配布される場合は、このドキュメントファイルも含め 全てのファイルをオリジナルの状態で配布して下さい。 【 その他 】 TParameter の感想やバグレポート等何でも構いませんのでお寄せ下さい。 可能な限り御返事致します。 ◎seizoの連絡先 e-mail : seizo@mars.dti.ne.jp 他のコンポーネントやアプリ等をここで紹介しています。 http://www.vector.co.jp/vpack/browse/person/an003597.html