Delphi 使用之函数

函数由一句或多句代码组成,可以实现某个特定的功能。使用函数可以使代码更加易读、易懂,加快编程速度及减少重复代码。过程与函数类似,过程与函数最重要的区别在于,过程没有返回值,而函数能有返回值。
 
 
本文整理自以下链接

http://blog.sina.com.cn/s/blog_40a8922201000py6.html

http://blog.163.com/jiandande3218@126/blog/static/74728469201132715251648/

 

PASCAL函数过程表

目录:
1、数学函数;
2、所有单元;
3、SYSTEM单元(不需要uses语句);
4、DOS单元;
5、CRT单元;
6、其他单元;
7、常用函数;
8、不常用函数;
9、退出方法

1、数学函数

求绝对值函数abs(x)
定义:function Abs(X): (Same type as parameter);
说明:X可以是整型,也可以是实型;返回值和X的类型一致例子:

var
r: Real;
i: Integer;
begin
r := Abs(-2.3); { 2.3 }
i := Abs(-157); { 157 }
end.

 

取整函数int(x)
定义:function Int(X: Real): Real; 注意:X是实型数,返回值也是实型的;返回的是X的整数部分,也就是说,X被截尾了(而不是四舍五入)例子:

var R: Real;
begin
R := Int(123.567); { 123.0 }
R := Int(-123.456); { -123.0 }
end.

 

截尾函数trunc(x)
定义:function Trunc(X: Real): Longint; 注意:X是实型表达式. Trunc 返回Longint型的X的整数部分例子:

begin
Writeln(1.4, ' becomes ', Trunc(1.4)); { 1 }
Writeln(1.5, ' becomes ', Trunc(1.5)); { 1 }
Writeln(-1.4, 'becomes ', Trunc(-1.4)); { -1 }
Writeln(-1.5, 'becomes ', Trunc(-1.5)); { -1 }
end.

 

四舍五入函数round(x)
定义:function Round(X: Real): Longint; 注意:X是实型表达式. Round 返回Longint型的X的四舍五入值.如果返回值超出了Longint的表示范围,则出错. 例子:

begin
Writeln(1.4, ' rounds to ', Round(1.4)); { 1 }
Writeln(1.5, ' rounds to ', Round(1.5)); { 2 }
Writeln(-1.4, 'rounds to ', Round(-1.4));{ -1 }
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 }
end.

 

取小数函数frac(x)
定义:function Frac(X: Real): Real; 注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说,Frac(X) = X - Int(_X). 例子:

var
R: Real;
begin
R := Frac(123.456); { 0.456 }
R := Frac(-123.456); { -0.456 }
end.

 

求平方根函数sqrt(x)和平方函数sqr(x)
定义:
平方根:function Sqrt(X: Real): Real;
注意:X 是实型表达式. 返回实型的X的平方根.

平方:function Sqr(X): (Same type as parameter);
注意:X 是实型或整型表达式.返回值的类型和X的类型一致,大小是X的平方,即X*X.
例子:

begin
Writeln('5 squared is ', Sqr(5)); { 25 }
Writeln('The square root of 2 is ',Sqrt(2.0)); { 1.414 }
...

 

 

 
2、所有单元
SYSTEM TP的运行库,包括常用的标准函数和过程,可以在程序中直接使用,不需USES语句说明。
DOS 具有日期、时间、目录查找、程序执行等功能
CRT 具有屏幕模式控制、扩展键盘码、颜色、窗口、声音等功能
PRINTER 支持打印输出操作。
GRAPH 高级图形软件包,支持多种图形适配器。
GRAPH3 实现TP3.0的图形软件包。
TURBO3 兼容TP3.0的源程序。
OVERLAY 实现高级覆盖管理

 
3、SYSTEM单元

SYSTEM 单元常用过程与函数
ABS(X) F 求变量的绝对值
ADDR(X) F 测变量地址
APPEND(F) P 打开一个存在的文本文件,并将文件指针指向文件末尾准备添加元素
ARCTAN(X) F 反正切
ASSIGN(F,C) P 将字符串C所表示的外部文件名赋给文件变量F
ASSIGNED(X) P 测试程序当中的指针或变量是否为空
BLOCKREAD(F,D,NUM) P 读类型文件。
BLOCKWRITE(F,D,NUM) P 写无类型文件
BREAK P 中止或结束循环
CHDIR(PATH) P 改变当前目录
CHR(X) F 求ASCII码值为X的字符
CLOSE(F) P 关闭文件
CONCAT(S1,S2...S3) F 字符串合并
CONTINUE P 继续循环
COPY(S,POS,LEN) F 返回一个字符串的子串
COS(X) F 余弦函数
CSEG F 返回CS寄存器的当前值
DEC(X) F X:=X-1
DELETE(S,POS,LEN) P 删除一个字符串的子串
DISPOSE(P) P 释放一个动态变量
DSEG F 返回DS寄存器的当前值
EOF(F) F 判断文件是否结束
EOLN(F) F 判断文件类型中的一行是否结束
ERASE(F) P 删除一个存在的外部文件。
EXIT P 过程中止
EXP(X) F 以E为底的指数函数
FILEPOS(F) F 文件记录的当前位置
FILESIZE(F) F 文件记录数
FILLCHAR(D,LEN,DATE) P 填充数值或字符
FLUSH(F) P 清空文件缓存区
FRAC(X) F 取实形变量的小数部分
FREEMEM(P,I) P 释放变长动态变量
GETDIR(DRV,PATH) P 取当前盘,当前目录
GETMEM(P,I) P 分配变长的动态变量,并把块地址存放在一个指针变量中
HALT P 立即中止程序执行,返回TP编辑器或DOS
HI(I) F 返回一个变量的高位字节
INSERT(S,D,POS) F 在一个字符串中某一位置开始插入一个子串
INT F 取整数部分
IORESULT F 返回最后一次输入/出操作的结果状态
LENGTH(S) F 取字符串的长度
LN(R) F 求自然对数
LO(I) F 返回一个变量的低位字节
MAXAVAIL F 返回最大内存空间
MEMAVAIL F 返回可用内存数目
MKDIR(PATH) P 建立一个子目录
MOVE(S,D,LEN) P 快传送
NEW(P) P 建立一个新的动态变量
ODD(X) F 判断一个变量的值是否为奇数
OFS(X) F 侧变量偏移地址
ORD(CH) F 求一个字符的ASCII码值
PARAMCOUNT F DOS参数串长度
PARAMSTR(N) F DOS参数串
PI F 圆周率的值
pos(str1,str2) f 测一个字符串中包含的另一个子串的开始位置
pred(x) f 求前驱
ptr(i) f 指针赋值
random f 返回0~1之间的随机实数
randomize p 初始化随机数发生器
read/readln(f,x) p 读入/输入数据
rename(f,str) p 给一个外部文件改名
reset(f) p 打开文件,并将文件指针指向开始,并准备读数据
rewrite(f) p 打开文件,并将文件指针指向开始,准备写资料
rmdir(path) p 删除一个子目录
round(x) f 求实数的近似数
runerror p 停止程序的运行
scrollto p 滚动显示窗口的某部分内容
seek(f,n) p 将文件指针定位于文件f的第n个文件成分上
seekrof(f) f 定位到文件尾
seekroln(f) f 定位到行尾
seg(n) f 测变量段地址
settextbuf(f) p 将输入/出缓冲区与一个文本文件建立关联
sin(x) f 正弦函数
sizeof(x) f 测变量大小
sptr f 返回sp寄存器的当前值
sqr(x) f 平方
sqrt(x) f 平方根
sseg f 返回ss寄存器的当前值
str(i,s) f 将一个整数转换成字符串
succ(X) f 后继函数
swap(x) f 交换一个变量的高位和低位字节
trunc(x) f 截去实数的小数部分
truncate(f) p 截去文件当前指针以后的内容
upcase(ch) f 将小写字母转换成大写字母
val(s,r,p) p 将一个字符串转换成数值
writeln(f,x) p 输出

 
4、DOS单元

dos单元常用过程与函数

getdate p 返回系统当前日期
detftime p 返回最后一次写入的日期和时间
gettime p 返回系统当前时间
packtime p 转换系统日期和时间,封装成4个字节的长整形格式
setdate p 设置系统当前日期
setftime p 写入新的系统日期和时间,覆盖系统最后一次写入的系统日期和时间文件
settime p 设置系统当前时间
uppacktime p 将系统日期和时间转换成纪录格式
diskfree f 返回指定磁盘可用剩余空间
disksize f 返回指定磁盘的总容量
get/setverity p 返回/设置dos状态下的磁盘读写标记
fexpand f 返回函数名的全称
fsearch f 在一个目录中查找文件
fsplit f 将一个文件名分成目录、文件名、扩展名
findfirst p 在当前目录或指定目录下查找第一个与给定属性相匹配的文件名
findnext p 返回下一个满足匹配条件的文件名
getfattr p 返回文件的属性
setfattr p 设置文件属性
gerintvec p 返回某个中断变量值
intr p 执行软中断
msdos p 执行dos 系统调用
setintvec p 设定中断值
exec p 通过一个特定命令行执行特定程序段
keep p 中断程序的执行但仍驻留在内存中
swapvectors p 用当前变量交换所有中断变量值
dosexitcode f 回到子程序出口
dosversion f 显示dos版本
 

5、CRT单元

assigncrt(f) p 将文本文件f与显示器crt建立联系
clreol p 清除当前行光标所在位置以后的字符
clrscr p 清除当前窗口或屏幕,光标返回到左上角
delay(t) p 等待t毫秒
delline p 清除光标所在行上所有内容
gotoxy(x,y) p 将光标移到屏幕某处
highvideo p 选择高亮度显示字符
insline p 在当前光标位置插入空行
keypressed f 测定键盘输入状态
lowvideo p 低亮度显示字符
normvideo p 选择正常文本属性从光标所在位置开始显示字符
nosound p 关闭内部扬声器
readkey p 等待从键盘输入一个字符
sound(hz) p 以hz指定的频率发声
textbackground(soor) p 设置正文背景颜色
textcolor(color) p 设置正文前景颜色
textmode p 选择特定的文本显示模式
wherex/y f 返回当前光标位置的坐标值
window(x1,y1,x2,y2) p 在屏幕定义一个文本窗口
 

6、其他单元

chain(f) p 目标程序链接
execute(f) p 执行目标程序
mark(p) p 标记动态变量
release(p) p 释放动态变量区
srtinit p 屏幕初始化
crtline p 汉字屏幕方式转换
graphbackground(color) p 选择背景色
graphcolormode p 中分辨率彩色图形方式,320*200彩色
graphmode p 中分辨率黑白图形方式,320*200黑白
graphwindow(x1,y1,x2,y2,color)p 定义图形方式窗口
hires p 高分辨率单色图形方式,640*200黑白
hirescolor(color) p 高分辨率彩色图形方式,640*200彩色
palette(color) p 中分辨率彩色图形颜色组
ovrpath(path) p 指定覆盖文件路径
draw(x1,y1,x2,y2,color) p 画线
intr(n,m) p 8086中断调用
plot(x,y,color) p 画点
random(integer) f 产生随机整数
seg(x) f 测变量段地址
colortable(c1,c2,c3,c4) p 重定义颜色组
arc(x,y,radius,color) p 画圆弧
circle(x,y,radius,color) p 画圆
getpic(buffer,x1,x2,y1,y2) p 屏幕转储到屏幕
putpic(buffer,x,y) p 缓冲器转储到屏幕
getdotcolor(x,y) p 读点
fillscreen(color) p 填充屏幕
fillshape(x,y,fillcol,bordercol) p 填充一个区域
 

6、其他常用函数

function binstr(value:longint;cnt:byte):string;
将value转二进制,取后cnt个字符所成字串
function lowercase(c:char or string):char or string;
upcase 的反函数
procedure setlength(var s:string;len:longint);
将s长度定为len
function power(base,expon:real):real;
base的expon次方
strlcopy 函数将一个字符串中的字符复制到另一个字符串中
strlen 函数 返回字符串中的字符数
strlfmt 函数格式化一系列的参数,其结果中包含有指向目标缓冲区的指针
strlicomp 函数以最大长度比较两个字符串(不区分大小写)
strlower 函数 将字符串中的字符转换为小写
strmove 函数将一个字符串中的字符复制到另一个字符串中
strnew 函数 在堆栈上分配一个字符串
strpas 函数将以null结束的字符串转换为pascal类的字符串
strpcopy 函数将pascal类的字符串复制为以null结束的字符串
strplcopy 函数从pascal类的最大长度字符串复制为以null结束的字符串
strpos 函数返回一个字符串在另一个字符串中首次出现指针
strrscan 函数返回字符串中最后出现字符的指针
strscan 函数 返回字符串中出现首字符的指针
strtodate 函数 将字符串转换为日期格式
strtodatetime 函数将字符串转换为日期/时间格式
strtofloat 函数 将给定的字符串转换为浮点数
strtoint 函数 将字符串转换为整型
strtointdef 函数 将字符串转换为整型或默认值
strtotime 函数 将字符串转换为时间格式
strupper 函数 将字符串中的字符转换为大写
style 属性 类型选择
suce 函数 返回后继的参数
swap 函数 交换参数的高低地址位
tabs 属性 标记每一项的内容
tabindex 属性 标记索引
text 属性 显示的文本
texttofloat 函数将字符串(以null结束的格式)转换为浮点数
time 函数 返回当前的时间
timetostr 函数 将时间格式转换为字符串
trim 函数从给定的字符串中删除前导和尾部的空格及控制字符
trimleft 函数从给定的字符串中删除首部的空格及控制字符
trimright 函数从给定的字符串中删除尾部的空格及控制字符
trunc 函数 将实型值截取为整型值
truncate 函数 截去当前文件位置后的内容
unselectedcolor 属性 未选中颜色
upcase 将字符转换为大写
uppercase 将给定的字符串变为大写
val 函数 将字符串转换为整型值
vararraycreate 函数以给定的界限和维数建立变体数组
vararraydimcount 函数 返回给定变体的维数
vararrayhighbound 函数返回给定变体数组维数的上界
vararraylock 函数 锁定给定的变体数组
vararraylowbound 函数返回给定变体数组维数的下界
vararrayof 函数 返回指定变体的数组元素
vararrayredim 函数通过改变上限来调整变体的大小
vararrayunlock 函数 解锁指定的变体数组
varastype 函数 将变体转换为指定的类型
varcase 函数 将变体转换为指定的类型并保存他
varclear 函数 清除指定的变体
varcopy 函数 将指定的变体复制为指定的变体
varformdatetime 函数 返回包含日期时间的变体
varisarray 函数 测试变体是否为数组
varisempty 函数 测试变体是否为unassigned varisnull 函数测试变体是否为null
vartodatetime 函数将给定的变体转换为日期时间
vartype 函数 将变体转换为指定的类型并保存他
visible 属性 控件的可见性
wantreturns 属性为true时,按回车键产生一个回车符;为false时,按下ctrl+enter才产生回车符 write 命令对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件。

 

7、其他不常用函数

Addr
语法 function Addr(var f:text);
说明 addr返回一个变量,类型或过程的地址。结果为指针类型

assigncer
语法 procedure assigncrt(var f:file;name:string);
说明 将文件f的内容输于显示器上


bolckread
语法 procedure blockread(var f:file; var b:type; numrecs:integer;varecsread:integer);
说明 从无类型文件f中读出number 个记录,放在缓冲区b .recsread表示了实际读出的记
录数。注意:只有pc\ms-dos版才支持recsread


bolckwrite
语法 procedure blockwrite(var f:file; var b:type; numrecs:integer);
说明从缓冲区b读出numrecs个记录至无类型文件中。


chdir
表示的目录.语法 procedure chdir (s:string);
说明 将当前的目录换为s所


filesize
语法 function(f:file):integer;
说明 返回f当前所含的记录数。


filepos
语法 function(f:file):integer;
说明 返回文件f指针所指向的记录号


fillpoly(dos)
语法 frocedure fillpoly(munpoints:word;var polypoints);
说明用munpoints个点画一个多边形,数组munpoints含多边形的顶点坐标


flush
说明 procedure flush(var f:file)
语法 刷新用于输出文件f的全部磁盘缓冲区


frac
语法 function frac(r:real):real;
说明 返回实数r的小数部分


fsearch (dos)
语法 function fsearch(path:pathstr;dirlist:string):pathstr
说明查找dirlist目录中的与path相匹配的文件。如果找到则以一个字符串返回结果,否则返回的函数值为一空串


insline
语法 procedure insline;
说明 在当前光标的所在位置插入一空行


mark
语法 procedure mark(p:pionter)
说明 贮存了当前堆顶端知底于指针p中
maxavaih
语法 function maxavil:longint
说明 返回堆中最大的自由块的尺寸


menavail
语法 function memavail:longint
说明 返回堆中自由空间的总长度


mkdir
语法 procedure mkdir(s:string)
说明 以字符串s命名建立一个目录(文件夹)


parammstr
语法 function paramstr(i;word:string);
说明 返回命令行所指定的参数。例如 paramstr(1)返回第一个参数。在dos3.0以上的版本 返回执行文件的路径和文件名


randomize
语法 function randomize;
说明初始化随机产生程序。其基数存放在长整型randseed中


release
语法 procedure falease(var p;pointer)
说明释放由mark命令所设置的内存。用mark于贮存指针的堆地址


rename
语法 procedure rename(var f:file;s:string)
说明 将文件f的文件名变为字符串s


rmdir
语法 procedure rmdir(s:string)
说明 删除目录s(文件夹)


sound (crt单元)
sound(i:integer)
利用内部扬声器发音


seekeof
语法 function seekeof(var file):boolean
说明与eof相似,只是在测试文件结束前要跳过空格,制表符号和文件的结束符(cr/cf)


truncate
语法 procedure trunvate
说明在当前文件f指针处强行结束文件,文件指针后的内容丢失

 

 

补充函数

一、数据类型转换函数

1.FloatToStr

功能说明:该函数用于将“浮点型”转换成“字符型”。

参考实例:

  Edit1.Text := FloatToStr(1.981);

  

2.IntToStr

功能说明:该函数用于将“整数型”转换成“字符型”。

参考实例:

S := IntToStr(10);(注:S为String类型变量。)

  

3.IntToHex

功能说明:该函数用于将“十进制”转换成“十六进制”。该函数有二个参数。第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。

参考实例:

  Edit1.Text := IntToHex('100', 2);

执行结果,Edit1.Text等于64。

注意:Delphi没有提供专门的“十六进制”转换为“十进制”的函数。使用StrToInt函数可以实现这个功能。具体代码是:I := StrToInt('$' + '64'); 这时I等于100。加上一个'$'即可将“十六进制”转换为“十进制”。

  

4.StrToInt

功能说明:该函数用于将“字符型”转换成“整数型”。

参考实例:

  I := StrToInt('100');

注意:不能转换如 StrToInt('ab')或StrToInt('好')这样的类型,因为他们并不存在数字型。

  

5.StrToFloat

功能说明:该函数用于将“字符型”转换成“浮点型”。

参考实例:

  N := StrToFloat(Edit1.Text);

注意:Edit1.Text中的内容为1.981(凡在Edit控件中显示的文本均为字符串)。N为Double类型,用于保存转换后的浮点型数据。

  

二、字符串、数组操作函数

对字符串及数组的操作,是每个程序员必须要掌握的。熟练的使用这些函数,在编程时能更加得心应手。

1.Copy

功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(即个数)。最后函数返回一个新的字符串(即是我们指定要复制的字符串内容)。

参考实例:

var
    S: String;
    MyStr: String; // 保存新的字符串
begin
    S := 'I Love China!';
  //下面将获取I Love China中的“Love”字符串。
  MyStr := Copy(S, 3, 4);
end;

执行结果,MyStr等于“Love”,“Love”字符串在“I Love China!”中第3个位置开始,所以第二个参数为3,“Love”一共有4个字符,所以第三个参数为4。

  

2.Concat

功能说明:连接两个或多个字符串为一个字符串。

参考实例:

  var
    S1, S2: String;
  begin
    S1 := Concat('A', 'B'); // 连接两个字符串,S1变量等于AB。
    S2 := Concat('Borland', ' Delphi', ' 7.0'); // 连接三个字符,S2变量等于Borland Delphi 7.0。
  end;

 

3.Delete

功能说明:删除字符串中指定的字符串。该函数有三个参数。第一个参数为要进行处理的字符串,第二个参数为从何处开始删除,第三个参数为删除的字符个数。

参考实例:

  var
    S: String;
  begin
    S := 'I Like Reading CPCW.';
    // 下面的代码将删除S变量中的“C”字符。
    Delete(S, 16, 1);
  end;

此时S变量则是I Like Reading PCW.(“C”已经不存在了)。

  

4.High

功能说明:返回数组下标的最大值。

参考实例:

  var
    arrText: array[0..9] of Char;
    i: Integer;
  begin
    i := High(arrText); // i的值则为9
  end;

 

5.Insert

功能说明:插入一个字符(串)。该函数有三个参数。第一个参数为要插入的字符(串),第二个参数为被插入字符串(源字符串),第三个参数为从何处插入。

参考实例:

  var
    S: String;
  begin
    S := 'Wat is your name?';
    // 上面句子中的What单词差一个“h”字符,下面使用Insert函数将h添加进去。
    Insert('h', S, 2); // 将“h”从第2位处插入。
  end;

 

6.LeftStr(所在单元:StrUtils)

功能说明:返回字符串左边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串,第二个参数为指定个数。

参考实例:

  var
    S, A: String;
  begin
    S := 'MSN Messenger';
     A := LeftStr(S, 3); // 从最左边开始,获取左边的三个字符。因此A变量则等于MSN。
  end;

 

7.Length

功能说明:该函数用于统计指定字符串的长度(即个数)。

参考实例:

  var
    nLen1, nLen2: Integer; // 用于保存字符串长度
  begin
    nLen1 := Length('CPCW');
    nLen2 := Length('电脑报');
  end;

执行结果,nLen1等于4,nLen2等于6。由于一个汉字相当于两个字符的长度,所以3个汉字的长度为6。

  

8.Low

功能说明:返回数组下标的最小值。

参考实例:

  var
    arrText: array[1..9] of Char;
    i: Integer;
  begin
    i:= Low(arrText); // i的值则为1
  end;

 

9.LowerCase

功能说明:将字符(串)中的英文字符转换为小写。

参考实例:

  var
    S, A: String;
  begin
    S := 'ABC';
    A := UpperCase(S); // 经过UpperCase函数转换后,A则等于abc。
  end;

 

10.MidStr(所在单元:StrUtils)

功能说明:返回指定范围内的字符串。该函数有三个参数。第一个参数为源字符串,第二个参数为起点,第三个参数为结束点。通过第二、第三个参数则可指定要复制字符串的范围。

Copy函数与此函数类似。MidStr主要用于处理含有中文字符的字符串。

参考实例:

  var
    S: String;
    H: String;
  begin
    S := MidStr('China', 1, 2); // S变量为Ch
    H := MidStr('电脑报', 1, 1); // H变量为“电”。如果使用Copy函数,则应是H := Copy('电脑报, 1, 2),否则返回的将不是“电”字。因此在使用操作含有中文的字符串时,最好使用MidStr。
  end;

 

11.Pos

功能说明:查找字符(串)所在位置。该函数有二个参数。第一个参数为要查找的字符(串),第二个参数为被查找字符(串)。

参考实例:

  var
    nPos: Integer; // 用于保存查找的字符所在位置
  begin
    nPos := Pos('Like', 'I Like Reading!');
  end;

此时nPos等于3。如果没有查找到,则nPos为0。

注意:Pos函数在查找时是要区分字符大小的。如果要实现不区分大小,那么需要使用UpperCase或LowerCase函数将两个参数的字符(串)转换为“大写”或“小写”再进行查找。

另外还有一个查找字符(串)的函数----AnsiPos,该函数的使用方法与Pos函数完全一样。当你查找的是汉字时,最好使用AnsiPos函数。

  

12.RightStr(所在单元:StrUtils)

功能说明:返回字符串右边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串,第二个参数为指定个数。

参考实例:

  var
    S, A: String;
  begin
    S := 'MSN Messenger';
    A := RightStr(S, 3); // 从最右边开始,获取右边的三个字符。因此A变量则等于ger。
  end;

 

13.SetLength

功能说明:设置字符串或动态数组长度。该函数有两个参数。第一个参数为要设置的字符串变量或动态数组变量,第二个参数为指定的长度,其取值范围在0到255之间。

参考实例:

  var
    S: String;
    arrText: array of Char; // 定义一个动态数组
  begin
    SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。
    SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char
  end;

 

14.StrPCopy

功能说明:将字符串复制到字符数组中。该函数有两个参数。第一个参数为“目标数组”,第二个参数为“字符串”。

参考实例:

  var
    arrChar: array[0..255] of Char; // 这里声明了长度为256的Char型数组
  begin
    StrPCopy(arrChar, 'Come on, baby!');
  end;

 

15.Trim

功能说明:删除字符串左右两边的空格(无论左右两边有多少个空格均被全部删除)。

参考实例:

  var
    S: String;
  begin
    S := ' Delphi 7.0 ';
    S := Trim(S);
  end;

 

16.TrimLeft

功能说明:删除字符串左边的空格(无论左边有多少个空格均被全部删除)。

参考实例:

    S := TrimLeft(' Delphi');

  

17.TrimRight

功能说明:删除字符串左边的空格(无论左边有多少个空格均被全部删除)。

参考实例:

    S := TrimRight('Delphi ');

  

18.UpperCase

功能说明:将字符(串)中的英文字符转换为大写。

参考实例:

  var
    S, A: String;
  begin
    S := 'abc';
    A := UpperCase(S); // 经过UpperCase函数转换后,A则等于ABC。

  end;

 

19. posEx

function PosEx(const SubStr: string; const S: string; Offset: Integer = 1): Integer; overload;

首先要引用StrUtils单元,即uses部分要加入StrUtils

功能说明:返回子串 SubStr 在字符串 S 中的索引。可以指定查找起始位置Offset,默认从头开始查找,即Offset=1。如果没有找到,返回0。如果指定的起始位置超过了字符串S的长度,或起始位置小于 1 ,也返回0。

StrUtils.PosEx Function

Returns the index value of a substring.

 

Description

PosEx returns the index of SubStr in S, beginning the search at Offset. If Offset is 1 (default), PosEx is equivalent to Pos.

PosEx returns 0 if SubStr is not found, if Offset is greater than the length of S, or if Offset is less than 1.

 

三、文件、磁盘操作函数

软件大多都要对文件、磁盘进行操作。熟悉掌握这些函数可以帮助你轻松实现创建、删除、保存文件等功能。

1.Append

功能说明:追加内容到文件中。文件必须要存在。

参考实例:

  var
    S: String;
    F: TextFile;
  begin
    S := 'This is a book.';
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Append(F); // 以追加的方式打开文件
    Writeln(F, S); // 将S变量中的内容追加到文本尾后。
    CloseFile(F); // 关闭文件
  end;

 

2.AssignFile

功能说明:与指定的文件建立连接。

参考实例:

  var
    F: TextFile; // 声明文本文件类型变量
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
  end;

 

3.ChDir

功能说明:改变当前目录(文件夹)。

参考实例:

  var
    sDir: String;
  begin
    sDir := 'C:\Windows';
    ChDir(sDir); // 此时,系统的当前目录则为C:\Windows目录。
  end;

 

4.CloseFile

功能说明:关闭文件。当对文件的操作完成后,应该使用CloseFile函数关闭打开的文件。

参考实例:

  var
    S: String;
    AllText: String;
    F: TextFile;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
    while not EOF(F) do begin // 使用While循环,一直判断是否到了文件未尾
      Readln(F, S); // 读取一行文本
      AllText := AllText + S;
    end;
    CloseFile(F); // 关闭文件
  end;

 

5.DeleteFile

功能说明:删除指定的文件。该函数只有一个参数。此参数为欲删除文件的完整路径。如果删除成功,则返回True。若删除失败、或文件不存在则返回False。

参考实例:

  var
    IsOK: Boolean; // 用于保存删除状态
  begin
    IsOK := DeleteFile('C:\My Documents\Index.html'); // 函数执行后,将结果返回给IsOK变量。如果IsOK变量为True,则表示文件删除成功。
    if IsOK then 
      ShowMessage('文件删除成功!')     else
      ShowMessage('文件删除失败!');   end;

 

6.DirectoryExists

功能说明:检测指定的文件夹否存在。如果存在则返回True,反之则为False。

参考实例:

  var
    IsExists: Boolean;
  begin
    IsExists := DirectoryExists ('C:\Windows');
    if IsExists then ShowMessage('Windows文件夹存在!')
    else ShowMessage('Windows文件夹不存在!');
  end;

 

7.DiskFree

功能说明:获取指定磁盘的剩余空间。该函数只有一个参数。该参数用于指定要获取剩余空间的磁盘号。当参数为0时,表示获取当前磁盘的剩余空间,1为A盘,2为B盘,以此类推。如果返回值为-1,表示指定的磁盘无效。

参考实例:

  var
    FreeSize: Int64;
  begin
    FreeSize := DiskFree(3); // 获取C盘中的剩余空间。返回的值是以“字节”为单位的。
  end;

 

8.DiskSize

功能说明:获取指定磁盘的空间。该函数只有一个参数。该参数用于指定要获取磁盘空间的磁盘号。当参数为0时,表示获取当前磁盘的空间,1为A盘,2为B盘,以此类推。如果返回值为-1,表示指定的磁盘无效。

参考实例:

  var
    DiskSize: Int64;
  begin
    DiskSize:= DiskSize(3); // 获取C盘的空间。返回的值是以“字节”为单位的。
  end;

 

9.EOF

功能说明:判断文件指针是否移动到了文件未尾。当EOF函数返回值为True时,则不可以使用Readln函数进行读取文件了。

参考实例:

  var
    S: String;
    AllText: String;
    F: TextFile;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
    while not EOF(F) do begin // 使用While循环,一直判断是否到了文件未尾
      Readln(F, S); // 读取一行文本
      AllText := AllText + S;
    end;
  end;

 

10.Erase

功能说明:删除文件。

参考实例:

  var
    F: File;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
    CloseFile(F); // 关闭文件
    Erase(F); // 删除文件。在删除文件之前必须先关闭文件。
  end;

 

11.FileExists

功能说明:检测指定的文件否存在。如果存在则返回True,反之则为False。

参考实例:

  var
    IsExists: Boolean;
  begin
    IsExists := FileExists('C:\Test.txt');
    if IsExists then ShowMessage('该文件存在!')
    else ShowMessage('该文件不存在!');
  end;

 

12.FileSize

功能说明:获取文件大小。返回的结果是字节为单位。

参考实例:

  var
    F: file of Byte;
    nSize: Longint;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
    nSize := FileSize(F); // 获取文件大小。
    CloseFile(F); // 关闭文件
  end;

 

13.ForceDirectories

功能说明:创建新的子目录。路径中不存在的目录将一同创建。

参考实例: 

ForceDirectories('C:\Flash\MyFolder'); // 如果Flash文件夹本身不存的话,那么将会先创建Flash文件夹,然后再创建MyFolder文件夹。

 

14.MkDir

功能说明:创建一个新的子目录(文件夹)。

参考实例:

MkDir('C:\MyFolder'); // 在C盘根目录中创建了一个名叫MyFolder的文件夹。

需要注意的是,如果在本身不存在的目录中创建子目录将会失败。比如C盘根本不存在Flash文件夹,写成MkDir('C:\Flash\MyFolder');这样将不能成功创建MyFolder文件夹。

  

15.Reset

功能说明:以只读方式打开文件。

参考实例:

  var
    F: TextFile; // 声明文本文件类型变量
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
  end;

 

16.Rewrite

功能说明:以可写方式打开文件。如果文件不存在,将会自动创建。使用该函数,将会覆盖文件中的所有内容。

参考实例:

  var
    F: TextFile; // 声明文本文件类型变量
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Rewrite(F); // 打开文件。如果文件不存在,将会在C盘中创建MyFile.txt文件。如果文件存在,将会覆盖MyFile.txt中的所有内容。
  end;

 

17.Readln

功能说明:读取一行文本。

参考实例:

  var
    S: String;
    F: TextFile;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Reset(F); // 打开文件
    Readln(F, S); // 读取一行文本到S变量中
  end;

 

18.Rename

功能说明:更改文件名。

参考实例:

  var
    F: File;
  begin
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    ReName(F, 'C:\NewFile.txt'); // 更名为NewFile.txt
  end;

 

19.Writeln

功能说明:写入一行文本。

参考实例:

  var
    S: String;
    F: TextFile;
  begin
    S := 'This is a book.';
    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。
    Rewrite(F); // 创建新文件
    Writeln(F, S); // 将S变量中的内容写入文本中。
  end;

 

  

四、内存、指针操作函数

在编程中,动态数组为我们处理数据带来了很大的方便。Windows API 函数也为增强程序的功能提供了强有力的保障。当我们在使用这些动态数组及 API 函数时,常常需要动态分配内存空间,这样动态数组才能被我们使用,API 函数才能正确的返回结果。因此,这些函数是必不可少的。

1.AllocMem

功能说明:分配内存空间并自动初始化为零。如果不需要初始化为零,可以使用GetMem代替AllocMem。

参考实例:

  var
    Buffer: PChar;
  begin
    Buffer := AllocMem(256); // 分配大小为256个字节的内存空间
  end;

 

2.Dispose

功能说明:释放为指针分配的内存空间。

参考实例:

  var
    P: Pinteger; // 声明一个Integer(整型)指针
  begin
    New(P);
    P^ := 100;
    Dispose(P) // 释放内存
  end;

 

3.FreeMem

功能说明:释放分配的内存空间。

参考实例:

  var
    Buffer: Pchar;
  begin
    GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。
    FreeMem(Buffer); // 释放内存空间
  end

 

4.GetMem

功能说明:分配内存空间。

参考实例:

  var
    Buffer: PChar;
  begin
    GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。
  end;

 

5.New

功能说明:为指针分配内存空间。

参考实例:

  var
    P: PInteger; // 声明一个Integer(整型)指针
  begin
    New(P); // 分配内存
    P^ := 100; // 赋值
  end;

 

  

五、数学运算函数

我们在编写跟数学紧密相关的程序时,数学运算函数将大有用处。比如图像处理软件,就会大量用到这些数学运算函数。默认情况下,Delphi新建的工程里,没有包含大多数的数学运行函数,因此需要在Uses中加入Math单元。

1.Abs

功能说明:求绝对值。

参考实例:

  var
    r: Single;
    i: Integer;
  begin
    r := Abs(-2.8); // r等于 2.8
    i := Abs(-156); // I 等于 156
  end;

 

2.Exp

功能说明:Exp返回e的X次幂的值,其中e是一个自然对数基底。

参考实例:

  begin    
    e := Exp(1.0); // e为real型变量
  end;

 

3.Floor

功能说明:取得小于等于X的最大的整数。

参考实例:

  Floor(-2.8) = -3
  Floor(2.8) = 2
  Floor(-1.0) = -1

 

4.Int

功能说明:返回参数中的整数部分。

参考实例:

  var
    R: Real;
  begin
    R := Int(123.456); // R等于 123.0
    R := Int(-123.456); // R等于 -123.0
  end;

 

5.Max(所在单元:Math)

功能说明:比较两个数字,并返回最大的一个数字。

参考实例:

  var
    k: Integer;
  begin
    k := Max(10, 20); // k将为20
  end;

 

6.Min(所在单元:Math)

功能说明:比较两个数字,并返回最小的一个数字。

参考实例:

  var
    k: Integer;
  begin
    k := Min(10, 20); // k将为10
  end;

 

7.PI

功能说明:精确计算返回圆周率。

参考实例:

  var
    x Extended;
  begin
    x := PI; // x等于3.1415926535897932385
  end;

 

8.Round

功能说明:对一个实数进行四舍五入。

参考实例:

  var
    I, j: Integer;
  begin
    i := Round(1.25); // i等于1
    j := Round(1.62); // j等于2
  end;

 

9.Sqr

功能说明:取给定值的平方。

参考实例:

  var
   i: Integer;
  begin
   i := Sqr(3); // i等于9
  end;

 

  

六、日期函数

对日期的处理,一般在有日期限制的共享、商业软件中经常使用到。如果你打算编写一款有日期限制的软件,熟悉使用下面的函数即可以实现。

1.Date

功能说明:返回当前的日期。

参考实例:

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    Label1.Caption := '今天是:' + DateToStr(Date);
  end;

Label显示为:今天是2005年1月1日。

  

2.DateToStr

功能说明:将日期型转换为字符型。

参考实例:

  var
    S: String;
  begin
    S := DateToStr(Date);
  end;

 

3.DateTimeToStr

功能说明:将DateTime型转换为字符型。

参考实例:

  var
    S: String;
  begin
    S := DateTimeToStr(Now);
  end;

 

4.DayOfTheMonth(所在单元:DateUtils)

功能说明:获取指定日期的日。

参考实例:

Label1.Caption := IntToStr(DayOfTheMonth(Now));

假设当前日期为2005年1月2日,那么Label将显示为2。

  

5.DayOfTheWeek(所在单元:DateUtils)

功能说明:根据指定日期,获取星期几。

参考实例:  

Label1.Caption := IntToStr(DayOfTheMonth(Now));

假设当前日期为2005年1月2日,那么Label将显示为7。根据返回的值来判断是周几。7表示星期天,1为星期一,依类类推。

  

6.DayOfTheYear(所在单元:DateUtils)

功能说明:根据指定日期,获取天数。

参考实例: 

Label1.Caption := IntToStr(DayOfTheYear(Now));

假设当前日期为2005年1月2日,那么Label将显示为2。表示是2005年的第2天。

  

7.DayOf(所在单元:DateUtils)

功能说明:根据指定的日期,返回日。

参考实例:  

Label1.Caption := IntToStr(DayOf(Date));

假设当前日期为2005年1月2日,那么Label将显示为2。

  

8.IsLeapYear

功能说明:根据指定的年,判断是否为闰年。可使用YearOf函数获取年。

参考实例:

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    if IsLeapYear(YearOf(Date)) then ShowMessage('是闰年')
    else ShowMessage('不是闰年');
  end;

 

9.MonthOf(所在单元:DateUtils)

功能说明:根据指定的日期,返回月份。

参考实例: 

Label1.Caption := IntToStr(MonthOf(Date));

假设当前日期为2005年1月2日,那么Label将显示为1。

  

10.Now

功能说明:返回当前日期及时间。

参考实例:

  procedure TForm1.Button1Click(Sender: TObject);
  begin
    Label1.Caption := '现在是:' + DateTimeToStr(Now);
  end;

 

11.YearOf(所在单元:DateUtils)

功能说明:根据指定的日期,返回年。

参考实例:

Label1.Caption := IntToStr(YearOf(Date));

假设当前日期为2005年1月2日,那么Label将显示为2005。

 

DayOfWeek

function DayOfWeek(Date: TDateTime): Integer;

作用:得到指定日期的星期值,返回1~7,代表周日到周六。

 

IncMonth

function IncMonth(const Date: TDateTime; NumberOfMonths: Integer): TDateTime;

作用:求给定的日期Data在NumberOfMonth 个月后的日期。

范例:Date1 := IncMonth(date,10);

如果今天是2002-5-3,则Date1就是2003-3-3

 

 

IsLeapYear

function IsLeapYear(Year: Word): Boolean;

作用:判断指定的年份是否是闰年;

范例:if isLeapYear(2000) then ShowMessage(‘该年是闰年’);

 

ReplaceDate 

procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);

作用:使用参数Newdate日期部分替换参数DateTime的日期部分,但不改变时间部分

 

ReplaceTime

procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime);

作用:使用参数Newdate时间部分替换参数DateTime的时间部分,但不改变日期部分。

如果上述这两个过程一起用,就相当于赋值了。


Time函数:

定义:function Time: TDateTime;

作用:返回当前的时间

范例:CurrentTime := Time;

DateTimeToFileDate函数:

定义:DateTimeToFileDate(DateTime: TDateTime): Integer;

作用:将一个TDateTime类型的时间转化为Dos环境中的时间,Dos环境下对时间的访问方法和VCL中的TdateTime类型不一样,在进行文件操作时,为了保持时间的一致性,需要使用DateTimeToFileDate函数进行转化,返回的Integer的值就是Dos下的用于描述时间的值。

DateTimeToSystemTime 过程:

定义:procedure DateTimeToSystemTime(DateTime: TDateTime; var SystemTime: TSystemTime);

作用:将一个TDateTime类型的时间转换为Win API函数所使用的TSystemTime类型,在使用WinApi函数操纵时间时用到。

SystemTimeToDateTime 函数:

定义:function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime;

作用:将一个在WinApi函数中得到的TSysTemTime类型的数转换为TDateTime类型。

DateTimeToTimeStamp 函数:

TimeStampToDateTime 函数:

定义:DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp;

function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;

作用:用于在TDataTime类型与TTimeStamp之间进行互相转换。TDataTime 用一个double描绘一个时间,而TTimeStamp则是采用两个整形数分别描述时间。两种类型的区别可参考文章开始处的数据类型描述部分。

EncodeDate 函数:

定义:function EncodeDate(Year, Month, Day: Word): TDateTime;

作用: 输入年(year),月(month),日(day)的值,将该日期返回为TDateTime类型,年的范围为1-9999,月份的范围为1-12,日期的范围视当月的情况而定,如果输入的值超出范围,则将产生一个EConvertError错误。
DecodeDate 过程:

定义:procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word);

作用:输入一个TDateTime类型的日期,将其转为年(Year),月(Month),日(Day)的值。如果输入值为0或小于0,则年月日均为0,

EncodeTime 函数:

定义:EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime;

作用:输入小时(Hour),分(min),秒(Sec),微秒(MSec)的值,返回一个TDateTime类型的时间,该值为一个介于0至1之间的小数。Hour的取值范围为0-23,Min的取值范围为0-59,Sec的取值范围为0-59,MSec的取值范围为0-999,如果输入值超出范围,则产生一个EConvertError 错误。

DecodeTime 过程:

定义:procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word);

作用:输入一个时间,将其转换为小时(Hour),分(min),秒(Sec),微秒(MSec)的值。
TDateTime类型与字符串型转换函数:

DateTimeToStr 函数:

DateToStr 函数

TimeToStr函数

定义:function DateTimeToStr(DateTime: TDateTime): string;

function TimeToStr(Time: TDateTime): string;

function TimeToStr(Time: TDateTime): string;

作用:将一个TDateTime类型的数转换成字符串,DateTimeToStr转换日期和时间,DateToStr只转换日期,TimeToStr只转换时间。转换后的输出效果为YYYY-M-D H:M:S

StrToDateTime函数

StrToDate函数

StrToTime函数

定义:function StrToDateTime(const S: string): TDateTime;

function StrToDate(const S: string): TDateTime;

 

摘录函数

ExtractFilePath()

功能:返回完整文件名中的路径

函数原型如下:

  AnsiString __fastcall ExtractFilePath;

ExtractFilePath和相近函数:

  ExtractFileDrive :返回完整文件名中的驱动器,如"C:"

  ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:\test\"

  ExtractFileDir:返回完整文件名中的路径,最后不带“/” ,如"C:\test"

  ExtractFileName:返回完整文件名中的文件名称 (带扩展名),如"mytest.doc"

  ExtractFileExt 返回完整文件名中的文件扩展名(带.),如".doc"

 

 

Char()是把ASCII码转换成对应的字符。

比如,1的内码是49,则Char(49)就返回'1'。

 

paramstr 

function   paramstr(i:index):string 

对于任何application paramstr(0)都默认代表的是应用程序的绝对路径。那么有paramstr(0),就肯定有paramstr(1),paramstr(2)...了。它们的值又是什么?取出的是空值,又不能赋值。

Delphi 帮助中说 Returns a specified parameter from the command-line. 从命令行中返回一个特别的参数,就是在exe文件后面可以跟参数,paramstr 获取的就是exe文件后面跟参数。如有可执行文件project1.exe 在运行中输入  

e:\project1.exe 123 456 789 

那么 paramstr(1)='123', paramstr(2)='456',paramstr(3)='789'

用 shellexecute 的话可以在parameters参数位置输入值。不同的参数值之间用空格隔开

shellexecute(application.Handle,'open','project4.exe','123 456', 'e:\',SW_SHOW);

所以用 paramstr 可以在应用程序间进行数据传输。

 

move 

var 
   s:string; 
   ps:Pchar; 
   b:pbyte; 
   len:integer; 
begin 
   s:=edit1.Text; //字符串 
   ps:=pchar(s); //转成pchar类型, 
   len:=length(s);//取字符串长度,占用多少字节 
   getmem(b,len);//申请内存,pchar,pbyte在使用前都必须要申请内存,因为他们是指针. 
   move(ps^,b^,len);//这里 ps^意思是pchar指向内存数据的第一个字节地址,B^是表示申请内存的第一个字节地址,这样就可以一个一个字节的移到b里去了. 
   memo1.Text:=pchar(b);//显示. 
   freemem(b); 
end; 

有些人遇到的困惑是为什么 move(s,b,len)不行呢?同样我也遇到这样的困惑. 看了一样move的函数源码才明白. 

procedure  Move( const Source; var Dest; count : Integer ); 
{$IFDEF PUREPASCAL} 
var 
  S, D: PChar; 
  I: Integer; 
begin 
  S := PChar(@Source);//取内存地址 
  D := PChar(@Dest);//取内存地址 
  if S = D then Exit; 
  if Cardinal(D) > Cardinal(S) then 
    for I := count-1 downto 0 do 
      D[I] := S[I] 
  else 
    for I := 0 to count-1 do 
      D[I] := S[I]; 
end; 
如果直接传入s, 
S := PChar(@Source);//取内存地址
就相当于取的字符串S地址的地址. 
如果传入的是ps^ 
S := PChar(@Source);//取内存地址 
就相当于取pchar 所指向字符串实际数据的地址

 

 

 

 
seek
procedure TRecordStream.First;
begin
  seek (0,0);
end;
procedure TRecordStream.Last; {该过程用于定位最后一条记录} begin   seek(0,2); //定位到文件流尾部   seek(-GetRecSize,1);//定位到最后一条记录的开始位置 end;

其中第一个参数代表移动长度 ,第二个参数代表移动前的当前位置,0:开始 1:当前位置 2:尾部

 

 

 

 

进制转换函数

 

一、完全用API完成:..uses Windows;

function IntToStr(I: integer): string;

begin

   Str(I, Result);

end;

function StrToInt(S: string): integer;

begin

Val(S, Result, Result);

end;

function HexToInt(Const HexValue: String) : Integer;

begin

   Val('$'+HexValue, Result, Result);

end;

function IntToHex(Const Value: Integer): string;

const

   HexChars: array[0..15] of Char = '0123456789ABCDEF';

var

   iTemp: Integer;

   i: Integer;

begin

   Result := '';

   i := 0;

   while i<4 do

   begin

     case i of

       0: iTemp := Value shr 24 and $FF;

       1: iTemp := Value shr 16 and $FF;

       2: iTemp := Value shr 8 and $FF;

       3: iTemp := Value and $FF;

     end;

     Result := Result + HexChars[iTemp div 16];

     Result := Result + HexChars[iTemp mod 16];

     Inc(i);

   end;

end;

function LowerCase(const S: string): String;

begin

   Result:=CharLower(Pchar(S));

end;

function UpperCase(const S: string): String;

begin

   Result:=CharUpper(Pchar(S));

end;

 

二、函数实现

十进制 to 二进制

function IntToBin(Value: LongInt;Size: Integer): String;

var

i: Integer;

begin

Result:='';

for i:=Size-1 downto 0 do begin

    if Value and (1 shl i)<>0 then begin

       Result:=Result+'1';

end else begin

       Result:=Result+'0';

end;

end;

end;

 

二进制 to 十进制

function BintoInt(Value:   String):   LongInt;

var

      i,Size:   Integer;

begin

      Result:=0;

      Size:=Length(Value);

      for   i:=Size   downto   1   do

      begin

          if   Copy(Value,i,1)='1'   then

              Result:=Result+(1   shl   (Size-i));

      end;

end;


function floatBintoInt(Value:   String):   real;

var

      i,Size:   Integer;

begin

      Result:=0;

      Size:=Length(Value);

      for   i:=Size   downto   1   do

      begin

          if   Copy(Value,i,1)='1'   then

              Result:=Result+1/(1   shl i);

      end;

end;

 

十六进制 to 二进制

function HextoBinary(Hex:string):string;

const

    BOX: array [0..15] of string =

         ('0000','0001','0010','0011',

          '0100','0101','0110','0111',

          '1000','1001','1010','1011',

          '1100','1101','1110','1111');

var

    i:integer;

begin

    for i:=Length(Hex) downto 1 do

        Result:=BOX[StrToInt('$'+Hex[i])]+Result;

end;

 

十六进制 to 十进制 浮点型

function HextoFloat(s:string):real;

var b,temp:string;

    e:integer;

    f:real;

begin

b:=HextoBinary(s);

temp := copy(b,2,8);

e:=BintoInt(temp)-127;

temp := copy(b,10,23);

f := 1+floatBintoInt(temp);

if(copy(b,1,1)='0')then

    result := power(2,e)*f

else

    result :=-power(2,e)*f;

end;

 


 

 

 

 

 
 

 

 

 

关于 Lo、Hi、LoWord、HiWord

Cardinal 是 4 字节无符号的整型, 先看一个例数:

Cardinal 例数: 4277991664
按字节划分: 第四字节第三字节第二字节第一字节
二进制: 11111110111111001111100011110000
十六进制: FEFCF8F0
十进制: 254252248240
按双字节划分: 高两位低两位
二进制: 11111110111111001111100011110000
十六进制: FEFCF8F0
十进制: 6527663728

//可以用 Lo 函数提取它的低字节(也就是第一个字节)
const
  c: Cardinal = 4277991664;
begin
  ShowMessageFmt('%d', [Lo(c)]); {240}
end;

//其实不使用 Lo 函数, 通过 Byte 类型转换也可以获取第一个字节
const
  c: Cardinal = 4277991664;
begin
  ShowMessageFmt('%d', [Byte(c)]); {240}
end;

//Hi 函数说是获取高位字节, 其实是获取第二个字节
const
  c: Cardinal = 4277991664;
begin
  ShowMessageFmt('%d', [Hi(c)]); {248}
end;

//如果要获取低两位, 貌似应该有个 LoWord 函数; 确实有, 但它不是函数, 只是 Word 类型的一个别称.
const
  c: Cardinal = 4277991664;
begin
  ShowMessageFmt('%d', [LoWord(c)]); {63728}
  ShowMessageFmt('%d', [Word(c)]);   {63728}
end;

//HiWord 函数是提取高两位的
const
  c: Cardinal = 4277991664;
begin
  ShowMessageFmt('%d', [HiWord(c)]); {65276}
end;

 

 

 

System.StringOfChar - 反复字符

var
  s: string;
begin
  s := StringOfChar('G', 5);
  ShowMessage(s);  {GGGGG}
end;

var
  s: string;
begin
  s := StringOfChar(#65, 5);
  ShowMessage(s);  {AAAAA}
end;

var
  s: string;
begin
  s := StringOfChar(#19975, 5);
  ShowMessage(s);  {万万万万万}
end;

 

 

 

 

posted @ 2014-07-10 08:50  ivantang  阅读(1392)  评论(0编辑  收藏  举报