首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当包含一个TPanel时,AutoSize不包含TPanel

当包含一个TPanel时,AutoSize不包含TPanel
EN

Stack Overflow用户
提问于 2015-04-01 15:33:55
回答 2查看 2.6K关注 0票数 5

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

内部面板是对齐的alTop

外部面板设置为AutoSize=true

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

现在运行时

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

代码语言:javascript
复制
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错误,所以最好是修复它,这样其他人就不用考虑它了。

奖金喋喋不休

我喜欢这句台词:

还有,你能附上样本项目吗?

几乎没有人费心去复制它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 19:51:46

这个问题是TWinControl.AlignControls中的一个回归

代码语言:javascript
复制
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,除非存在sfWidthsfHeight缩放标志。

解决方法是,不要试图超越自己,不管如何,DoAdjustSize

代码语言:javascript
复制
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了。

注意事项:发布到公共域中的任何代码。不需要归属。

票数 6
EN

Stack Overflow用户

发布于 2015-04-01 16:25:21

据Embarcaderos质量中心报道:

  • QC125995:XE6 Update1 TPanel.AutoSize的回归不起作用
  • QC129330:并不总是应用AutoSize属性

我可以用XE6复制这个,但不能用XE7。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29394970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档