开发工具:
文件大小: 10mb
下载次数: 0
上传时间: 2019-07-14
详细说明:Delphi陷阱大全.pdf目前很少有 Delphi相关的新书上架。以前出的书大都是讲解入门知识,要
么罗列组件的使用方法。深入探讨语言底层的很少见,希望这本书能够提供一些
补充吧。
软件开发最重妟的就是代码复用,我们来看看 Delphi为我们提供了多少官
方代码:
版本
行数
Delphi4
25万行
Delphi7
>80万行
Delphi2007
>100万行
DelphiXE2
>200万行
Lazarus 1.0
>180万行(包括收集的些第三方包)
这样大量的代码,其BUG量却很低,冂见 Delphi是一款高质量的软件。加
上各种高质量第三方代码,可复川代码库可达到几而万甚至千万行级代码。为软
件开发商节省了大量重复开发时间成本
本书内容以 Delphi7为蓝本,以最新的 Delphi版本作为补充,解释一些BUG
陷阱,并讲解一些非陷阱的知识点。由于版本差异,书里面的例子不一定全部正
确,请自行调试。 Delphi的陷阱主要来自:
1 Delphi自己版本的变化,在老的版木的意义和新的版木可能不同
2.一些入门书籍没冇深入探讨的讲解;
3.程序员没有认真阅读联机帮助手册;
4安装了版本不一致的第三方软件:
5网终上的资料很多没有注明算法或者代码适用的版本;
声明:本书起《 Delphi陷阱大全》这个名字,并非哗众取宠,也不是表小
Delph这个软件有多少BUG,而是我们常常看到的书籍,没有深入探讨一些问
题,导致我们许多学员学习到一些错误的知识。作者水平有限,写出这些文字,
希望大家能够共同进步,也欢迎 Dclphi的爱好者、程序员提出不同意见,促进
Delph开发者共同提高。我的Ma:1565498246qcom
或加入QQ群:341766l1
目录表
1.辨析Pos和 Ansi Pos函数
2 ansiquotedstr和 quotedstr区别
3. AllocHem和 GetMem函数区别
4对比, AnsiCompare FileName, samefilename,比较两个文件名
5对比 Ansilastchar,得到字符串最后一个宁符(没有非MBCS的版本)
6对比 Ansilowercase filename, LowerCase函数,转换到小写。
7对比, StrNextchat; nextchar得到下个字符指针,支持MBCS
8对比, Byte Type, StrByteType,查找字符串某个位置字符是什么字节类型
9对比 Byte To( harnden, ByteToCharLen,防止半个汉字,进行探测,用來截取字符串
10.对比, chartobyteindex, CharTo Byteler,也可以用来探测半个字符情况
1对比, charlength, strcharlength探测某个位置字符是单字节字符,还是双字节字符
12对比, streit, strbleft, ansileftstr区别和联系,取字符串左边若干字符
13对比, ansi Contains, AnsiContainstex是合字符串包含在另外一个字符串里面
14对比 AnsiEndsStr,一个字符串是否和另外一个字符串的尾巴相同,区分大小写,15对
比,^ nsi contains str,∧ nsicontains text和∧ nsiIndex str,^ nsilndex text,探测字符串在另外一个
符串中位置
16对比, Ansilndex str, Ansicontainsstr, Ansimatchstr:匹配字符串
17.对比, AnsimatchStr, Ansimatch Text,在字符数组屮,匹配,查找字符申
18对比, ansiMidstr, MidSt, midSt,取字符串中间串
19对比, AnsiReplace str, AnsiReplace Text, StringReplace替换字符串
20.字符(不是字节,反序算法, AnsiReversestring
21.对比, AnsiRightStr, RightBStr, Rightsin取字符串右边若十字符串
22.对比, Ansistartsstr, AnsiStarts text,Pos函数,取得字符串在是否是另外一个字符串中的廾始
23 Extractstrings函数陷阱
24应该用 quotedstr还是 ansiQuotedstr
25 Compare Text和 AnsiCompareStr函数
26.With语句陷阱
7TFom,TFom2陷阱
28 TDataModule陷阱
29. Lower Case Fnl AnsiLower Case
30 Uppercase FI Ansi UpperCase
31同样, AnsiUpperCaseFileName和 uppercase进行对比
32 Inttostr陷阱
33向后兼容函数或者过程列表
34Cci函数
5Foor函数陷阱
36BCD数据表示范围
37DⅠMOD过程
38Ceil和INT数区别
38Frac和INT函数
39 TStringList陷阱
40. ompare value函数比较浮点数
41. TimeStamp和Msqd的 Time Stamp的不同点
42 Hours Between /A Hour Span
43.字符串转换成 Boolean的自定义,如果不小心使用可能导致错误
44. Delphi肀的序列化与反序列化
45 Delphi的哈希表
46.另外一个第三方的快速哈希算法
47.XE中动态数组的错误忽略功能
48. Delph; Lazarus数组属性
49 Delphi同单元的类保护域的访问
50For循坏变量是否不可变
51Case语句是否可以用字符串作为判定变量
52 Delph程序的5种单元结构
53过程、函数、变量、属性之间的区分
54数组型属性和数组的不同点。
55默认数组属性和数组
56无法转换的 Tlist. last指针
57没有类型的参数
58 writeln不能支持的变量类型
59没有初始化的动态数组,例程
60.for循环变量是可以使用复杂变量?
61. Delphi的 Class, Object, Class(tobject别
62 Delphi2007新的类型
63 Delphi不支持的指针操
64 Unicode引起的问题
辨析Pos和 Ansipos函数
许多资料,包括万一的博客等都说 delphi的pos函数可以用在汉字的查找
这是叨显不对的,官方资料help里面叨显说了,pos函数没有按本地字符集
进行査找,很可能导致査找错误。如果不是 ascii字符集的字符串,必须用
antIpas函数
<< Delphi函数大全>>也错了。至少是不完整的描述。
所谓本地宇符集就是MBCS(主要针对业洲的多字节字符集编码)
procedure TForm1. ButtonlClick(Sender TObject)
var s: Ansistring
w: Widestring
begin
:=’bAc';
memo1. lines. add(inttostr(Pos ('A', s)))
memol. lines. add(inttostr(Pos (A', s)))
w. bac
memo1. lines. add (inttostr(pos (A, s)))
memo1. lines. add (inttostr(Pos ('A, w))
memo1. lines. add (inttostr(ansiPos (A, w)))
memo1. lines. add(inttostr(ansiPos (A', w)))
end
结果是
000
也就是说当原始数据是 ansistring并且包含的数据可能有MCS的字符的时候,
应该使用
anglOs
函数。
同理,其他类似函数有MBCS版本,都应该使用Ans版本。而如果是 Widestring,
或者确定原始数据里面不包含MBCS字符,就可以使用非Ansi版本。
但以上程序在 Delphi2010以后版本的结果是
0
0000
因为 delphi2010以后,默认的在ID输入的符串会尽量向 Widechar转换。
2. ansiquotedstr和 quotedstr区别
ansiquotedstr支持MBCS
quotedstr不支持MBCS
但是山于汉字在 windows上只有$#80$40开始,而单引号才$#27,所以没有冲突,
可以认为二者一样,但使用其他国家语言就不一定正确。
3. Allochem和 GetMem数区别
A1 LoMem将会分配内存,并初始化为0释放使用 Freelem
GetMem不会将标个字节初始化为#0,释放也用 freeMem
但是最好是用New, Dispose函数
但是New只能用在 REcord等大小固定的数据结构。
4.对比, Ans i comparefilename, same ilename,比较两个文件名
AnsiCompareFileName比较两个文件名
amefilename数和 ansicomparefilename柑似,但前者相同返回true,不同
返回叫 false,
后者相同返冋0,不同返回有2种情况
5.对比 Ansilast char,得到字符串最后一个字符(没有非ⅦBCS的版本)
Ansilast Char得到字符串最后一个字符(不一定是字节,是MBCS的字符)
单字节字符集没有必要再弄个函数。
6.对比 Ansilowercasefilename, Lower case函数,转换刭小
Ansilowercasefilename得到文件名字的小写形式,也支持汉字(因为汉字的
半可能和大写重叠,被错误转换,比如侭字第2字节是字符B相同的)
self. caption:= AnsilonercasefileName(A侭’)
AnsiLowercaseFileName( ABB')
得到的结果是
侭abb
self. caption:= Ansilower case(A)+’+ Lower case(A供’)
得到的结果是
但a俠
明显是错误的
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.