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