掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のペインからなるプログラムで、フォーカスの有無により各ペインのタイトル部の色を変えるには (ID:47519)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
省電力さんより地球に優しいコード例が示されましたが、OnIdleの濫用によるムダな処理に ついては私もかなり気にしております。(電力消費量というより主に精神衛生上ですが。) なので、もう一つ別の観点の話と、ムダな処理をなるべく抑制したコード例、合わせて二つを 追加で投稿しようとしておりました。 ですが、OnIdleの暗部が発覚したり、Screen.OnActiveControlChangeも試されて良好となると、 差し当たっては不要なようなので控えておきます。 省電力さん 今後はOnIdleの使用を封印する勢いで臨んでみたいと思います。 で、ちょっと気になったことが。 >Result := inherited; // ←必須です ここは Result := inherited SetFocusedControl(Control); のようにしないと、「E2008 互換性の無い型です」が出て、コンパイル不能でした。 (Turbo Delphi Explorer) risaさん 別の観点の話ですが、かいつまんで。 >エラーダイアログ等が出て、フォーム自体がフォーカスを失ったりしたときに、色が変わらない場合などがあります ↑これは「正常に動かないことがある」と判断したのですが、続く文と合わせて考えると、 >各コンポーネントがフォーカスを得たとき、失ったときは、きっちりと色を変えたいです。 ↑この動作を絶対忠実に実現することに尽きる、ということだったのか?と気になりました。 だとすると、アプリケーションが非アクティブになった時は各コントロールもフォーカスを 喪失するので、すべてのパネルの色を clInactiveCaption にするのかな、と思いました。 もしそうなら、Application.OnActivate と OnDeactivate も Screen.OnActiveControlChange と 同じイベントハンドラに突っ込んでやれば良いと思います。 (ただし、ActiveControl が Focused かチェックするコードになってれば、ですが。) 現状の動作に満足されているなら、的外れなおせっかいでした、失礼。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.