掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
OnMouseMoveから出たときの処理は? (ID:6326)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Halbowさんのコードは、Panel1をサブクラス化して、 "CM_MOUSEENTER”メッセージ(マウスが入ってきたときのメッセージ)をキャッチして、色変更 "CM_MOUSELEAVE”メッセージ(マウスが出て行ったときのメッセージ)をキャッチして、同じように色変更 というような処理をしているわけです。 Panel1.WindowProcは、Panel1のウィンドウプロシージャが入っていますから、それと自作プロシージャ(メッセージを処理している部分)を差し替えることで、サブクラス化を実現します。 ただし一つ注意として、サブクラス化したら、必ず差し替え前のウィンドウプロシージャに処理を渡してあげなくてはなりません(自作プロシージャはあくまで自分の必要なメッセージしか処理してませんから)。 それが、Halbowさんのコードでは > OriginalProc := Panel1.WindowProc; > Panel1.WindowProc := SubClassProc; このようなものであり(OriginalProcに、元々のプロシージャを格納、自作プロシージャをセット) > OriginalProc(Msg); このようにして、自作プロシージャの中で、元々のプロシージャを呼び出してあげる必要があるのです。 さて本題。 > Panel2とPanel3の色を同時に変えるには コンポーネント化することをおすすめします。 コンポーネント化しない場合、Panel1と2と3のプロシージャをリスト管理して、 何とかして振り分けて——というような、面倒なことをしないといけません。 CM_MOUSEENTER,LEAVEを受け取って色を変える機能をつけたコンポーネントを作ってそれを使えば、コンポーネントに色を変える機能があればそれをどうこうするだけですみますね。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.