delphi – TPanel在包含TPanel时不会自动调整大小
我在另一个内部有一个面板:
内部面板对齐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; 除非我在运行时更改内部面板的高度,否则自动调整大小的面板不会自动调整大小: 这当然适用于Delphi 5,7和probably XE2 – XE5. 有什么问题? 当然,解决方法是绕过Alignment / Autosize并在各种OnResize事件期间执行所有操作.但那显然不是RAD.我确定这是VCL中的一个小错误.而且由于我们已经修补了大约二十二个XE6 VCL错误,因此修复它会更好,所以没有其他人需要考虑它. 奖金Chatter 我喜欢这条线:
这几乎就像没有人打算甚至试图重现它. 解决方法
问题是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; 找到这个修复程序后,我们解决了the similar issue except with a TOleControl (e.g.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |