ボーランド製品だけなのか、特定のバージョンだけなのかわかりませんが、表記のような状態になります。
環境:Windows XP SP1 + 画面モードをWindows XPスタイル
作成:Delphi 5
アプリケーション自身はXPテーマ未対応で、manifestファイルで対応する状態。
このとき、ダイアログではないフォームのClientHeightを0に変更すると、そのフォームのタイトルバーがクラシックモードになってしまう。
その後、いろいろなフォームで試したところ、以下のような場合(いずれかを満たす)に「発生することがある」どうにも曖昧な発動条件にしかなりませんでした。
また、D5で設計時にもフォームサイズを変更すると、クラシック表示になってしまいます。
(1)ClientHeight=0 にする
(2)フォームの境界をドラッグして、手動でサイズ変更し、フォームのスクロールバーが表示されるまで小さくする。
(2)が一番怪しい部分でしたが、スクロールバーが表示されても、変化のないフォームもあり。
もしかすると、スクロールバーが、フォーム以外のコントロールのスクロールバーだったからかもしれません。
ちょっと追求する余力がないのですが、D6とかD7あたり、それともボーランド製品に共通、はたまた、全てのXPスタイル未対応アプリに共通する?(ちょっと大げさか)
皆さんの環境ではどうでしょう?
実験してみましたが、再現できませんでした。
環境:Windows XP SP1 + 画面モードをWindows XPスタイル
作成:Delphi7 Update1 + manifestファイル
Delphi5の動作環境には、XPが入っていません。
XPで動いたとしても、XPスタイルで表示できないのは仕方のないことかと。
動作環境から推測すると、Delphi5,Delphi6は非対応っぽいですね。
Delphi7は、動作環境にXPが含まれるので、問題は発生しないと思います。
# 断言はできません
RANさん実験ありがとうございます。
> 作成:Delphi7 Update1 + manifestファイル
えと、ちょっと書き方が悪かったようです。
(今読み返すと、表現悪すぎっぽいです)
アプリ自体にmanifestファイルを含めるのではありません。
> manifestファイルで対応する状態。
と書いたのは、manifestファイルを用意しないとXPスタイルにならないってことを言いたかったのです。
したがって、『アプリ自身はXPスタイル未対応とした状態で、XP環境でタイトルバーが、クラシック表示になる』のはなぜだ?
他の環境とかはどうだ?
などと聞いてみたのです。
よくよく読み返すと、manifestファイルを含めたアプリと読んでとれますね。
何書いてんだ、俺。
補足として、アプリ自身をmanifestファイルをリソース化して埋め込む方法でXP対応化すると、この現象は発生しません。
# RANさんの方法がこれ?
にしのさん>
> XPで動いたとしても、XPスタイルで表示できないのは仕方のないことかと。
これは十分にわかっております。
解決する/しないじゃなく、半分以上が好奇心みたいなものなので、再現する/しない、という点が焦点です。
上げてしまってから聞くのもあれですが、こんな質問はだめですか?
> これは十分にわかっております。
> 解決する/しないじゃなく、半分以上が好奇心みたいなものなので、再現する/しない、という点が焦点です。
> 上げてしまってから聞くのもあれですが、こんな質問はだめですか?
ああ、なるほど。
私はここの掲示板の管理人ではないですが、こういう議論は面白いのでありだと思います。
本題。
Delphi7で試してみると、再現できないです。
ClientHeight:=0を、IDEで設定した状態で試しました。
フォームには何も貼り付けていません。
こうやれば必ず再現する、という手順を提示していただければ試せます。
manifestファイルの書き方が違っているとか、comctlsを使用しないと再現しないとか。
manifestファイルを使用しない場合でしたね。
それでも同じく再現できませんでした。
> こうやれば必ず再現する、という手順を提示していただければ試せます。
もしかするとD7では発生しないのかもしれません。
とりあえず、D5で再現できた方法です。
1)プロジェクトの新規作成
2)フォームにボタン(TButton)を貼り付け
3)フォームサイズをボタンが隠れるような大きさまで変更
これは、ボタンの一部が隠れればよい。
4)この時点で、縦スクロールバーが表示されるはず。
この時、タイトルバーがクラシックスタイルになってしまいます。
なお、このときオブジェクトインスペクタからClientHeightを0にしても大丈夫で、スクロールバーが表示される4〜5あたりにすると、再現します。
どうも、スクロールバーが、一つのキーになっている気がします。
> comctlsを使用しないと再現しないとか。
TButtonを一個置いただけなので、comctlsは未使用で再現しました。
これは関係なさそうですね。
ツイート | ![]() |