现在的位置: 首页 > 综合 > 正文

Delphi TWinControl 类(1)

2018年05月27日 ⁄ 综合 ⁄ 共 1012字 ⁄ 字号 评论关闭
转自@得闲的博客

     还记得在第二章的时候,我用到了procedure CreateParams(var Params: TCreateParams);这个函数的吧!为什么我会使用这个函数来实现那个对齐的问题呢!现在就来追根底的来看看!这个过程其实是在构建窗口的时候会调用的,

当然我说的这个是针对TWincontrol继承过来的组件说的,从TGraphicontrol等继承过来的是没有这个的。

这个函数的产生也是Windows组件库所特有的,如果列为看官有Windows编程的基础,那么这个就很容易理解了,记得,

在Windows编程的时,注册这个窗口类之前,我们都会为一个窗口类指定一系列的参数,而这个CreateParams函数就是产生在这个注册过程之前,目的是用来为创建过程指定参数。

     在讲CreateParams的来源之前,我们必须简略说说组件由生成到显示在用户面前的这个过程。这是个灰常纠结的问题,纠结到我不晓得怎么去说(当然纠结的主要原因还是本人的水平有限,下面大家就简单看看吧,解说可能有错,欢迎指正)。

由于组件都是依托于Form之上的,所以组件要显示出来最首要的是要组件所依托的容器显示出来,那么最首要,我们需要看看Form的创建然后显示出来的过程。至于窗口的创建过程可以参考一下黄叉叉的博客,在这里我在给他的细化一下,便于我们的工作的展开!这个细化应该是在他那个说明的第5步之前,也就是他说的

此处说明一下:


   对 TWinControl 的 Handle 属性的读取会触发 TWinControl.GetHandle;

可以察看
Property Handle; 的声明。


5、第四步中对 Handle 进行读取,触发下述序列:(TWinControl)

    Handle->GetHandle->HandleNeeded

这个HandleNeeded是在什么时候第一次调用的,其实他不是在GetHandle的时候第一次调用的,而是在窗口显示出来之前,也就是Visible变化的过程中第一次调用的,而这个Visible的变化,是在Delphi读取Form资源文件的属性了之后触发(这个属性读取过程,可以参考Delphi
的持续机制浅探
)。我们看看Visible这个属性变化所触发的过程,这个属性定义在TControl中,属性变化对应的过程为

抱歉!评论已关闭.