画面解像度1024x768で作成(画面設計)したプログラム内で起動される画面のサイズが勝手に変わって(小さくなって)しまい、右下に準備しているボタンが見えなくなってしまうという現象が客先で発生するのですが、原因や対処方法があれば教えてください。客先の画面解像度は1024x768でないのはわかっていますが、詳しい
解像度は確認中です。
※ちなみに”勝手に”というのは、意に反してという意味でまだ原因を発見できません。
フォームはMDIChildにしていませんか?また、OnActiveやonCreateのイベントはいかがですか?
早速の回答ありがとうございます。
言われる通り発生しているフォームは、親フォームから起動される子フォームで発生しています。(こんな返事で的をえているのでしょうか?)
子フォームでの発生は当然なのでしょうか?
OnActiveイベントは処理を記述していません。
OnCreateイベントはコンポーネントのクリア処理を記述していますが、それ以外なしなので大丈夫だと思います。
子フォームの Position プロパティが poDefault か poDefaultSizeOnly に
なっているとかでは?
通りすがりさんもありがとうございます。
子フォームのPositionプロパティはpoDesktopCenterを指定しています。
ScaledプロパティはTrueにしていますがFalseですか?
poDesktopCenterですか。。。
Scaledはよく知りません。デフォルトはTrueですね。
いいかげんな発言かも知れませんが。。。
「客先で」ということは、開発した側では意図通りのサイズになっていたんですよね?
客先の画面フォントのサイズ設定が、通常の設定(96dpi)と違うとかは考えられませんか?
TCustomFormの、CM_SHOWINGCHANGEDメッセージを見ると、
PositionがpoScreenCenterであり、FormStyleがfsMDIChildの場合、
X := (Application.MainForm.ClientWidth - Width) div 2;
Y := (Application.MainForm.ClientHeight - Height) div 2;
SetBounds(X, Y, Width, Height);
となっています。
ということは、設計時のWidth, Heightのまま、メインフォームの中央に表示されると思うのですが、そのようになっていませんか?
# これが「意図するサイズ」となるはずです
「意に反して」の「意」が定義されていないので、何を持って正しいと言えるのかがわかりませんよ。
まずは、どのような状態になってほしいのかを確定してみましょう。
MDI子フォームが、最大化の状態で表示されてほしいのであれば、WindowStateをwsMaximizedにしておけばよろしいかと思います。
どうしてもうまくいかないようであれば、MDI子フォームのOnCreate, OnShowなどのイベントで、位置と大きさを指定してやれば、思いのままの位置・大きさに変更できるはずです。
ふと1つ思い出しました。
Windows2000標準のLook&Feelと、WindowsXPのLook&Feelでは、位置が若干(というより、かなり)ずれます。
WindowsXPでの動作を含む場合は、コンポーネントの位置に注意しましょう。
皆さん、ありがとうございます。
1024x768、800x600で動作確認をしています。
画面フォントのサイズ設定は確認してみます。にしのさんの指摘通り親フォームの中央に表示されているのですが、子フォームの画面が小さくなっているのに対し、
画面上のコンポーネント(子フォームの大部分を占めるDBMemo)がそれに合わせて小さくならず、子フォームが小さくなった分右側、下側が表示しきれていない状態です。
すみません、少しずれるかもしれませんが子フォームのサイズが変わる場合、子フォーム上のコンポーネントも合わせてサイズがかわるのでしょうか?
補足です。
子フォーム上にあるコンポーネントはDBMemoから派生させて独自のコンポーネントです。
Scaledで、PixelsPerInchにあわせてフォームの大きさが変更されますが、張り付いているコンポーネントは関係ありません。
もし必要であれば、Anchorsを指定してやれば追随して大きさが変わると思います。
もしかしたら、ScaledをFalseにするだけで解決するかもしれませんね。ヘルプを見てそう思いました。
失礼しました。
コンポーネントの大きさも変わるようですね(ヘルプを見る限り)。
ちょっとソースをおってみます。
ソースをざっと見る限り、Scaledでコンポーネントのサイズを変えている部分が見あたらないです。
# 見過ごしているのかもしれませんが
フォントのPixelsPerInchは関係するかもしれません。
ScaledがTrueだと、TForm.PixelsPerInchがScreen.PixelsPerInchと同値になります。
これにあわせてフォントも変わっているのだと思います。
フォントが変わってサイズが変わるのは、TLabelくらいでしょうか。AutoSizeがTrueの場合ですが。
にしのさんをはじめ、皆さんありがとうございます。
① Create時に、位置・大きさを設定する。
② Scaled=False
とにかく上の方法で試してみます。②は①があれば必要ないかもしれないのですが自分なりにヘルプをみて判断しました。
結果がわかり次第報告させて下さい。
レスポンスが悪くて申し訳ないです。
皆さん、ありがとうございました。
Createイベントで、位置・大きさを設定する方法で画面が小さくなる現象は
出なくなりました。
対処方法はわかりましたが、原因はこれからまた調べ直します。
ツイート | ![]() |