========================================================================== パラメータ保存用コンポーネント TParameter Parameter Store Component Version 0.4 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 VStrings[const Name: String]: String; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 文字データを追加・変更する為の配列プロパティです。 property VBools[const Name: String]: Boolean; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 論理データを追加・変更する為の配列プロパティです。 property VIntegers[const Name: String]: Integer; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 数値データを追加・変更する為の配列プロパティです。 このプロパティは、TParameter のディフォルトプロパティです。 property VFontStyles[const Name: String]: TFontStyles; パラメータ格納領域に「名前 = 値」という形式で、名前部分を Name にして、 TFontStyles 型データを追加・変更する為の配列プロパティです。 多少変則的ですが、通常のアプリケーションでは、フォントに関するデータを 保存する局面も多いのではないかと思い、このプロパティを設けました。 property VExtends[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; 各パラメータをパラメータ保存ファイルに保存する手続きです。 ファイルが存在しない場合は、新しくファイルを作成します。 【 テクニカル情報 】 ◎TParameter を使用する場合は、最初にアプリケーションの OnShow 等で、 一度だけ Init を実行して下さい。Init 呼出し後にはじめて TParameter が使用可能な状態となります。 ◎Count = 0 の時、あるいは「名前 = 値」という形式で存在しない名前 を指定した時に、項目の値を読もうとするとエラーが発生します。 例1: Count = 0 の時に Width := Parameter1.VIntegers['Width']; の様にすると常にエラーになります。 例2: Count > 0 であっても、存在しない名前 'Waizu' を指定して Width := Parameter1.VIntegers['Waizu']; の様にするとエラーになります。 例3: Count = 0 の時に Parameter1.VIntegers['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[] に空文字 '' 代入するとその名前 の項目を削除するという仕様になっていました。) // Version 0.4 // ・各配列プロパティの名前を以下の様に変更しました。 SValues[] ===> VStrings[] // 文字列型 BValues[] ===> VBools[] // 論理型 IValues[] ===> VIntegers[] // 整数型 YValues[] ===> VFontStyles[] // フォントスタイル型 FValues[] ===> VExtends[] // 浮動小数点型 これは、C++Builder 環境では、名前の衝突が起こって使用できない状態 にあったために取った措置です。 【 収録ファイル 】 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 型のデータを得る。 WindowState := TWindowState(Parameter1['WindowState']); // Integer 型のデータを得る。 Edit1.Text := Parameter1.VStrings['適当な文字']; // String 型のデータを得る。 Edit1.Font.Name := Parameter1.VStrings['FontName']; // String 型のデータを得る。 Edit1.Font.Size := Parameter1['FontSize']; // Integer 型のデータを得る。 Edit1.Font.Style := Parameter1.VFontStyles['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 型のデータをストアする。 Parameter1['WindowState'] := Integer(WindowState); // Integer 型のデータをストアする。 Parameter1.VStrings['適当な文字'] := Edit1.Text; // String 型のデータをストアする。 Parameter1.VStrings['FontName'] := Edit1.Font.Name; // String 型のデータをストアする。 Parameter1['FontSize'] := Edit1.Font.Size; // Integer 型のデータをストアする。 Parameter1.VFontStyles['FontStyle'] := Edit1.Font.Style; // TFontStyles 型のデータをストアする。 Parameter1['FontColor'] := Edit1.Font.Color; // Integer 型のデータをストアする。 Parameter1.SaveToFile; // パラメータ保存ファイルに保存する。 end; 【 C++Builder 環境で使用される場合 】 C++Builder 環境で使用される場合は、以下の点に御注意下さい。 ◎C++Builder 環境では、整数型の VIntegers[] プロパティは、ディフォルト プロパティとなりませんので御注意下さい。すなわち Delphi 環境では、 Parameter1['Width'] := Width; と Parameter1.VIntegers['Width'] := Width; は同じですが、 C++Builder 環境では、常に Parameter1->VIntegers['Width'] = Width; の様に記述する必要があります。 ◎C++Builder 環境では、フォントスタイル型の VFontStyles[] プロパティ を使用する場合は、 TFontStyles fs; fs = Parameter1->VFontStyles["FontStyle"]; Edit1->Font->Style = fs; の様に TFontStyles 型の変数 fs 等を用意して、間接的に VFontStyles[] プロパティにアクセスして下さい。ダイレクトに Edit1->Font->Style = Parameter1->VFontStyles["FontStyle"]; // エラー の様にするとデータの読み込みエラーが発生します。 同様に VFontStyles[] プロパティに値をセットする場合も TFontStyles fs; fs = Edit1->Font->Style; Parameter1->VFontStyles["FontStyle"] = fs; の様に間接的に行なって下さい。 【 著作権 】 このプログラムの著作権は、seizo が有します。 【 ソフトウェア種別 】 このプログラムはフリーソフトウェアです。以下の事項を御承諾頂ければ、 自由にコピー、使用、配布を行なって頂いて構いません。 ◎このプログラムを使用した上でのいかなる損害、損失にも当方は一切 責任を負いません。このプログラムの使用は、使用者の責任において 行なって下さい。 ◎このプログラムを配布される場合は、このドキュメントファイルも含め 全てのファイルをオリジナルの状態で配布して下さい。 【 その他 】 TParameter の感想やバグレポート等何でも構いませんのでお寄せ下さい。 可能な限り御返事致します。 ◎seizoの連絡先 e-mail : seizo@mars.dti.ne.jp 他のコンポーネントやアプリ等をここで紹介しています。 http://www.vector.co.jp/vpack/browse/person/an003597.html