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,处理消息完全是通过模拟。

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Spring MVC注解中@PathVariable和@RequestParam的区别
    Spring MVC请求流程
    eclipse-web项目目录结构
    数论基础------质数板
    线性DP基础--acwing---动态规划
    背包基础
    ----------动态规划分界线----------
    2020牛客暑期多校训练营(第三场)
    区间选点-贪心-acwing
    2020牛客暑期多校训练营(第二场)
  • 原文地址:https://www.cnblogs.com/jijm123/p/14043380.html
Copyright © 2011-2022 走看看