The Delphi Bug List

Entry No.
436
VCL - 一般 - コントロール - TControl
Form の WindowState の初期値が wsMaximize にセットされていると、アンカー設定されたコントロールがリサイズされない
1.02 2.01 3.0 3.01 3.02 4.0 4.01 4.02 4.03 5.0 5.01 6.0 6.01 6.02 Kylix 1.0
N/A N/A N/A N/A N/A Exists Exists Exists Exists Exists Exists Exists Exists Exists N/A
解説
Reported by Steve Maughan and Greg Chapman; checked by Reinier Sterkenburg
この間違った振る舞いを再現するには、まずフォームを作成し、そこにコントロールを配置し、そのコントロールの Anchor プロパティを全てのアンカータイプ(akLeft..akBottom)が含まれるように変更します。次にフォームの WindowState を wsMaximized に変更します。アプリケーションを実行するとフォームは最大化されて表示されますが、フォームに配置したコントロールは元のサイズのままです。

この問題は、リサイズを行う特別なコードのほとんどがフォームのロード中には無効になっているためではないかと思います。特に、次に AlignControls が呼び出された時のための情報を保存するのに重要なように見える TWinCtontrol.UpdateLastResize に注目してください。もし私が正しければ、この問題は WindowState := wsMaximized とした場合だけに限られる問題ではないはずで、フォームのサイズを Delphi のフォームデザイナが保持しているサイズとは異なるサイズに変更する全てのプロパティに当てはまるでしょう。私にはこの問題がどれほど重大なものかは分かりません。

Matthew Collins notes:
Form の初期位置を poDefault に設定した MDI 子フォームにも影響します。そのフォームはデフォルトのサイズと位置になりますが、フォーム上のコントロールはリサイズされません。
解決策 / 回避方法
wsMaximized の場合の回避方法はとても単純です。フォームのデザイン時の WindowState は wsNormal にし、FormCreate 内で wsMaximized をセットしてください。
Latest update of this entry: 2002-04-03
本家 The Delphi Bug List のエントリーはこちら
The Delphi Bug List 日本語訳 へ