Form.Show前に動的生成したコントロールでAlign=alTopにした際のWidthが知りたい

解決


TT  2020-07-03 17:21:00  No: 148878

コントロールを動的に生成する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です。


km  2020-07-03 19:01:00  No: 148879

非表示のうちに処理をすれば良いという話であるなら、onshowイベントの中で処理されてはいかがですか?
現在自分で試せる場所にいないので、アイデア出しだけですが…


AAA  2020-07-03 20:28:04  No: 148880

Panel2.Parent := Self; 
Panel2.Align := alTop; 
Panel2.Parent := Panel1; 
はどうですか


TT  2020-07-06 09:51:09  No: 148883

返信が遅くなってすみません。
OnShowだと即反映されました。
ありがとうございました。

OnCreateとOnShowでこのような違いがあるのは何故なのだろう…。


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








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