« 分類した後また悩む | メイン | クイックスタイプのゲームで遊びたい »

November 25, 2004

C++ Builderでメニューハンドラを共通化

メニューがクリックされた時のイベントハンドラは共通にしたい。
しかし、前回はどのメニューが押されたのか判別する手段がわからずに、似たようなメソッドを大量に作ってしまっていた。
メソッドの中身は、
SetActiveTag(TAGTYPE_cancelautomode);
をコールするのみで、引数の定数値が違うだけだった。
面倒だから置換でコードを生成するというアホさだった。明らかにメンテナンス性が悪い。
で、今回は注意深くヘルプを読んだ。
するとint Tagプロパティがあった。
ヘルプには"Tag は,あらかじめ定義された意味のあるプロパティではありません。Tag プロパティは,開発時の利便性のために提供されます。追加の整数値を格納したり,コンポーネント参照またはポインタなどの 32 ビット値に型キャストできます。"と書かれている。
たぶん、今回のような用途に使うんだろう。
これを使えばすべてのメソッドを共通に出来、中身は、
SetActiveTag(reinterpret_cast(Sender)->Tag);
とすればいいはずだ。
タグのグループ分けはマスクにして、配列を作り、その配列の全要素とorをとって真となった要素をメニューに追加。
同時に、メニュー文字列も配列にしておけばいい。
って言うか、そう言う作り方が当たり前だろう。
前のはどう考えてもアホだった。まあ、この文章の方法のようにしたいと思っていたが出来なかったので、苦渋の選択をしたのだが。
ま、なんにせよ、これでメニューはさっくり出来る。

投稿者 Takenori : November 25, 2004 11:58 PM

Trackback Pings

このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/369

コメント

Total : Today : Yesterday :