コントロールを動的に生成するVCLフォームを作成しています。
Show前にコントロールを動的生成時、Formを親としたコントロールはAlign=alTopを設定するとWidthが即反映されるのですが、その動的に作成したコントロールを親としたコントロールはAlign=alTopを設定してもWidthにすぐには反映されないようです。
Show後には反映されています。
コントロール生成時にその幅によって変えたい処理があるためAlign=alTopで反映されるWidthを知りたいのですが上手い方法はないでしょうか?
例
procedure TForm1.FormCreate(Sender: TObject);
var
Panel1, Panel2: TPanel;
begin
// Self.ClientHeight = 600
Panel1 := TPanel.Create(Self); // Panel1.Width = 185
Panel1.Parent := Self;
Panel1.Align := alTop; // Panel1.Width = 600
Panel2 := TPanel.Create(Self); // Panel2.Width = 185
Panel2.Parent := Panel1;
Panel2.Align := alTop; // Panel2.Width = 185 → Show後には 598になっている
end;
環境はWindows10でDelphi 10.2 Tokyoです。
非表示のうちに処理をすれば良いという話であるなら、onshowイベントの中で処理されてはいかがですか?
現在自分で試せる場所にいないので、アイデア出しだけですが…
Panel2.Parent := Self;
Panel2.Align := alTop;
Panel2.Parent := Panel1;
はどうですか
返信が遅くなってすみません。
OnShowだと即反映されました。
ありがとうございました。
OnCreateとOnShowでこのような違いがあるのは何故なのだろう…。
ツイート | ![]() |