ども、Norimakiです。
FormPositionというコンポーネントがありまして、
とても重宝させていただいているんですが、
ちょいと厄介なことがありまして、
少し手を加えて使わせていただいています。
(参考)
Formの位置・サイズを保存する 【FormPosition】
複数のフォームでFormPositionを使用する
その厄介なことというのは、
フォーム位置の保存先がiniファイルあるいはレジストリだということ。
これは結構厄介です。
パソコン環境に余計なゴミを残したくないので、
僕個人としては、できるだけレジストリはいじりたくない。
かといって、僕はiniファイルは使っていない。
(一般的なini形式の設定ファイルという意味で)
ということで、どうしたものか?
ということが問題になります。
結局のところ、データの読み書きのところをいじって、
文字列型でデータのやり取りを行うという方法に落ち着きました。
function TFormPosition.SaveWindowState:string;
procedure TFormPosition.LoadWindowState(FormPos:string);
こんな感じで。
アプリケーション開始時にフォーム位置を設定する場合、
オリジナルであれば、iniファイルなどから直接データを
読み取りフォーム位置を設定しています。
アプリケーション終了時にフォーム位置を保存する場合は、
オリジナルはファイル等に直接データを書き込んでいます。
それらを、一旦、変数を噛ませることで、
そのデータを使って別のファイルに保存します。
僕の場合は設定ファイルはあるものの、
ini形式ではないので、こんな方法をとらざるを得ませんでした。
具体的には、TSTringListを各FormPositionコンポーネントに持たせて
フォーム位置サイズ保存・復帰の際には、一旦そのTStringListを経由します。
保存形式は、Name=Value形式で、
セクション名+Name値 = Value
という感じ。
フォーム位置保存の場合、SaveWindowStateを呼ぶんですが、
その戻り値が、先ほどのTStringList.Textになります。
で、アプリケーション終了時には各フォームの
FormPosition.SaveWindowStateを順番に読んで
戻り値を全部くっつけて保存すると。
アプリケーション開始時は、今保存したデータを引数に与えて
LoadWindowStateを呼び出します。
そんな感じでフォーム位置の保存・読み出しを行います。
最初に挙げた参考リンクとともに使うことで、
コンポーネントをインストールしなくても動的に生成することで
全フォームの位置・サイズを保存・復帰できるようになりました。
という感じです。
ではでは。
Norimakiでした。