zoukankan      html  css  js  c++  java
  • TControl的主要功能研究(属性,函数,事件)

    -------------------------- TControl主要用来管理以下消息 -------------------------- 
    鼠标消息
    显示隐藏刷新
    控件状态 ControlState/ControlStyle (待续,需要详细分析)
    位置标题移动 Touch/Hint/Help/Drag/Action/WindowText/AutoSize/Dock,
    颜色字体可见对齐 Color/Font/Visible/ScreenToClient/BringToFront/Bounds/Alignment/Anchors/BiDiMode/ClientRect
    事件 OnClick/OnMouseDown/OnResize
    procedure WndProc(var Message: TMessage); virtual; 处理鼠标消息
    function DesignWndProc(var Message: TMessage): Boolean; dynamic;
    procedure DefaultHandler(var Message); override; 只处理WM_GETTEXT消息
    function Perform(Msg: Cardinal; WParam: WPARAM; LParam: PChar): LRESULT; overload;
    最重要属性(内部):待续
    最重要属性(外部):待续

    原因是以上属性/事件/方法,都是可以被所有可视控件所通用,不管有没有句柄。
    而不可视控件完全不需要这些消息,也就是TComponent不需要载入这些消息,所以TControl提出来单独作为VCL的一层,而且是重要的一层。Delphi的Windows编程从这里开始!所以WndProc也在这里才首次出现尽管TObject有Dispatch和DefaultHandler可以给所有的子类发消息,但其实用处不大,也许只是为了扩展性强,到底哪里真的需要这两个函数有待考察。另外,TControl之所以成为单独一层,除了从这层开始处理消息(对上负责,上级不需要处理消息),同时也把TWinControl和TGraphicControl的公共属性都提取出来了(对下负责,否则这么多事件和属性难道写两遍),而且可能有那么点跨平台的意思,毕竟到这层位置,没有有平台深刻相关(没有出现句柄,没有强烈依赖的WinAPI,只有鼠标颜色对齐拖动什么的,即使用到了API也容易轻易改写,因为各个平台都有这些东西)。有空考察一下Kylix的TControl做什么就都知道了。可惜FireMonkey没有用到TControl,处理消息完全是通过模拟。

  • 相关阅读:
    黑马程序员__OC三大特性
    黑马程序员___OC类和对象
    黑马程序员___预处理指令
    黑马程序员___数据类型总结
    黑马程序员__指针
    黑马程序员__C语言__函数__static和extern
    黑马程序员__C语言__流程控制__选择结构
    黑马程序员__C语言__循环结构
    入园随笔
    Fiddler中抓取不到Jmeter模拟的请求包。
  • 原文地址:https://www.cnblogs.com/findumars/p/3952109.html
Copyright © 2011-2022 走看看