写FMX控件时,在追踪控件的绘制调用顺序的时候,研究FMX的源代码,老是看不出控件的Paint顺序,TControl的源代码里,只能追踪到源头PaintInternal(),并且PaintInternal()是不可覆盖的,然后代码里就没有看到哪里有调用PaintInternal()的地方(PaintTo(),ApplayEffect()等方法也调用了PaintInternal(),但是这个只是特别的应用Effect的调用,不是通用的调用),而且在TControl的下断点调试比较麻烦,会被其它的控件和FORM的干扰,所以写了些代码,运行时候再在TControl的相关代码里下断点(一个空白窗体里,通过鼠标点击事件动态创建一个控件,这样就不会被窗体或其它控件干扰了)。

FMX是窗体统一绘制控件的(这是和VCL最大不同的地方),在窗体的TCustomForm.PaintRects()这里调用(6155,6166行):

.........

if AllowPaint then
                TOpenControl(Control).PaintInternal;

....................

因为TControl.PaintInternal()方法是protected的,所以定义了一个外套:

TOpenControl = class(TControl);

这样就能在外部调用protected方法了(Delphi源代码里经常看到这样的运用,至于好不好,就见仁见智了)。

TControl.PaintInternal()里调用了PaintChildren()方法,这个是虚方法,子类可以覆盖。写控件时,有时候是需要覆盖这个方法的,比如TTabControl就覆盖这个方法。

FireMonkey Control的Paint顺序相关推荐

  1. C#中控件Control的Paint事件和OnPaint虚函数的区别

    句柄 : 句柄,是整个Windows编程的基础.一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按 ...

  2. 日常收集C#接口知识(知识全面)

    本文分为七章节给大家介绍c#接口知识,内容比较详细,特此分享脚本之家平台,供大家参考 第一节 接口慨述 接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有 ...

  3. 钢七连实战C3-P2:项目源码结构 面向对象基础 堆分配

    钢七连软件培训 C3-P2  面向对象  第2节 1.怎样阅读一套项目源码 2.面向对象基本技术 https://blog.csdn.net/weixin_42644456 一.通用的学习路线,解决办 ...

  4. 阿士比亚:搜索团队智能内容生成实践

    一.项目背景 1.1 什么是智能内容生成?         更准确的定义应该是智能文本内容生成,指的是训练机器模型,智能生成单品推荐理由.多商品清单文章一类的文本型内容,显然,与智能内容生成相对的概念 ...

  5. 深入浅出Istio:Service mesh快速入门与实践-读书笔记(By GisonWin)

    01 服务网格历史 (以后补充) 02 服务网格的基本特性 连接 微服务错综复杂,要完成其业务目标,连接问题是首要问题.连接存在于所有服务的整个lifcecycle中,用于维持服务的运行. 安全 保障 ...

  6. 第五节、实现接口 [转贴]

    1.显式实现接口成员 为了实现接口,类可以定义显式接口成员执行体(Explicit interface member implementations).显式接口成员执行体可以是一个方法.一个属性.一个 ...

  7. NM_CUSTOMDRAW消息

    common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...

  8. 淘宝总知道你要什么?万字讲述智能内容生成实践 | 技术头条

    参加「CTA 核心技术及应用峰会·杭州」,请扫码报名 ↑↑↑ 作者 | 清淞 来源 | 清淞的知乎专栏 专栏地址: https://zhuanlan.zhihu.com/p/33956907 本文主要 ...

  9. 2D骨骼动画工具Sprite Studio使用教程

    骨骼动画在游戏制作过程中必不可少.在建模的基础上,通过动画工具制作角色的一系列动画以备游戏使用. 2D骨骼动画方面国内一直采用Spine 2D制作,对Spine 2D的应用和效果笔者不再赘述,本文为各 ...

  10. 在IDEA中给项目同时配置git和svn

    此篇文章介绍如何在IDEA中同时给一个项目添加多个版本控制工具. 在IDEA中一个项目同时配置svn和git,通过前文Intellij IDEA中的Version Control问题 的介绍我们知道了 ...

最新文章

  1. cenotos 卸载mysql_cenotos 6.5 NFS服务配置
  2. 深圳大学梁臻博士提出EEGFuseNet高维脑电图混合无监督深度特征表征与融合模型及其在情绪识别中的应用...
  3. 排序算法——归并排序
  4. 东南大学计算机学院张敏灵,东南大学张敏灵教授来我校作学术报告
  5. 2006最新版个人所得税计算器
  6. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(4)
  7. 拳王虚拟项目公社:一款解除网站禁止复制的插件,Simple Allow Copy V 0.8.2
  8. 花书+吴恩达深度学习(二八)深度生成模型之有向生成网络(VAE, GAN, 自回归网络)
  9. 极大似然函数求解_极大似然估计法的理解指南
  10. 使用计算机粘贴板的步骤,电脑中快速打开剪贴板查看器的方法
  11. Japanese Student Championship 2019 Qualification B - Kleene Inversion(规律 + 快速乘)
  12. 2018.11.22!今天重温一遍知识点,捋一捋思路
  13. Python基础-电子邮件-初识
  14. [解决]通常每个套接字地址只允许使用一次
  15. 广西教育学院计算机技术专业可以当老师吗,广西教育学院老师待遇 广西教育学院好吗...
  16. Procreate闪闪的神仙笔刷合集,IPad绘画必备
  17. Android 音视频开发实践系列-04-Android WebRTC推流到SRS服务器实现直播功能
  18. pycharm安装pandas报错解决办法
  19. VLAN 数据帧的处理
  20. 网络协议学习:虚拟路由冗余协议 VRRP

热门文章

  1. Qgis 3.18 的安装步骤
  2. 2022电工(中级)考试模拟100题模拟考试平台操作
  3. MATLAB图像处理基础知识1 imhist
  4. ADC0808确定地址及查询方式示例
  5. 华为网络技术大赛-课件整理
  6. matlab 生成dbc文件,simulink中使用dbc文件实现CAN消息发送与代码生成
  7. python怎么开服务器,实战讲解:如何用Python搭建一个服务器
  8. Lauterbach trace32与 jlink
  9. eclipse汉化版与背景更换更换jdk及项目jre以及环境变量的配置
  10. ADAS/AD控制器模块开发03 - 系统架构设计及通用需求定义