形式从Delphi 10.0 Seattle到10.2.2 Tokyo的不同行为

时间:2018-01-10 20:13:32

标签: delphi delphi-10-seattle delphi-10.2-tokyo

我安装了新的Delphi 10.2.2东京,并开始将我的项目转移到它。

我在Windows桌面应用程序中发现了以下奇怪的行为。

我有一张700x545的表格。为防止用户调整大小,我使用OnCanResize事件并将Resize参数设置为False。

OnCreate事件中,我设置了所需的Width / Height值。使用Delphi 10.0 Seattle,它运行良好,但在10.2.2中,大小设置为340x220。

显然,它是在OnCreate事件之前设置的,因为OnCreate事件中的更改会被忽略,可能是因为我的OnCanResize事件。

在设计时,我在Object Inspector中找到了正确的值。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

创建Form对象时,在OnCreate事件触发之前,可​​以(通常是)在DFM流式传输期间创建其基础窗口。因此,Form可能需要在准备好之前执行调整大小操作。这在所有版本的Delphi中都是可能的,它在东京并不是新的行为。

如果您要使用表单的OnCanResize事件,则应确保在开始设置事件Resize参数之前完全构造并初始化Form对象到False。例如,将Boolean成员添加到您的Form类并在True事件中将其设置为OnCreate,然后将OnCanResize事件设置为Resize参数与Boolean的相反值。

或者,不要使用OnCanResize事件,而是考虑使用表单的Contraints属性,或者只是将表单的BorderStyle属性设置为非可调整样式,如bsSinglebsDialog。无论哪种方式都允许您在代码中调整表单大小,同时防止用户手动调整表单大小。

答案 1 :(得分:-2)

西雅图和10.2.2之间的区别如下:

在调用oncreate事件之前调用oncanresize事件两次。源来自TControl(我无法找到什么控件),调用者对我来说似乎是ScaleforCurrentDPI程序。在西雅图,在完成oncreate事件之前从未调用oncanresize。

对我来说,在oncreate事件之前可以调用onformdosomething事件时听起来像个bug。