找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
楼主: mmqqll

[软硬件讨论] 从解剖一只麻雀开始PALM深入编程

[复制链接]
发表于 2009-4-8 18:18 | 显示全部楼层
牛人一个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 20:01 | 显示全部楼层
7、OK,走到这一步,创建字库的工作就已经完成了。
, p0 ]  \) k# |2 O, S
* X5 z3 a" O! S; F. n7 l
% B* z8 I: Q; |) ~# ?- c$ E: a6 Y. a! t4 d/ V) S5 f+ z! n( F* j

4 Z. b0 g7 E( s90%。4 x$ A  p/ q; C- A
俗话说,行百里路者半九十,好吧,我们就开始创建字库的另一半工作吧。( |. f; R9 K" L) i3 ]- N" s
如何把我们创建的字库应用到程序里?直接关联,显然不行!这里我要小小地谴责一下SugarMemo的作者,您老人家在烧禾花雀的时候干嘛非把毛给褪掉,害得我吃了半天还以为是红烧乳鸽呢!没办法,我们只好对已经创建的文本字库进行褪毛工作吧。7 m. V. _  y& p: R9 B! e
回到CodeWarrior编程环境,仔细检查一下SugarFont.r这个字库资源文件,还好,毛没有褪得太干净,有些语句还认识。什么?您不认识,怎么可能哪,仔细看看:
1 f( z* |8 `- i6 I7 v( M  _$ H! G$ {data 'NFNT' (12345), ~% T6 }4 ^* R8 r$ k& i
...
" `3 o* U  s: c& W9 ^* L" I9 Idata 'NFNT' (12346). h# g! Y$ [! L$ B  A. q- ?! r" l
...7 S; `1 z& g' q" P  p& \, J
data 'NFNT' (12347)
8 q3 C; o4 |( G! Q& v8 W7 f...
% R/ ~! W2 L: r8 k1 x- s6 Bdata 'NFNT' (12348)
' x% ~0 p9 a- i/ d; k$ o...
7 x# [: n4 _! J$ e# Ndata中文就是数据的意思,'NFNT'代表的是字库的识别码,12345,12346,12347,12348自然就是字库的ID标识喽。浏览整个文件,只发现了四个ID标识,OK,说明SugarMemo创建了四种自定义字体,好吧,全都把他们换掉,慢着,说不定作者会生气的,那就换掉三种吧,这下应该没问题了吧。
  Z' \2 e0 c5 x, \2 r2 {
% ?/ F: \$ I3 |8 P& V' i5 N[ 本帖最后由 mmqqll 于 2009-4-8 21:47 编辑 ]
35.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 20:22 | 显示全部楼层
8、一个是字节数组,一个是文本字库,how to translate?
6 Y. Z" Z% A6 e没问题,进入到CodeWarrior的安装目录:C:\Program Files\Metrowerks\CodeWarrior\CW for Palm OS Tools\PilRC,您可以看到PilRC.EXE这样一个文件,对了,就是它,它是一个DOS控制台程序,所以没有图标。什么是DOS控制台程序,太简单了,DOS下运行的程序都是DOS控制台程序。什么?不会用,没关系,凑合着用吧,实在不会用,那我做一个批处理文件,这样您就不用费心了。什么?批处理文件怎么用?生气了,拒绝回答!8 E8 D) E, ?9 \8 P
由于PilRC.EXE这个文件在palm编程时经常会用到,建议把它关联到系统路径下面:
( E" [: z" X/ z8 [. ~. a打开系统属性--〉高级-〉环境变量表--〉path,把PilRC.EXE所在的目录拷贝到它下面,记住,用分号分隔啊。7 j/ @9 L9 _, i
36.JPG % E% M: m" b+ W8 c" B! h" D

  M1 R) \6 I7 R( s) r批处理文件在这下载:

a.bat

30 Bytes, 下载次数: 229

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 21:06 | 显示全部楼层
9、再次回到CodeWarrior编程环境,打开字库资源文件的头文件SugarFontRsc.h,真有意思,四种字体的定义在这里都看到了,看我猜得对不对:
% w$ B0 s& p3 G- J. d#define PhoneticSmallFont         12345      --〉小音标字库5 ~) K& h7 [- r* y
#define PhoneticLargeFont         12346      --〉中音标字库6 o; Y9 Z! E7 I  `6 k$ h
#define PhoneticHugeFont        12347      --〉大音标字库$ B- \  l8 y, h
#define OS5_16_Font         12348      --〉显示字库7 N/ o& j6 Y) Y4 N- |; P7 q, D
我们的目标:替换前三种字库,
" C0 r$ a: t6 l: m9 T小音标字库--〉精美小音标字库
. l' p; w) b7 n  i/ e中音标字库--〉精美大音标字库0 ^$ B6 w  r7 Q, i" A# ]' f+ z
大音标字库--〉精美系统大字体字库! H0 O5 U6 I! [& @4 O. S7 L6 z
OK,先替换大音标字库成为系统大字体字库,它的ID标识是12347,定义的替换宏是PhoneticHugeFont。什么是宏?举个简单的例子,您的身份证号码和您的名字,哪个更容易让别人记住?对了,当然是名字了,ID好比身份证号码,宏就相当于它的名字,如果觉得这样还不确切,那就把宏当成外号吧,一般叫名字没有反应的人,叫他的外号绝对有反应。8 e+ v) r/ y5 p! r& @7 m* U
好的,打开记事本,创建一个文件,名字随意,后缀一定是.rcp,我给它起的名字是FontTest001.rcp,它代表的是文本资源文件,内容如下:5 T, l7 U0 \7 \. x) ^
#include "SugarFontRsc.h"
0 e9 o8 c: ]3 @# ]  D6 G
0 V% i2 ]' X& K+ W7 mFONTFAMILY ID PhoneticHugeFont FONTID 195 LOCALE "enUS"
7 q+ V" Y1 i1 jBEGIN
2 ]* V4 u) y. D, @$ c+ M  T   FONT "Eng-329-CAI97848×56 low.txt" DENSITY 72& r+ {2 P4 e. B- q( M
   FONT "Eng-329-CAI97848×56 high.txt" DENSITY 144
# D, _; }' f8 \6 MEND9 `' H" A2 i6 M/ Q

0 k2 z" l3 }) x: x. }9 [7 u& Q: t' s看懂了吗?不懂没关系,我在这慢慢解释,文件第一行是关联字库资源的头文件,由于PhoneticHugeFont 是在它里面被定义的,所以这一行一定是要的。第三行是创建一个字库家庭(老外有时候真幽默,起Font Family这个名字真是形象表达了同源字库集合的概念,赞一个),这个家庭成员都是为PhoneticHugeFont服务的,字库家庭的ID标识是195,为什么是195呢,问SugarMemo作者吧,或者您在SugarMemo.h中搜索一下,可以找到这么一句话:
& |) V4 W% l1 c. D! y! M#define PhoneticHugeFont        ((FontID)195)
8 W/ b/ ?7 Z' d当然了它是说英语的了"enUS"。Begin和End之间是字库家庭成员,高分辨率字体和低分辨率字体,分别以72和144来区别,为什么呢?我也不知道,死记住就行了。跟我一起念100遍:所有的高分字体144,所有的低分字体72。
3 h, M( @+ a  f& m1 R9 a% v$ Y+ z% y$ Y7 s/ {7 I: e! @9 B
[ 本帖最后由 mmqqll 于 2009-4-8 21:49 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 21:31 | 显示全部楼层
10、把批处理文件,两个文本字库文件(高分辨率,低分辨率),文本资源文件统统拷贝到Palm WorkSpace\SugarMemo 0.59Beta Src\Src目录下面。为什么?因为字库资源的头文件在这个目录下面呀。
/ |) d# d# m# ?  c0 f; r7 g运行批处理文件如下图所示,会得到字库的中间目标文件nfnt303b.bin。
37.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 21:43 | 显示全部楼层
11、用ultraEdit-32把上面生成的字库资源中间目标文件打开。Ultraedit是什么?I服了You,这可是解剖程序的必备工具之一呀,给您个链接:http://nj.onlinedown.net/soft/7752.htm* d7 J  Q7 a  ^) u( c
哈哈,怎么这么像呢,SugarFont.r中所定义的字节数组内容是不是就是字库资源中间目标文件呢?不管它,用这个文件把字节数组内容替换掉。
6 @% A5 W5 i$ ^3 F9 @+ f: L0 g8 K7 E2 B, c# q) R
[ 本帖最后由 mmqqll 于 2009-4-9 00:14 编辑 ]
38.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 22:03 | 显示全部楼层
12、如何替换SugarMemo.r文件中字节数组的内容呢?
" J3 k% t/ Q* |2 s1 p- y首先先找到要替换的字库ID标识所在的数组位置,在这里,要替换的字库ID是1237,找到后,用两种方法之一来替换:
: C9 u. t7 i) {* k- \5 r方法一:字库中间目标文件大小是22274个字节,算您5秒钟替换一个字节,您总共需要花费111370秒,也就是说,您不吃不喝,要用一天半的时间;
' u: _& |9 p7 b6 y# ]方法二:本人不才,编了一个小程序生成字节数组,一秒钟搞定,然后使用拷贝粘贴把字节数组替换掉;8 D% }5 ?2 Z, [" e
生成字节数组的小程序连同VB源代码一同献上,有兴趣的胖友可以自己研究改进: Font Bin to Array.zip (7.13 KB, 下载次数: 245) 7 y7 O6 v; W: Z  l- q4 Q/ B

) Q5 A. J* U. M; R( r# J[ 本帖最后由 mmqqll 于 2009-4-8 23:08 编辑 ]
39.JPG
回复 支持 反对

使用道具 举报

发表于 2009-4-8 22:07 | 显示全部楼层
踩踩。正准备入手小胖。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 23:03 | 显示全部楼层
13、好了,系统字库已经放进去了,接下来,我们再制作两套音标字库。对,没错,自己制作,毛主席教导我们,自己动手,丰衣足食。
1 x5 g! \9 N$ R2 \首先,要知道Sugarmemo里的音标字符的对应位置,这个工作已经有达人做好了,不需要我们再花精力了: SugarMemo音标对照表.pdf (42.66 KB, 下载次数: 294)
) I- x6 q9 ^) j- d* D1 F; F打开PixelFont,设置好点阵字体大小,这里,大音标字库我选择32x32点阵,小音标字库我选择16x22点阵。选择一个精美的windows字库,然后开始制作。怎么?不会做?参看下面例图:. G* G; h5 w( g* a0 L; [
8 h- M" j: j. B- v( \8 Q- a
[ 本帖最后由 mmqqll 于 2009-4-8 23:07 编辑 ]
40.JPG
41.JPG
42.JPG
43.JPG
44.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-8 23:27 | 显示全部楼层
14、到这一步,音标字库已经做好了,同样过程,将它们导入到SugarMemo程序中。) R, t* I4 k) G( S/ [
接下来,激动人心的时刻到了,编译运行,察看结果:诸位胖友,屏住呼吸,仔细察看新旧两种SugarMemo程序显示界面的差异:
2 _, g' }% z& ]! N注意,在SugarMemo字体设置窗口里,单词选择大音标字体,音标选择小音标或中音标字体。
5 K( m# x2 W) }5 M" }
- M) _4 z' A2 D2 H. V[ 本帖最后由 mmqqll 于 2009-4-8 23:47 编辑 ]
45.JPG
46.JPG
回复 支持 反对

使用道具 举报

发表于 2009-4-8 23:32 | 显示全部楼层
彻底看不懂……
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-9 00:13 | 显示全部楼层
对不起,忘了交待一点,在改写字库资源文件的时候,要将字库识别码'NFNT'改写为'nfnt'。为什么呢?'NFNT'代表的是低分辨率字体,'nfnt'代表的是字体集合,它包含低分辨率和高分辨率两种字体。
47.JPG
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-9 09:44 | 显示全部楼层
好了,到这一步,SugarMemo字体改造大餐就奉送完毕了,希望诸位发烧友能够喜欢。大家在消化过程中遇到什么问题,希望能够积极回帖反映,本人本着有问不一定必答的精神,与发烧友们一起享受palm编程的乐趣。
. a! ?# y; J+ x下一讲,我们开始享用第二道大餐:SugarMemo操作按钮及菜单改造大法。
回复 支持 反对

使用道具 举报

发表于 2009-4-9 17:11 | 显示全部楼层
哈哈,注个ID来顶
回复 支持 反对

使用道具 举报

发表于 2009-4-9 20:26 | 显示全部楼层
赞一个!!!  胖友的希望!
! y, I% T1 d7 P+ K; f7 p  S$ ?# H/ n9 ~1 y! q: z4 E9 n8 f7 A1 V; I( T
[3G坛,手机登陆吹友吧发帖]
回复 支持 反对

使用道具 举报

发表于 2009-4-9 20:41 | 显示全部楼层
楼主,我想要您的制作好的音标字库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-9 21:17 | 显示全部楼层
两套音标文本字库1 H- y  a8 k) [1 R$ R8 {
* f7 I# ^; F- E$ I6 ~  c
[ 本帖最后由 mmqqll 于 2009-4-9 23:16 编辑 ]

Phonetic 16×22 high.txt

21.62 KB, 下载次数: 205

很贵的,希望不要下载

Phonetic 16×22 low.txt

7.35 KB, 下载次数: 224

真地很贵,希望不要下载

Phonetic 32×32 high.txt

47.79 KB, 下载次数: 219

非常贵的,希望不要下载

Phonetic 32×32 low.txt

14.26 KB, 下载次数: 217

真地非常贵,希望不要下载

nfnt3039.bin

3 KB, 下载次数: 225

nfnt303a.bin

6.87 KB, 下载次数: 228

回复 支持 反对

使用道具 举报

发表于 2009-4-9 22:16 | 显示全部楼层
出书吧。现在市场上的书太老啦。实在没兴趣看。楼主出书,本人一定买
回复 支持 反对

使用道具 举报

发表于 2009-4-10 00:01 | 显示全部楼层
lz真是强人呀。一直想学习来着。终于有机会了。可惜最近比较忙。留个记号以后慢慢学。
回复 支持 反对

使用道具 举报

发表于 2009-4-10 10:15 | 显示全部楼层

强烈顶一下

我们大力支持一下,这个真的是好东西,真得很好玩哦
回复 支持 反对

使用道具 举报

发表于 2009-4-10 20:24 | 显示全部楼层
大开眼界啊。。。。。。。。。!!!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-10 20:31 | 显示全部楼层
希望有根据解剖大餐做出自己中意字库的胖友在此留个脚印,谈谈体会。没有搞出来的朋友也别灰心,回帖反映一下遇到哪些问题,可能的话,一起探讨一下。是否因为本人讲述的不够生动直观,若是的话,本人一定在奉送下一道正餐的时候加以改进。
回复 支持 反对

使用道具 举报

发表于 2009-4-10 22:09 | 显示全部楼层
顶楼主,真的要出书啊,比书店的palm书生动多了
回复 支持 反对

使用道具 举报

发表于 2009-4-10 22:32 | 显示全部楼层
强帖被插了好多队。
回复 支持 反对

使用道具 举报

发表于 2009-4-11 00:08 | 显示全部楼层
哈哈,谢谢楼主分享。有没有发现每次Sugarmemo重启后用UNINSTALL MANAGER把 (S) SGMM ID:0 删掉,下次就会正常。到底是为啥?我清明节也在婺源看油菜花
回复 支持 反对

使用道具 举报

发表于 2009-4-11 00:12 | 显示全部楼层
厉害啊LZ
回复 支持 反对

使用道具 举报

发表于 2009-4-11 00:18 | 显示全部楼层
看不懂! 顶。。。。lz 呵呵。。。
回复 支持 反对

使用道具 举报

发表于 2009-4-11 00:44 | 显示全部楼层
palm os已经快被淘汰了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-11 10:38 | 显示全部楼层
原帖由 antivirus 于 2009-4-11 00:08 发表 & r4 e3 n  [9 ^5 G  ]# L1 l
哈哈,谢谢楼主分享。有没有发现每次Sugarmemo重启后用UNINSTALL MANAGER把 (S) SGMM ID:0 删掉,下次就会正常。到底是为啥?我清明节也在婺源看油菜花

; W4 ~8 h  O: @% P哈,瞧我这大脑子,说着说着就把正事忘了。根据我的分析,造成Sugarmemo重启的原因可能是它本身的音标字库不太完整的原因(如不正确,欢迎胖友达人拍砖),使用完整音标字库替换后,这个现象应该可以解决。这个软件相当不错,再次赞作者一个。% \* ]8 ^! V$ Y3 K$ s
- ~0 N7 w1 p% O1 ~* \5 s  b
[ 本帖最后由 mmqqll 于 2009-4-11 11:01 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-11 10:48 | 显示全部楼层
原帖由 xiaozhunai 于 2009-4-11 00:44 发表   @% H# g1 D- k( X# S  M0 l) P
palm os已经快被淘汰了吧
$ }4 W  f# w4 {* C, f, H" a
严重同意!但有一点我感到很困惑,现在手机硬件软件配置越来越强,但是给发烧友提供的可玩空间却越来越小。而且现在的手机系统也趋于封闭,想在上面搞个编程体验还要申请许可证(操,鄙视下塞班),没劲!
回复 支持 反对

使用道具 举报

发表于 2009-4-11 15:42 | 显示全部楼层
原帖由 mmqqll 于 2009-4-11 10:48 发表
) I, ]8 x5 M6 v! `# Z0 W, ~7 @: q/ l  m9 L! c* r  e  C
严重同意!但有一点我感到很困惑,现在手机硬件软件配置越来越强,但是给发烧友提供的可玩空间却越来越小。而且现在的手机系统也趋于封闭,想在上面搞个编程体验还要申请许可证(操,鄙视下塞班),没劲!

  U  W5 @, `) l1 Q1 G! c  J4 }9 s; ~0 Q8 {! n
顶此句
回复 支持 反对

使用道具 举报

发表于 2009-4-11 22:35 | 显示全部楼层
这种帖子太少见了
回复 支持 反对

使用道具 举报

发表于 2009-4-11 23:28 | 显示全部楼层
strong strong
回复 支持 反对

使用道具 举报

发表于 2009-4-11 23:35 | 显示全部楼层
我也顶顶顶
# p, ^% i. c0 Q4 w$ T' }! V# B, l
+ s: B6 a# ^6 u' h, r佩服!
回复 支持 反对

使用道具 举报

发表于 2009-4-12 01:39 | 显示全部楼层
楼主真是有心人
  k; d; U9 x& V. E) P( o1 u1 _9 s# M( c0 W) j3 m这样的帖子早点看到就好了,呵呵# y2 G8 ?8 g' R) k9 f  N, a8 x2 D3 ^9 S5 O# v. |
希望palm pre出来时能尽快看到楼主相关文章
回复 支持 反对

使用道具 举报

发表于 2009-4-12 09:52 | 显示全部楼层
学习学习0 I$ R0 i5 W& r7 }" h+ m
呵呵
回复 支持 反对

使用道具 举报

发表于 2009-4-12 11:30 | 显示全部楼层
留名,学习
回复 支持 反对

使用道具 举报

发表于 2009-4-12 15:28 | 显示全部楼层
上厕所不带纸你是------高手呀!:)1 顶顶更健康
回复 支持 反对

使用道具 举报

发表于 2009-4-12 15:40 | 显示全部楼层
:)1 顶顶更健康
回复 支持 反对

使用道具 举报

发表于 2009-4-12 21:48 | 显示全部楼层
顶楼主 高人!
/ D0 A9 [( K1 z1 q' k4 d
0 H! ^6 z/ ^' K/ J, c[3G坛,手机登陆吹友吧发帖]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2024-12-22 16:21 , Processed in 0.357265 second(s), 15 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表