unit2.dfm の ClientWidth が Width に変わってしまった。

解決


ちはる  2013-02-22 02:05:39  No: 43917

こんにちは。

開発環境は、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ビット です。
    例えばエクスプローラ等を表示させても、いずれも同じ見た目の状態なのです。
    現象が 出る/出ない は、どこの設定が関係しているのか分かりません。
    どこがポイントと思われますか?

変な質問ですみませんが、どうもすっきりせず、再発が心配です。
良きアドバイスをお願いいたします。


DEKO  2013-02-22 06:12:26  No: 43918

>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


KHE00221  2013-02-22 18:55:51  No: 43919

>ある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 で保存される


ちはる  2013-02-22 20:59:17  No: 43920

> DEKO さん、KHE00221 さん

コメントありがとうございます。
まだ解明でいきてませんが、ひとまず報告です。

unit2 の設計画面で、Width と Height の部分が太字になってることに
今、気付きました。(逆に Client〜 のほうは太字でありません)

それで、一旦プロジェクトを閉じて、unit2.dfm を Client〜 に書き換え、
プロジェクトを読み込み、コンパイルした所、再び、 Width と Height に
書き換えられてしまうことも分かりました。

どこが原因でこうなるのか不明なので、
そぎ落としていって原因解明しようと思います。

これが解明できた後に、
>小さく表示される現象が出るPCと出ないPC
の方を調べたいと思います。


KHE00221  2013-02-23 02:43:42  No: 43921

それって  そのプロジェクトの Form2 のみがなる現象なのかな?

Form1 とか  新規作成した場合とかは  ならない?


ちはる  2013-02-23 02:53:32  No: 43922

解決としましたので、結果を報告いたします。

◆書き換えられてしまった原因
  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 さん
ありがとうございました。


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

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






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