複数のフォームでFormPositionを使用する

ども、Norimakiです。

この前、Formの位置・サイズを保存する 【FormPosition】で、
前回アプリケーションを終了した際のフォーム位置とサイズを
覚えておくことができるFormPositionをご紹介しました。

作者の方には感謝しきりです。

使用させていただいているんですが、
毎回コンポーネントをフォームに貼り付けるのは、
さすがに面倒くさい。

ということで、ちょっと手を加えてみました。

仕組みとしては、フォーム毎にFormPositionのインスタンスを作成し、
TObjectListでそれらを保持する。

というものです。
とりあえずソースはこちら。

前提としてアプリケーションの初期化部で

NV_FormPosList:=TObjectList.Create(True);

として、FormPositionを格納するリストFormPosListを作成しています。

ソース中に出てくる _FormPosIni は設定ファイルのファイル名です。
(xxxxx.iniみたいなやつです)

使用法はアプリケーション起動時ですべてのフォーム作成後に
NP_LoadFormsPosSizeを呼びます。

アプリケーション終了時にNP_SaveFormsPosSizeを呼びます。

これが基本です。

プロジェクトファイル以外のファイルはどうなってるの?
書いた構造でユニットを構成している場合は、

NP_BeforeRunningでNP_LoadFormsPosSizeを呼び、
NP_AfterRunningでNP_SaveFormsPosSizeを呼ぶ。

という形になります。

ちなみに、NV_FormPosListの作成はNP_ApplicationInitで行い、
NV_FormPosListの解放( FreeAndNil(NV_FormPosList) )は
NP_ApplicationFinで行います。

で、やってることは簡単で、フォーム位置サイズの読み込みは、
コンポーネントをループしてフォームを見つけたら、
FormPositionを作成してFormPosListに追加します。

作成したFormPosListについては保存対象のiniファイル名を設定します。
その後、LoadWindowStateメソッドでフォーム状態を復帰すると。

保存に関しては、FormPosListに追加してあるFormPositionの
SaveWindowStateを順番に呼び出しているだけです。

それと、シフトキー起動で復帰をスルーします。
フォームが迷子になった時に使用します。

ということで、これでフォーム作成毎に貼り付ける
必要がなくなります。あとは必要に応じて修正していきます。

とりあえずこんな感じで。

ではでは。
Norimakiでした。

シェアする

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

フォローする