Firemonkey的旁门左道[六]
转载:http://blog.csdn.net/qustdong/article/details/9992033
今天还是讲讲和图形有关的事情,这次的难度再增加些,不是直接改源代码了,
而是通过RTTI的方式去让定制我们需要的功能。
从Bitmap的源代码中,我们可以看到FPixelFormat的属性是私有的,也就是我们无法动态的去改变。
明明有十几种PixelFormat形式,又不能去设置,难道又是bug?
通过RTTI,我们可以很实习它的修改。
我们先自己定义一个继承自TBitmap的类,取名为TMyBitmap;
然后设置属性PixelFormat ,get set方法如下:
procedure TMyBitmap.SetPixelFormat(const PixelFormat: TPixelFormat);
var C: TRTTIContext;
T: TRTTIType;
F: TRTTIField;
V: TValue;
begin
C := TRTTIContext.Create;
T := C.GetType(ClassInfo);
if T <> nil then
begin
F := T.GetField('FPixelFormat');
if F <> nil then
F.SetValue(Self, TValue.From<TPixelFormat>(PixelFormat));
end;
C.Free;
end;
function TMyBitmap.GetPixelFormat: TPixelFormat;
var C: TRTTIContext;
T: TRTTIType;
F: TRTTIField;
V: TValue;
begin
Result := pfA8B8G8R8;
C := TRTTIContext.Create;
T := C.GetType(ClassInfo);
if T <> nil then
begin
F := T.GetField('FPixelFormat');
if F <> nil then
begin
V := F.GetValue(Self);
Result := V.AsType<TPixelFormat>;
end;
end;
C.Free;
end;
通过TMyBitmap我们就可以自由控制这个原先不可见的私有属性了。
可见Canvas.BeginScene的时候对PixelFormat进行了一次重置。
Firemonkey的旁门左道[六]的更多相关文章
- Firemonkey的旁门左道[四]
做开发,就是发现问题,解决问题,又发现问题...周而复始的循环 下面又应该是Firemonkey下的bug. 官方文档中描述: Using the FireMonkey TMenuBar's OSMe ...
- Firemonkey的旁门左道[五]
这次讲讲绘制的几种模式吧,不过还是比较浅显,刚接触不久,还实在没这个实力道出个所以来. FMX下,我们可以切换GDI,D2D,GPU这三种模式, 只要通过全局变量就可以轻松搞定. 如何设置 Globa ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- [修正] Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在)
问题:Firemonkey TFrame 存档后,下次载入某些事件连结会消失(但源码还在) 解决:(暂时方法) type TTestFrame = class(TFrame) public const ...
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
随机推荐
- NuGet更新引用Dll
第一种 通过 "Add Library Package Reference..." 添加 点击 ‘Add Library Package Reference...’ , 搜索你要添 ...
- jQuery基础之(五)jQuery自定义添加"$"与解决"$"的冲突
1.自定义添加$ 从上面四篇文章我们看到jQuery的强大,但无论如何,jQuery都不可能满足所有用户的需求,而且有一些需求十分小众,也不适合放到整个jQuery框架中,正是因为这一点,jQuery ...
- Javascript继承机制的设计
写软工作业时各种蛋疼:主要在于Javascript没有“子类”“父类”“接口”的概念,只能使用prototype来实现,看了下面一篇文章,感觉写得很不错~ http://www.ruanyifeng. ...
- Daily Scrum – 1/12
Meeting Minutes Merge Wordlist & Word Recite entry. (P0) – Done. Remove "Word Challenge&quo ...
- Git学习笔记——一个NB的分布式版本控制系统
1. 命令: git init 创建新仓库 (在一个空文件下然后执行命令) git clone + 路径 检出仓库,从本地或从服务器上 git status 查 ...
- java设计优化-享元模式
享元模式是设计模式中少数几个以调高系统性能为目的的设计模式.它的核心思想是:如果在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象.在享元模式中,由于需要构建 ...
- Struts2+Jquery实现ajax并返回json类型数据
来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...
- onethink常用标签的使用示例
首页文章模型列表输出: <article:list name="article" category="2" row="3" order ...
- 牛客网上的剑指offer题目
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
- Spring MVC实现防止表单重复提交(转)
Spring MVC拦截器+注解方式实现防止表单重复提交