タイトルバーがクラシック表示になる


ラクタート改  2005-06-16 17:55:57  No: 15672

ボーランド製品だけなのか、特定のバージョンだけなのかわかりませんが、表記のような状態になります。

環境:Windows XP SP1 + 画面モードをWindows XPスタイル
作成:Delphi 5 

アプリケーション自身はXPテーマ未対応で、manifestファイルで対応する状態。
このとき、ダイアログではないフォームのClientHeightを0に変更すると、そのフォームのタイトルバーがクラシックモードになってしまう。
その後、いろいろなフォームで試したところ、以下のような場合(いずれかを満たす)に「発生することがある」どうにも曖昧な発動条件にしかなりませんでした。
また、D5で設計時にもフォームサイズを変更すると、クラシック表示になってしまいます。

(1)ClientHeight=0 にする
(2)フォームの境界をドラッグして、手動でサイズ変更し、フォームのスクロールバーが表示されるまで小さくする。

(2)が一番怪しい部分でしたが、スクロールバーが表示されても、変化のないフォームもあり。
もしかすると、スクロールバーが、フォーム以外のコントロールのスクロールバーだったからかもしれません。

ちょっと追求する余力がないのですが、D6とかD7あたり、それともボーランド製品に共通、はたまた、全てのXPスタイル未対応アプリに共通する?(ちょっと大げさか)

皆さんの環境ではどうでしょう?


RAN  2005-06-16 19:39:47  No: 15673

実験してみましたが、再現できませんでした。

環境:Windows XP SP1 + 画面モードをWindows XPスタイル
作成:Delphi7 Update1 + manifestファイル


にしの  2005-06-16 19:50:07  No: 15674

Delphi5の動作環境には、XPが入っていません。
XPで動いたとしても、XPスタイルで表示できないのは仕方のないことかと。

動作環境から推測すると、Delphi5,Delphi6は非対応っぽいですね。
Delphi7は、動作環境にXPが含まれるので、問題は発生しないと思います。
# 断言はできません


ラクタート改  2005-06-16 20:21:10  No: 15675

RANさん実験ありがとうございます。
> 作成:Delphi7 Update1 + manifestファイル
えと、ちょっと書き方が悪かったようです。
(今読み返すと、表現悪すぎっぽいです)

アプリ自体にmanifestファイルを含めるのではありません。
> manifestファイルで対応する状態。
と書いたのは、manifestファイルを用意しないとXPスタイルにならないってことを言いたかったのです。

したがって、『アプリ自身はXPスタイル未対応とした状態で、XP環境でタイトルバーが、クラシック表示になる』のはなぜだ?
他の環境とかはどうだ?
などと聞いてみたのです。

よくよく読み返すと、manifestファイルを含めたアプリと読んでとれますね。
何書いてんだ、俺。

補足として、アプリ自身をmanifestファイルをリソース化して埋め込む方法でXP対応化すると、この現象は発生しません。
# RANさんの方法がこれ?

にしのさん>
> XPで動いたとしても、XPスタイルで表示できないのは仕方のないことかと。
これは十分にわかっております。
解決する/しないじゃなく、半分以上が好奇心みたいなものなので、再現する/しない、という点が焦点です。

上げてしまってから聞くのもあれですが、こんな質問はだめですか?


にしの  2005-06-16 22:14:52  No: 15676

> これは十分にわかっております。
> 解決する/しないじゃなく、半分以上が好奇心みたいなものなので、再現する/しない、という点が焦点です。
> 上げてしまってから聞くのもあれですが、こんな質問はだめですか?
ああ、なるほど。
私はここの掲示板の管理人ではないですが、こういう議論は面白いのでありだと思います。

本題。
Delphi7で試してみると、再現できないです。
ClientHeight:=0を、IDEで設定した状態で試しました。
フォームには何も貼り付けていません。
こうやれば必ず再現する、という手順を提示していただければ試せます。
manifestファイルの書き方が違っているとか、comctlsを使用しないと再現しないとか。


にしの  2005-06-16 22:16:13  No: 15677

manifestファイルを使用しない場合でしたね。
それでも同じく再現できませんでした。


ラクタート改  2005-06-16 23:29:27  No: 15678

> こうやれば必ず再現する、という手順を提示していただければ試せます。
もしかするとD7では発生しないのかもしれません。

とりあえず、D5で再現できた方法です。

1)プロジェクトの新規作成
2)フォームにボタン(TButton)を貼り付け
3)フォームサイズをボタンが隠れるような大きさまで変更
  これは、ボタンの一部が隠れればよい。
4)この時点で、縦スクロールバーが表示されるはず。
  この時、タイトルバーがクラシックスタイルになってしまいます。

なお、このときオブジェクトインスペクタからClientHeightを0にしても大丈夫で、スクロールバーが表示される4〜5あたりにすると、再現します。

どうも、スクロールバーが、一つのキーになっている気がします。

> comctlsを使用しないと再現しないとか。
TButtonを一個置いただけなので、comctlsは未使用で再現しました。
これは関係なさそうですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加