Kro*_*ica 1 delphi vcl handle tform
我最近调试了一个复杂的bug.这是由访问不存在的Form.Handle(带状指针)引起的.这个bug以相当意想不到的方式向我揭示 - 访问Forms会Handle导致调整大小和重新绘制.
我希望Form.Handle通过垃圾指针访问只会返回一些垃圾THandle.期望Handle在表单创建时创建一次并保持相同直到Form被销毁.
为什么会这样,这TForm.Handle不是一个在表单创建时初始化并通过访问的字段
property Handle: Integer read FHandle;
Run Code Online (Sandbox Code Playgroud)
,但是是一个吸气剂
property Handle: Integer read GetHandle;
Run Code Online (Sandbox Code Playgroud)
CreateWnd在第一次访问时创建Handle甚至Window()?
即使底层操作系统窗口没有,表单对象也可以存在.在这些时间,字段将为0,这对需要有效窗口句柄的代码没有帮助.为了确保每次需要时都能获得有效的句柄,您需要在引用该字段之前进行调用.作为拥有吸气剂的酒店,酒店可以自动为您服务,方便客人使用酒店.HandleHandleNeededHandleHandleNeededHandle
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |