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

内部面板是对齐的alTop

外部面板设置为AutoSize=true。

每件东西都很大。如果在设计时更改内部面板的高度,则外部面板自动大小以容纳它:

现在运行时
现在我需要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;除非我在运行时更改内部面板的高度,否则自动大小面板不会自动大小。

当然,这在Delphi5、7和probably XE2 - XE5中有效。
解决办法是什么?
当然,解决方法是绕过Alignment/Autosize,在各种OnResize事件期间做任何事情。但这显然不是RAD。我肯定这是VCL里的一个小错误。而且,由于我们已经修复了大约20多个XE6 VCL错误,所以最好是修复它,这样其他人就不用考虑它了。
奖金喋喋不休
我喜欢这句台词:
还有,你能附上样本项目吗?
几乎没有人费心去复制它。
发布于 2015-04-02 19:51:46
这个问题是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;这里的错误是,它不会调用DoAdjustSize,除非存在sfWidth或sfHeight缩放标志。
解决方法是,不要试图超越自己,不管如何,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;找到这个修复后,我们就可以解决TPanel了。
注意事项:发布到公共域中的任何代码。不需要归属。
发布于 2015-04-01 16:25:21
据Embarcaderos质量中心报道:
我可以用XE6复制这个,但不能用XE7。
https://stackoverflow.com/questions/29394970
复制相似问题