Delphi XE5开发Android程序使用自定义字体文件.

最近在做一个电子书阅读器的Android小程序来验证Delphi XE5的移动开发功能.
万事大吉,只欠根据字体文件(.ttf文件)切换阅读字体,通常Android系统只带三种以下字体.一般用Java/Eclipse开发的话比较简单,typeface的createFromAsset,createFromFile之类的很容易使用.
但是由于FireMonkey是跨平台的类库,必然不能和平台帮得太紧,所以提供了抽象的封装.
但是也许Delphi XE5是Android平台的第一个版本,有些地方难免有疏漏,FireMonkey的封装没有提供更换字体的功能.

但是我要实现的电子书阅读器换字体几乎是必[……]

继续阅读

发表在 Delphi, 未分类 | 标签为 , , , , | 171条评论

Delphi移动平台上生存期自管理一些问题的避免

今天和Delphi高手刘麻子讨论了一下移动平台上生存期自管理容易导致的一些问题.有几点体会

在移动平台上Delphi的对象是生存期自管理的,这和早期版本和现有的PC版本有很大不同.
大部分时间我们原来的代码不会有问题.我们原来的手动释放代码在移动平台也不会有问题,因为TObject.Free方法在移动平台上就是个摆设.

真正调用到对象的Destroy的只有编译器自动产生的代码.
一般有两种情况.
1. :=也就是赋值,会调用旧的变量内容的__ObjRelease减少引用计数,会调用新变量内容的__ObjAddRef增加引用计数.
2.当变量销毁时,如局部变量离开函数恢复栈的时候,如成[……]

继续阅读

发表在 Delphi, 未分类 | 197条评论

跨平台的Html解析代码,甩掉包袱的选择

跨平台的Html解析代码
当时写了这个Html解析,可以跨Windows,MacOSX的平台.但是随着Delphi XE5的发布,发现这个代码在Android平台不能用了,因为Delphi在移动平台上的字符串字符索引下标变成0了,带来了很多问题.
于是把这个HTML解析器重写了一个版本,放弃对Delphi XE3以下版本的支持,轻装上阵.
因为也有传说易博龙会在以后某个时期放弃移动版本Delphi对指针的支持,所以这次重写的新版本里面完全去掉了指针的语法.
对外的接口基本没变,所以旧代码可以方便迁移上来.新的单元名叫HtmlParser_XE3UP.pas,很直接吧.同时如果是广大旧版本Del[……]

继续阅读

发表在 Delphi, 未分类 | 183条评论

关于DelphiXE5如何获取Android手机SIM卡串号

手机号不是存在SIM卡上的,SIM卡只有一个串号.
在运营商的服务器上有手机号和序号对应的一张表.所以你SIM卡办理遗失,运营商只要把新SIM卡的串号和你原来的手机号绑定即可.

获取手机号的唯一办法是收个短信,短信里面有你的手机号码.所以很多程序为了获取手机号会要求你注册时发短信,然后它给你回个短信.[……]

继续阅读

发表在 Delphi, 未分类 | 163条评论

Delphi新语法和ifthen的扩展联想.

看看Delphi重载了多少个ifthen函数.
Math单元
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload; inline;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload; inline;
function IfThen(AValue: Boolean; const ATrue: UInt64; c[……]

继续阅读

发表在 Delphi, 未分类 | 203条评论

Android的路径信息

刚好有个朋友问Android中怎么获取安装路径.
Delphi早就把IO相关的都提取到System.IoUtils单元中了.

路径操作就使用TPath的方法都很方便.
uses
System.IoUtils
TPath.GetTempPath//临时目录
TPath.GetCameraPath//照相机目录(照片/录像)
TPath.GetMusicPath//音乐目录
TPath.GetDownloadsPath//下载目录
……
如果使用TPath类的静态方法那么代码就是跨平台的,在Windows,Mac,iOS,Android上都能用.
如果仅仅对Android的操作也可以[……]

继续阅读

发表在 Delphi, 未分类 | 162条评论

XE5开发Android程序调用电话相关功能(短信息和电话)

其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍.

1.短信息.很简单

方法a.不使用Intent而是直接发短信.
smsManager对应的Delphi代码应该是:

至于双卡双待用哪个卡来发送这些我没有详细研究,有兴趣的朋友可以研究下.
方法b.使用Intent启动系统的短信程序:
我猜以后这种方式会和电话一样会合并到TPlatformServices中.

2.电话

这段代码适用于iOS和Android.
Android平台上实际上电话的封装就是系统的Intent方式调用.[……]

继续阅读

发表在 Delphi, 未分类 | 204条评论

Delphi XE5中移动平台的字符串要注意的事项

今天把项目往移动平台移植,遇到指针错误,无效地址访问.
XE5的单步调试速度太让人崩溃了.
发现错误出在一个字符串的循环上,我是for i:= 1 to length(字符串变量) do
结果报错.
看了一下XE5的DateType的帮助说明:
Note: All the string types described in this topic are supported by the Delphi desktop compilers (DCC32, DCC64, and DCCOSX).
However, the Delphi mobile compilers (DCCIOS32 and D[……]

继续阅读

发表在 Delphi, 未分类 | 128条评论

Delphi XE5的体验

XE5发布了.
在家里装了3台计算机体验,发现了一些问题.
1.XX工具报错,发现是BDS.EXE大小校验失败.从别处弄一个覆盖然后XX成功.
2.某绿色版可以用,但是因为是绿色版,没有自动安装JDK和AndroidSDK,要手动配置在SDK Manager中添加SDK的路径.否则不能开发Android移动程序
3.有一台计算的项目中Target中看不到设备,手机插拔确认了N次,USB调试也是开着的.但是就是看不到.后来用任务管理器发现是某公司(不说具体名字)的一款产品自带了ADB.EXE.而且这个ADB.exe一直在运行,杀死马上自动启动.所以端口一直被占着.卸载该产品,那么Android自[……]

继续阅读

发表在 Delphi, 未分类 | 201条评论

Delphi XE5的移动项目中对象已经是生存期自管理的了

Delphi XE5的移动项目中对象已经是生存期自管理的了
TTest = class
protected
destructor Destroy; override;

public
procedure BeforeDestruction; override;

end;

procedure TTest.BeforeDestruction;
begin
inherited;
ShowMessage(‘TTest.BeforeDestruction’);
end;

destructor TTest.Destroy;
begin
ShowMessag[……]

继续阅读

发表在 Delphi, 未分类 | 169条评论