我安装了新的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中找到了正确的值。
有什么想法吗?
答案 0 :(得分:2)
创建Form对象时,在OnCreate
事件触发之前,可以(通常是)在DFM流式传输期间创建其基础窗口。因此,Form可能需要在准备好之前执行调整大小操作。这在所有版本的Delphi中都是可能的,它在东京并不是新的行为。
如果您要使用表单的OnCanResize
事件,则应确保在开始设置事件Resize
参数之前完全构造并初始化Form对象到False
。例如,将Boolean
成员添加到您的Form类并在True
事件中将其设置为OnCreate
,然后将OnCanResize
事件设置为Resize
参数与Boolean
的相反值。
或者,不要使用OnCanResize
事件,而是考虑使用表单的Contraints
属性,或者只是将表单的BorderStyle
属性设置为非可调整样式,如bsSingle
或bsDialog
。无论哪种方式都允许您在代码中调整表单大小,同时防止用户手动调整表单大小。
答案 1 :(得分:-2)
西雅图和10.2.2之间的区别如下:
在调用oncreate事件之前调用oncanresize事件两次。源来自TControl(我无法找到什么控件),调用者对我来说似乎是ScaleforCurrentDPI程序。在西雅图,在完成oncreate事件之前从未调用oncanresize。
对我来说,在oncreate事件之前可以调用onformdosomething事件时听起来像个bug。