フォームサイズが変更されてしまう

解決


超初心者  2003-10-15 02:12:04  No: 5186

画面解像度1024x768で作成(画面設計)したプログラム内で起動される画面のサイズが勝手に変わって(小さくなって)しまい、右下に準備しているボタンが見えなくなってしまうという現象が客先で発生するのですが、原因や対処方法があれば教えてください。客先の画面解像度は1024x768でないのはわかっていますが、詳しい
解像度は確認中です。
※ちなみに”勝手に”というのは、意に反してという意味でまだ原因を発見できません。


HOota  2003-10-15 02:16:58  No: 5187

フォームはMDIChildにしていませんか?また、OnActiveやonCreateのイベントはいかがですか?


超初心者  2003-10-15 03:05:02  No: 5188

早速の回答ありがとうございます。
言われる通り発生しているフォームは、親フォームから起動される子フォームで発生しています。(こんな返事で的をえているのでしょうか?)
子フォームでの発生は当然なのでしょうか?

OnActiveイベントは処理を記述していません。
OnCreateイベントはコンポーネントのクリア処理を記述していますが、それ以外なしなので大丈夫だと思います。


通りすがり  2003-10-15 03:28:26  No: 5189

子フォームの Position プロパティが poDefault か poDefaultSizeOnly に
なっているとかでは?


超初心者  2003-10-15 03:49:18  No: 5190

通りすがりさんもありがとうございます。

子フォームのPositionプロパティはpoDesktopCenterを指定しています。

ScaledプロパティはTrueにしていますがFalseですか?


通りすがり  2003-10-15 04:02:43  No: 5191

poDesktopCenterですか。。。
Scaledはよく知りません。デフォルトはTrueですね。

いいかげんな発言かも知れませんが。。。
「客先で」ということは、開発した側では意図通りのサイズになっていたんですよね?
客先の画面フォントのサイズ設定が、通常の設定(96dpi)と違うとかは考えられませんか?


にしの  2003-10-15 04:03:33  No: 5192

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などのイベントで、位置と大きさを指定してやれば、思いのままの位置・大きさに変更できるはずです。


にしの  2003-10-15 04:05:51  No: 5193

ふと1つ思い出しました。
Windows2000標準のLook&Feelと、WindowsXPのLook&Feelでは、位置が若干(というより、かなり)ずれます。
WindowsXPでの動作を含む場合は、コンポーネントの位置に注意しましょう。


超初心者  2003-10-15 04:41:52  No: 5194

皆さん、ありがとうございます。
1024x768、800x600で動作確認をしています。
画面フォントのサイズ設定は確認してみます。にしのさんの指摘通り親フォームの中央に表示されているのですが、子フォームの画面が小さくなっているのに対し、
画面上のコンポーネント(子フォームの大部分を占めるDBMemo)がそれに合わせて小さくならず、子フォームが小さくなった分右側、下側が表示しきれていない状態です。
すみません、少しずれるかもしれませんが子フォームのサイズが変わる場合、子フォーム上のコンポーネントも合わせてサイズがかわるのでしょうか?


超初心者  2003-10-15 04:44:36  No: 5195

補足です。
子フォーム上にあるコンポーネントはDBMemoから派生させて独自のコンポーネントです。


にしの  2003-10-15 05:49:46  No: 5196

Scaledで、PixelsPerInchにあわせてフォームの大きさが変更されますが、張り付いているコンポーネントは関係ありません。
もし必要であれば、Anchorsを指定してやれば追随して大きさが変わると思います。

もしかしたら、ScaledをFalseにするだけで解決するかもしれませんね。ヘルプを見てそう思いました。


にしの  2003-10-15 05:50:45  No: 5197

失礼しました。
コンポーネントの大きさも変わるようですね(ヘルプを見る限り)。
ちょっとソースをおってみます。


にしの  2003-10-15 06:01:43  No: 5198

ソースをざっと見る限り、Scaledでコンポーネントのサイズを変えている部分が見あたらないです。
# 見過ごしているのかもしれませんが
フォントのPixelsPerInchは関係するかもしれません。
ScaledがTrueだと、TForm.PixelsPerInchがScreen.PixelsPerInchと同値になります。
これにあわせてフォントも変わっているのだと思います。
フォントが変わってサイズが変わるのは、TLabelくらいでしょうか。AutoSizeがTrueの場合ですが。


超初心者  2003-10-15 18:31:55  No: 5199

にしのさんをはじめ、皆さんありがとうございます。

①  Create時に、位置・大きさを設定する。
②  Scaled=False

  とにかく上の方法で試してみます。②は①があれば必要ないかもしれないのですが自分なりにヘルプをみて判断しました。
  結果がわかり次第報告させて下さい。
  レスポンスが悪くて申し訳ないです。


超初心者  2003-10-17 02:57:44  No: 5200

皆さん、ありがとうございました。

Createイベントで、位置・大きさを設定する方法で画面が小さくなる現象は
出なくなりました。
対処方法はわかりましたが、原因はこれからまた調べ直します。


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

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






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