アクティブが無くなっても最前面に表示するようなコードをどなたか知りませんか?
VisualBasicから1週間前に乗り換えたDelphi初心者です、Delphi7Personalを使っています。
前面にといっても、いくつかありますけど、どの前面表示でしょうか?
1.アプリケーションの中では最前面
2.全アプリケーションでの最前面
1は、CreateParamsをオーバーライドし、親フォームハンドルをTApplicationのものに変更すればいいです。
2は、うちで公開しているstdDialogsユニットのTopMost手続きを使うといいでしょう。
http://TakamiChie.tripod.co.jp/
標準関数でもできますが、それだとウィンドウがいったん破棄されてしまうため、
見栄えもよくないし、いくつかのAPIを使っている際には不具合が生じます。
たかみちえさん早速のご回答ありがとうございます。
たかみちえさんのホームページに行って標準の関数で常に全面表示ができることがわかりました、確かに再描写が行われるために見栄えが今ひとつですが、初心者の私には標準のもので十分です。
大変に参考になりました、ありがとうございました。
解決したようですけど、
普通、ウィンドウがいったん破棄されるということはない(すくなくとも、わたしの知ってる言語にはない)ので、
ウィンドウが破棄されると、そのウィンドウハンドルを使用しているAPIなどが不具合を起こしてしまいます。
(ShAppBarMessage、Shell_NotifyIconなど、それを使うコンポーネントも然り)
コールバックも、もちろんこなくなってしまい、Windows全体に影響が及ぶこともあります。
そういうときの原因究明が難しくなるため、
最初のうちから、なるべくウィンドウハンドルを作り直すような作業は避ける癖を付けておいたほうがいいと思いますよ。
(実行中のFormStyle,BorderStyleの変更、プロテクトメソッドのRecreateWndを呼ぶ動作をしてしまう)
これがDelphi的といえば、Delphi的ですけどね^^;
stdDialogsのあの関数も、
たった一つのAPIを呼んでいるだけで、
uses節に加えれば、その場で使えます。(もちろんパスを通さないといけません)
たいした作業ではないので、今のうちになれておきましょう。
ツイート | ![]() |