■フォームの管理

通常、テスト的なプログラムでは1つのフォームしか使わない。しかし、アプリケーションにせよゲームにせよ本格的にプログラムを組み始めると、必然的に複数のフォームを扱わざるを得ない。また、そうしたフォームの多重表示こそが、いかにもウィンドウズというネーミングにふさわしい画面構成といえる。

しかし、やみくもにフォームを作ってしまうと、当然のことながら画面に収まりきれなくなる。また、他のアプリケーションが開かれている場合には、どれが必要なフォームなのか瞬間的にわからなくなってしまうこともある。このようなことを避けるため、まずはフォームのコンテナであるMDI (Multiple-Document Interface) フォームを作成し、すべてのフォームをこの子フォーム(MDIChild=True)としておくといい。

これは、[プロジェクト] メニューから[MDIフォーム モジュールの追加]コマンド を選択して作成するが、いうまでもなく1つのプロジェクトは1つのMDIフォームしか持つことができない。つまり、MDIフォームがアプリケーション全体を示す親フォームとなるのだ。親フォームは、常に子フォームの背景となってくれるだけでなく、他のアプリケーションフォームを排除してくれる。すなわち、MDIフォームがアクティブである限り、その上部には子フォームしか存在しないということだ。当然、MDIフォームを全画面表示にすれば、すべての画面を1つのアプリケーションが独占することになる。

すでに『おたすけ忍風伝』をプレイした方は気づいたかもしれないが、画面には4つの主要フォーム(メイン部、地形図、強さの詳細、ふところ)がある。もちろん、その背景には親としてMDIフォームが構えている。しかし、解像度が800×600ドット以下だと、メイン部に他のフォームが重なってしまい、そのままではゲームをプレイしにくい。特に、地形図は必要不可欠なフォームであり、メイン部同様に参照する機会が多い。

そこで、各フォームがメイン部と重なって配置されている場合には、マウスカーソルの位置により優先順位が巧妙に切り替わるようになっている。プログラム的には、希望するフォームにフォーカスを当てるだけなので簡単だ。


オブジェクト名.SetFocus
このゲームでは、複数のフォームがメイン部と重なった場合に、その中でさらに優先順位を考慮してフォーカスを当てるなど、簡単な中にもそれなりのロジックはある。しかし、こうして手軽にフォーカスを変更できるのも、MDIフォームの庇護のお陰なのだ。もしも、それぞれが単なる独立フォームだったら、フォーカスを変更したとたんに、他のアプリケーションの下位に回されてしまうなど、思うようにフォームが並んでくれない。結果的には何でもないことのように見えても、裏に回れば結構悩まされているのである。