常に手前表示

2017/12/18

 ちょっと卑怯な手段かもしれませんが…。

  // 常に手前表示指定なのに、常に手前ではない場合
  if TopMost.Checked and
    (GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_TOPMOST = 0) then
      stdDialogs.TopMost(Handle);

 とすることで強引に解決です(たぶんこれで良いでしょう)。上のTopMostはTActionで、常に手前表示かどうかを示すものです。たぶん、そこではInvalidateを実行するだけで十分でしょう。
それにしてもいつ常に手前表示が切れたんだろう?
もちろんこの"(GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_TOPMOST = 0)"を消せば、強力な常に手前表示となります(スクリーンセーバなどでも決して背面に隠れることがありません)。


http://yokohama.cool.ne.jp/chokuto/urawaza/prm/extended_window_style.html
によると、拡張ウィンドウスタイルで参照出来ることは多いですね。今まで正直、あんまりたくさん知ってたわけじゃないんですが――勉強になります。このサイトは他にもメッセージ一覧などがそろっていて、参考になることが多いですね。
どうも、HSPだとAPI一つ呼び出すのにかなり複雑なことをしなきゃいけないらしいですからね、HSPの作者のサイトには、こういう情報が手にはいることが多いです。