Firemonkey的旁门左道[六]
来源:互联网 发布:多普达p800软件 编辑:程序博客网 时间:2024/05/07 02:30
今天还是讲讲和图形有关的事情,这次的难度再增加些,不是直接改源代码了,
而是通过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的旁门左道[一]
- Firemonkey的旁门左道[二]
- Firemonkey的旁门左道[三]
- Firemonkey的旁门左道[四]
- Firemonkey的旁门左道[五]
- Firemonkey的旁门左道[七]
- Firemonkey的旁门左道[八]
- 赚钱的旁门左道--站群
- 旁门左道的js
- 另类巧妙的思路:旁门左道的入侵
- FireMonkey 手机 APP 的手势
- FireMonkey下的WndProc实现
- FireMonkey的TreeView控件的一个bug
- 《Html旁门左道》第六天:表格线的制作技法
- 旁门左道你没见过的CSS效果
- 旁门左道的玩法:我用Vista管理MSN帐号
- php mkdir()第一个参数必须是已经存在的路径,否则会报错
- ios中沙盒里面的文件有哪些?
- Linux tcpdump命令详解
- UVa10490 - Mr. Azad and his Son!!!!!
- android jni 第三方 .so
- Firemonkey的旁门左道[六]
- python challenge <四>
- 网桥在内核的实现
- HEVC测试序列下载地址
- DataGridView实现添加合计行并始终显示在底部
- OpenCL 学习step by step (3) 存储kernel文件为二进制
- Excel生成报表之解决方案--单元格添加批注
- HM框架简要分析
- linux下ip层的一些概念