gpt4 book ai didi

delphi - 包含 TPanel 时 TPanel 不自动调整大小

转载 作者:行者123 更新时间:2023-12-03 15:06:15 24 4
gpt4 key购买 nike

我在另一个面板中有一个面板:

enter image description here

内部面板对齐alTop:

enter image description here

外部面板设置为AutoSize=true:

enter image description here

所有东西都有尺寸。如果我在设计时更改内部面板的高度,则外部面板自动调整大小以适应它:

enter image description here

现在运行时

现在我需要change the height of the inner panel at runtime :

procedure TForm2.Button1Click(Sender: TObject);
begin
pnlInner.Height := pnlInner.Height + 50;
lblPointer.Top := pnlOuter.Top + pnlInner.Height;
end;

除非我在运行时更改内部面板的高度,自动调整大小面板不会自动调整大小:

enter image description here

这当然适用于 Delphi 5、7 和 probably XE2 - XE5 .

解决办法是什么?

解决方法当然是绕过对齐/自动调整大小并在各种OnResize事件期间执行所有操作。但这显然不是 RAD。我确信这是 VCL 中某个地方的一个小错误。由于我们已经修复了大约两打 XE6 VCL 错误,因此最好修复它,这样其他人就不必考虑它。

奖金闲聊

我喜欢这句话:

and, could you please attach sample project?

就好像没有人愿意尝试重现它一样。

最佳答案

问题是 TWinControl.AlignControls 中的回归:

procedure TWinControl.AlignControls(AControl: TControl; var Rect: TRect);
begin
//...snip

// Apply any constraints
if Showing and ((sfWidth in FScalingFlags) or (sfHeight in FScalingFlags)) then
DoAdjustSize;

//...snip
end;

这里的错误是,除非存在 sfWidthsfHeight 缩放标志,否则它不会调用 DoAdjustSize

解决方法是不要试图超越自己,并且无论如何DoAdjustSize:

procedure TWinControl.AlignControls(AControl: TControl; var Rect: TRect);
begin
//...snip

// Apply any constraints
//QC125995: Don't look to scaling flags to decide if we should adjust size
if Showing {and ((sfWidth in FScalingFlags) or (sfHeight in FScalingFlags))} then
DoAdjustSize;

//...snip
end;

找到此修复后,我们就成功解决了 the similar issue except with a TOleControl (e.g. TWebBrowser) rather than a TPanel 问题了一半.

Note: Any code released into public domain. No attribution required.

关于delphi - 包含 TPanel 时 TPanel 不自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com