Q21:GUI複合と通常の複合の使い分けのようなものはあるのでしょうか?
Q21-1:
「Q&A18」の関連ファイルに、ボタンを押すとフレームを閉じるというシンプルなプログラムがあったかと思いますが、この時、通常の複合コンポーネントとGUI複合の2つのサンプルを頂きました。
GUI複合の方は複合コンポーネント内部からボタンを押すというイベントを伝播しているだけだと思います。
そして、通常の複合コンポーネントの方はボタンを押した後のフレームを閉じるというイベントを複合コンポーネント内部から伝播させています。
GUI複合と通常の複合の使い分けのようなものはあるのでしょうか?
何となく名前からGUI複合では内部にGUI系のコンポーネントを入れるのかな、とか考えていましたが違うような気もしますし。
A21-1:
GUI複合コンポーネントと複合コンポーネントの違いは、それ自身をGUI部品として画面上に配置できるかどうかということです。いわば、GUI複合コンポーネントは、複合コンポーネントを画面にも配置できるように機能拡張したものとご理解いただいて差し支えございません。
この違いは、ビルダーの画面編集画面で確認するのが分かりやすいかと存じます。関連ファイルの"複合1.mzax"をビルダーでロードしてみてください。
"複合1.mzax"には、GUI複合コンポーネントと複合コンポーネントが含まれています。[画面編集]ボタンをクリックして画面編集画面を表示させ、画面右側の黄色い部分で右クリック>コンポーネント追加を選んだとき、GUI複合コンポーネントはメニューから選択できますが、複合コンポーネントはメニューに表示されません。
ここでGUI複合コンポーネントを選択すると、小さな四角が画面に配置されます。これはパネルになっており、GUI複合コンポーネントの中にあるボタンやテーブルなどを、このパネルに配置することができます。
関連ファイルの"複合2.mzax"は、実際にボタンをGUI複合コンポーネントに配置した例です。"複合2.mzax"をビルダーでロードし、GUI複合コンポーネントの中に移動してみてください。
この中にはボタンとメッセージダイアログが含まれています。ここで[画面編集]ボタンをクリックして画面編集画面を見てみると、画面にボタンが配置されていることが分かります。
トップ階層へ戻り、そこで画面編集画面を見てみると、ここには[トップ階層のボタン]ボタンとGUI複合コンポーネント([GUI複合コンポーネントのボタン]ボタンを含む)が配置されていることが分かります。[GUI複合コンポーネントのボタン]ボタンは、GUI複合コンポーネント内部のコンポーネントなので、左側のツリーには表示されません。
では、"複合2.mzax"を実行してみることにします。[トップ階層のボタン]と[GUI複合コンポーネントのボタン]のいずれも、クリックするとメッセージダイアログが表示されます。しかしながら、ビルダー画面からもご確認いただけますように、複合コンポーネントの方はトップ階層に配置したボタンが発生するアクションイベントから「メッセージダイアログを表示する(Component)」メソッドを起動しているのに対して、GUI複合コンポーネントの方はボタンがその内部に含まれているために、トップ階層からは処理が見えません。言い換えると、ボタン操作からメッセージダイアログ表示に至るまでの処理が、GUI複合コンポーネントの中で完結しているということです。
GUI複合コンポーネントと複合コンポーネントの使い分けですが、ボタン操作等の画面操作や画面表示とそれに関わる処理を内部で完結させたい場合にはGUI複合コンポーネントを用い、そうでない場合には複合コンポーネントを用いるというのが1つの目安になるかと存じます。
蛇足ですが、GUI複合コンポーネントは画面に配置しなければならないということはなく、未配置のままでもエラーなどは発生しません。また、GUI複合コンポーネントの中でフレームやダイアログを使い、これらを表示させることも問題ありません。
関連ファイル:複合1.mzax、複合2.mzax