加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 重建窗口时锚点被破坏的解决方法?

发布时间:2020-12-15 04:13:34 所属栏目:大数据 来源:网络整理
导读:这种情况发生在直到XE3的所有Delphi中: 创建一个表单并在其上放置一个面板.将面板锚定到[akLeft,akTop,akRight,akBottom],但在它和边框之间留出空间. 添加一个调用RecreateWnd()的按钮 运行应用程序.调整窗体大小以隐藏面板,因为它由于锚定而小于0像素.按下
这种情况发生在直到XE3的所有Delphi中:

>创建一个表单并在其上放置一个面板.将面板锚定到[akLeft,akTop,akRight,akBottom],但在它和边框之间留出空间.
>添加一个调用RecreateWnd()的按钮
>运行应用程序.调整窗体大小以隐藏面板,因为它由于锚定而小于0像素.按下重新创建按钮.
>重新调整表单大小并注意面板的锚定已断开.

只要我记得自己使用Delphi,就会因此无法使用锚点.调整表单大小,然后停靠它:重新创建窗口,您的布局被破坏.

我想知道是否有某种解决方法?

更新

评论中提供了两种解决方法,一种是经证实且稳定但形式眨眼,另一种是实验性但可能更彻底和清洁.

我暂时不会投票给任何一个,因为其中一个是我的,我甚至不确定它是否稳定.相反,我会等待一些公众意见.

解决方法

我使用的两个选项对于底部和右侧锚点的问题都不是非常理想的:

>在调用或导致调用RecreateWnd();之前再次使窗口变大,然后再将其缩小.然而,在你再次变小之前必须可见.
>设置Form的约束,使其不能重新调整大小以至于最终隐藏了东西.

闪烁较大表单的示例,使用高度和宽度足够大的值,以便不隐藏面板:

procedure TForm1.Button1Click(Sender: TObject);
Var
  OldWidth,OldHeight : integer;
begin
  OldWidth := Form1.Width;
  OldHeight := Form1.Height;
  Form1.Visible := false;
  Form1.Width := 1000;
  Form1.Height := 800;
  RecreateWnd();
  Form1.Visible := true;
  Form1.Width := OldWidth;
  Form1.Height := OldHeight;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读