-
近期文章
- Android,保活,复活,防杀 2020 年 12 月 1 日
- Managed Record的使用一则 2020 年 9 月 9 日
- Delphi Managed Record的一个不方便的地方 2020 年 9 月 7 日
- Delphi10.4托管记录(Managed Record)产生的机器代码分析 2020 年 6 月 3 日
- Delphi 10.4 的期待和不足 2020 年 5 月 29 日
- CPP各个操作系统和平台的宏定义 2018 年 3 月 14 日
- 跨平台的,在FMX中读取ICON文件的每一帧到Bitmap 2017 年 4 月 19 日
- 关闭掉新版Delphi的几个固定导出函数(__dbk_fcall_wrapper,dbkFCallWrapperAddr,TMethodImplementationIntercept) 2017 年 4 月 7 日
- FireMonkey在使用GDIPlus放大图像的Bug的修复 2017 年 2 月 24 日
- FireMonkey GIF处理的更新 2016 年 12 月 7 日
- FireMonkey跨平台的GIF解决方案 2016 年 12 月 2 日
- VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数 2016 年 2 月 17 日
- Cocos2d-x程序Windows下VC中文乱码的解决 2014 年 9 月 16 日
- Delphi结构体的扩展,可以自动初始化,反初始化,自定义拷贝函数. 2014 年 9 月 4 日
- HTML解析器更新 2014 年 6 月 18 日
分类目录
文章归档
链接表
近期评论
- tiktok发表在《Delphi循环移位操作》
- tiktok发表在《FireMonkey在使用GDIPlus放大图像的Bug的修复》
- tiktok发表在《Delphi写ShellCode获取Kernel32.DLL的地址.》
- tiktok发表在《跨平台的Html解析代码,甩掉包袱的选择》
- tiktok发表在《Delphi2010的RTTI增强》
- tiktok发表在《Android的路径信息》
- tik tok发表在《Delphi读取Android设备联系人.DelphiXE6中编译通过》
- tik tok发表在《给Delphi的工具条按钮添加BTNS_WHOLEDROPDOWN风格》
- tik tok发表在《跨平台的,在FMX中读取ICON文件的每一帧到Bitmap》
- tik tok发表在《Delphi2007以后编译器进步的简单测试》
作者归档:admin
Managed Record的使用一则
其实Managed Record有很多方便使用的场景。
比如下面的就是把TStringBuilder由Class改成了Managed Record。好处就是不再需要释放了。
[code language="Delphi"]
{
Managed Record版本的StringBuilder[......]
Delphi Managed Record的一个不方便的地方
type
TMyRecord = record
Value: Integer;
class operator Initialize(out Dest: TMyRecord);
class operator Finalize(var Dest: TMyRecord)[......]
Delphi10.4托管记录(Managed Record)产生的机器代码分析
只分析了Delphi Windows平台X86,X64上的代码,ARM平台和Linux平台基于是LLVM编译器的,没有分析。
Delphi 10.4
[code language="delphi"]
type
TMyRecord = record
Value: Intege[......]
Delphi 10.4 的期待和不足
Delphi10.4发布在即,看了许多特性宣传,最值得期待的就是托管记录。
最开始Delphi的结构体支持操作符重载,就很兴奋,想自己封装算法库,自己封装智能指针。
比如自己实现string,自己实现BigInt之类的。结果发现record虽然支持了操作符重载,但是不能自动初始化和反初始化。导致[......]
CPP各个操作系统和平台的宏定义
#if TARGET_OS_MAC
#if TARGET_OS_IPHONE
#if TARGET_IPHONE_SIMULATOR
#if TARGET_OS_EMBEDDED
#ifdef __ANDROID__
#if defi[......]
跨平台的,在FMX中读取ICON文件的每一帧到Bitmap
昨天在使用FreeImage的时候发现FreeImage对ICON的处理有问题,32位的帧读出来的背景居然是黑的。我猜应该是32位没有And的Mask数据。而它按照24位以下的处理方式把Alpha值填成255了。
只能自己动手写代码,也不复杂,算上把Windows单元抽出来声明的结构体,也就3[......]
关闭掉新版Delphi的几个固定导出函数(__dbk_fcall_wrapper,dbkFCallWrapperAddr,TMethodImplementationIntercept)
不知道从什么时候起Delphi编译的PE文件总是三个固定的导出函数。
一方面有强迫症的同学们会不爽,另一方面其实是不安全的。
这三个函数是:__dbk_fcall_wrapper,dbkFCallWrapperAddr,TMethodImplementationIntercept[......]
FireMonkey在使用GDIPlus放大图像的Bug的修复
Delphi10.2中FireMonkey中GDIPlus放大图片的Bug,不知道从哪个版本开始的,还是一直都这样。
新建一个FireMonkey工程,窗口上放一个Image控件,WrapMode设置为Stretch,表示随控件大小缩放。指定一张小图。
默认使用D2D的时候放大没问题[......]
FireMonkey GIF处理的更新
盒子上人才济济,很快就有兄弟发现在Android中有问题。
经过调试,发现Android中TCanvas.DrawBitmap对透明处理跟Windows不太一样,而是把透明部分也覆盖上去了,于是自己处理了一下帧的叠加,自己复制Bitmap的Scanline颜色,跳过透明即可。
2017.[......]
FireMonkey跨平台的GIF解决方案
用FireMonkey的同学们一定知道FireMonkey对GIF动画的支持不是太好,只有静态的。
网上已有的解决方案就是先手动预处理GIF文件分割成多个单张,然后放到BitmapList中,缺点是要手动处理,而且帧速率也麻烦。因为项目中要实现了一个GIF的格式处理,代码整理了一下,嫁接到Fi[......]
VC版本的MakeObjectInstance把WNDPROC映射到类的成员函数
这段时间用VC封装Windows类库,没有MakeObjectInstance处理窗口消息确实不爽,又不想使用MFC的消息映射,这玩意的效率和美观只能呵呵。
至于MakeObjectInstance是什么,Delphi转过来的同学必然很了解这个方便的功能,就是动态构造一个函数把普通函数转到一个[......]
Cocos2d-x程序Windows下VC中文乱码的解决
Cocos2d-x默认字符串常量编码都是UTF8的,而Windows中的VC默认都是跟系统相同,比如简体Windows是GB2312或者GBK.繁体就是BIG5编码.
而我们大多数中国人用VC编译出来的字符串常量也就是GBK编码的字符串.
在Cocos2d-x界面上绘制的时候它是不知道的,只会认[......]
Delphi结构体的扩展,可以自动初始化,反初始化,自定义拷贝函数.
恭贺Delphi XE7诞生,Delphi XE7在编译器内部集成了我之前所实现的动态数组扩展.http://www.raysoftware.cn/?p=278
现在有一个更悠久的历史需求,在QC的Delphi板块上置顶了好多年.官方一直没有实现.
http://qc.embarcadero.c[......]
HTML解析器更新
增加了兼容性.
对于非标准的HTML做法,Tag中的符号没有转义做了兼容.
HtmlParser
或者
http://code.google.com/p/delphi-html-parser/
共享一个之前封装的多进程共享内存的MemoryStream
具体用处呢,有很多,比如多进程浏览器共享Cookie啦,多个进程传送点数据啦.
[code language="delphi"]
{
共享内存封装.
封装成了MemoryStream的形式.
用法如下:
var
ms : TShareMemStream;
ms :=[......]
Delphi读取Android设备联系人.DelphiXE6中编译通过
和某牛讨论Delphi读Android联系人.写了如下代码
[code language="delphi"]
uses
FMX.Helpers.Android,
Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewT[......]
Delphi Hook Library做了一点小更新
http://www.raysoftware.cn/?p=357
1.原来的HOOK库,当遇到函数先被别人HOOK了,会无视对方的钩子,造成函数出问题.
现在加入了处理,如果想要HOOK的函数先被别人HOOK了,那么就去HOOK对方的函数.
但是要记得UnHOOK的时候也最好在对方去掉HO[......]
Delphi循环移位操作
如果在X86计算机上很简单,直接内嵌汇编ror和rol指令就是循环移位.
但是如果在Android的平台上,asm关键字是无效的.
只能自己实现.
function ror(const Value: DWORD; ShiftValue: Byte): DWORD; overload;
b[......]
Delphi XE5开发Android程序使用自定义字体文件.
最近在做一个电子书阅读器的Android小程序来验证Delphi XE5的移动开发功能.
万事大吉,只欠根据字体文件(.ttf文件)切换阅读字体,通常Android系统只带三种以下字体.一般用Java/Eclipse开发的话比较简单,typeface的createFromAsset,createF[......]
Delphi移动平台上生存期自管理一些问题的避免
今天和Delphi高手刘麻子讨论了一下移动平台上生存期自管理容易导致的一些问题.有几点体会
在移动平台上Delphi的对象是生存期自管理的,这和早期版本和现有的PC版本有很大不同.
大部分时间我们原来的代码不会有问题.我们原来的手动释放代码在移动平台也不会有问题,因为TObject.Free[......]
跨平台的Html解析代码,甩掉包袱的选择
跨平台的Html解析代码
当时写了这个Html解析,可以跨Windows,MacOSX的平台.但是随着Delphi XE5的发布,发现这个代码在Android平台不能用了,因为Delphi在移动平台上的字符串字符索引下标变成0了,带来了很多问题.
于是把这个HTML解析器重写了一个版本,放弃对D[......]
关于DelphiXE5如何获取Android手机SIM卡串号
手机号不是存在SIM卡上的,SIM卡只有一个串号.
在运营商的服务器上有手机号和序号对应的一张表.所以你SIM卡办理遗失,运营商只要把新SIM卡的串号和你原来的手机号绑定即可.
获取手机号的唯一办法是收个短信,短信里面有你的手机号码.所以很多程序为了获取手机号会要求你注册时发短信,然后它给你[......]
Delphi新语法和ifthen的扩展联想.
看看Delphi重载了多少个ifthen函数.
Math单元
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload; inline;
functi[......]
Android的路径信息
刚好有个朋友问Android中怎么获取安装路径.
Delphi早就把IO相关的都提取到System.IoUtils单元中了.
路径操作就使用TPath的方法都很方便.
uses
System.IoUtils
TPath.GetTempPath//临时目录
TPath.GetCam[......]
XE5开发Android程序调用电话相关功能(短信息和电话)
其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.
1.短信息.很简单
方法a.不使用Intent而是直接发短信.
smsManager对应的Delphi代码应该是:
[code[......]