FormPositionをいじってみる

ども、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でした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする