こんにちは。
開発環境は、Delphi2010 、Win7 64ビット です。
あるPC(Windows 7 32)で実行したときにだけ、
Form2 の Width と Height が小さく表示される現象が出ました。
そうなる原因を突き詰めていった所、
unit2.dfm の ClientWidth が Width に、ClientHeight が Height に
変わってしまっていた ことが判明しました。
Client〜 のものに書き換えることで、
小さく表示される現象は解消されました。
そこで疑問が2つあります。
1.自分で unit2.dfm を直接書き換えてはいないのに、
ClientWidth が Width に変わってしまうことはあるのでしょうか?
2.小さく表示される現象が出るPCと出ないPCがあります。
どちらも同じ Win7 32ビット です。
例えばエクスプローラ等を表示させても、いずれも同じ見た目の状態なのです。
現象が 出る/出ない は、どこの設定が関係しているのか分かりません。
どこがポイントと思われますか?
変な質問ですみませんが、どうもすっきりせず、再発が心配です。
良きアドバイスをお願いいたします。
>1.自分で unit2.dfm を直接書き換えてはいないのに、
> ClientWidth が Width に変わってしまうことはあるのでしょうか?
今までに経験した事はありませんね。
> 2.小さく表示される現象が出るPCと出ないPCがあります。
"小さく" の程度が判りませんが、幾つか考えられることがあります。
1.フォームの Scaled プロパティが True になっている。
Scaled が True だと Windows の DPI によってフォームのサイズが変化します。
# Windows 8 では ppi によって dpi が変化するようになっていたと思います。
2.フォームの BorderStyle が異なる。
bsSizeable と bsSingle でもフレームの幅が異なります。
# 今回の件とは関係なさそうですが。
3.Aero オン/オフの違い。
実は微妙に異なります。
[Frequently asked questions about the Aero Basic window frame]
http://web.archive.org/web/20080221003615/http://shellrevealed.com/blogs/shellblog/archive/2006/10/12/Frequently-asked-questions-about-the-Aero-Basic-window-frame.aspx
>あるPC(Windows 7 32)で実行したときにだけ、
>Form2 の Width と Height が小さく表示される現象が出ました。
実行時の話
>そうなる原因を突き詰めていった所、
>unit2.dfm の ClientWidth が Width に、ClientHeight が Height に
>変わってしまっていた ことが判明しました。
設計時の話
つまり設計時の時点で画面が小さくなっているはず
>あるPC(Windows 7 32)で実行したときにだけ、
ClientWidth = Width - 16 だから
Width が 元の値より 16 小さくなっているので小さくは
なるだろうけど
特定のPCじゃなくて、全てで現象が出るはず
テキストで ClientWidht を Width に変えて保存すれば
Widthで保存できるけどフォームを表示させ、もう一度テキスト
表示すると ClientWidth に変わっている
それを読み込んでテキストで表示させると ClientWidth になっている
読み込んで何もせず保存しても ClientWidth で保存される
> DEKO さん、KHE00221 さん
コメントありがとうございます。
まだ解明でいきてませんが、ひとまず報告です。
unit2 の設計画面で、Width と Height の部分が太字になってることに
今、気付きました。(逆に Client〜 のほうは太字でありません)
それで、一旦プロジェクトを閉じて、unit2.dfm を Client〜 に書き換え、
プロジェクトを読み込み、コンパイルした所、再び、 Width と Height に
書き換えられてしまうことも分かりました。
どこが原因でこうなるのか不明なので、
そぎ落としていって原因解明しようと思います。
これが解明できた後に、
>小さく表示される現象が出るPCと出ないPC
の方を調べたいと思います。
それって そのプロジェクトの Form2 のみがなる現象なのかな?
Form1 とか 新規作成した場合とかは ならない?
解決としましたので、結果を報告いたします。
◆書き換えられてしまった原因
VertScrollBar.Range に値が入っていることで、
*.frm の Formのサイズの管理方法(?)が、
ClientW でなく W に切り替わっていました。
Form の縦スクロールバーがどんな時に使う物なのか、
良くわかっていません。
とりあえず、何かの拍子に VertScrollBar に値を
入れてしまっていたようです。とほほ...
◆PCによる表示の違い(W=Width、H=Heightと略)
【開発時】
・Form1
W,H = 300,300
ClientW,ClientH = 284,262 (優先)
・Form2
W,H = 300,300 (VertScrollBar.Range設定によりこちら優先)
ClientW,ClientH = 284,262
【PC1で実行時】
・Form1
W,H = 300,300
ClientW,ClientH = 284,262
・Form2
W,H = 300,300
ClientW,ClientH = 284,262
【PC2で実行時】
・Form1
W,H = 389,388
ClientW,ClientH = 371,343
・Form2
W,H = 300,300
ClientW,ClientH = 282,255
但し、PC1、PC2とも、Windowsのコンパネの設定では違いを
見つけられませんでした。([Windows7ベーシック]でAeroオフ)
WindowsXPのPC等でも確認しましたが、表示サイズがおかしいのは、
このPC2のみ。
この件に関しては、諦め気味です。
DEKO さん、KHE00221 さん
ありがとうございました。
ツイート | ![]() |