suiyunonghen 发表于 2010-5-25 22:51:33

以前的Delphi系列学习笔记(2) delphi基础语法以及过程函数

本帖最后由 suiyunonghen 于 2010-5-25 22:52 编辑

1:数据类型:
A:整型:

1):byte:0---255 [用high和low来测试变量的最大值和最小值]
2):shortint:-128----127

3):smallint:-32768---32767
4):word:0----65535

5):integer:-2147483648----2147483647
6):int64:-2 63----2 63

7):cardinal:4294967295

A:实型:

single:有效位数位
real:有效位数位

double:有效位数位
extended:有效位数位

一般用real

B:字符类型:char

用单引号括起来的一个字符: 比如:var ch:char;

C:字符串

在delphi中,我们可以使用用两种形式声明的字符串:
string声明的字符串,结尾不含null。

pchar声明的字符串,结尾含有null,这是很多api函数所使用的字符串格式,实际上它是一个指向字符串的 指针
区别有以下几点:

1:可以用lentgh来测量两种字符串中所含有字符个数
2:string声明的字符串第一个字符的下标为1,而pchar声明的字符串下标为0

3:对于string字符串要以直接比较大小,而对pchar字符串来说只能够使用函数strcomp
4:一个pchar+'字符串'将变成string类型的字符串,string类型的字符串可以相加,但pchar类型的字符串 不能相加

string类型与pchar类型的转换:
string---pchar pchar(字符串)

string与pchar的应用:
dr:=stralloc(20);

getsystemdirectory(dr,strbufsize(dr));
dr:=pchar(strpas(dr)+'\calc.exe');

showmessage(dr);

winexec(dr,SW_SHOWNORMAL);


d:布尔类型:(boolean)只能是false:假,true:真
E:变体类型:(variant)类型不固定,delphi会自动转化:

比如:
var v1,v2,v3:variant;

i:integer;
s:string;

v1:=1;v2:=1.24;v3:='567';v4:=v1+v2+v3;
--------------------------------------------------------------------------------------------
符号常量:

定义方法:
const

常量名=常量值;
注意以下几点:

1:符号常量必须写在var的下面
2:如果在程序中,某一常数要反复使用很多次,则可以使用符号常量

3:不能在程序中其它位置给常量再赋值

--------------------------------------------------------------------------------------------


变量:

1:变量的声明:
var

变量名1:类型;
变量名2:类型;

当多个变量具有相同的类型时,可以使用如下格式:
var 变量名1,变量名2....变量名n:类型 来声明

2:变量的赋初值:
方法:变量名=值

如果不进行初始化就使用变量系统会:

1:整型,实形:随机 2:字符串:为空串 3:布尔型:true

--------------------------------------------------------------------------------------------


运算符与表达式:
1:算术运算符: +,-,*,/,div,mod

说明:
"/":参加运算的数无论是整型还是实型结果都是实型

"div":参加运算的两个数必须都是整数,商也是整数
"mod":取余同上

优先级别:(*,/)>(div,mod)>(+,-)
逻辑运算符:not and or 优先级别:not>and>or

关系运算符:>,>=,<,<=,<>,=
表示:a>10并且要小于20 if (a>10) and (a<20) then 不能 if a>10 and a<20 原因是逻辑运算符的 优先级别大于关系运算符

字符串运算符:
"+":用来连接两个字符串.

常用函数与过程:
数学函数:

A:abs(x):求绝对值
B:sqr(x):求x的平方

C:sqrt(x):求平方根
D:sin(x),cos(x).

E:int(x),frac(x):返回x的小数部分,round(x):四舍五入之后的整数
随机函数:

random(n):返回大于或等于零且小n的随机数.
random:0<=x<1

random(90)+10 返回10到100之间的数
说明:

为了能产生互不相同的随机数,应在程序启动时调用一次randomize过程以初始化内部随机数产生器
字符处理函数:

lowercase(s):转成小写
uppercase(s):转成大写

comparestr(s1,s2):比较大小,区分大小写
comparetext(s1,s2):是不分大小写的

concat(s1,s2...sn):把s1,s2..sn连成一个新串
pos(substr,s):在字符串s中查找子串substr.

该函数会返回子串在字符串s中的位置,若不在,则返回零。
length(s):用来确定字符串的长度。

copy(s,n,m):从字符串s中截取从n开始的m个字符串
delete(s,n,m):删除从n开始的m个字符长的子字符串[注意:汉字占2个位]

数值与字符串的转换函数:
inttostr,floattostr,strtoint,strtofloat,chr(x):将ascii码值转换成对应的字符。

格式化函数:
format(格式化字符串,数组)

%d,%s,%f:
比如:format('%s删除了%d条记录',['work表',10])相当于"work表删除了10条记录

举列:
var i:integer;s:string; i:=3;s=:'我的心';format('%s有%d个',);

相当于 s+'有'+inttostr(i)+'个'
日期时间函数:

now:返回系统当前的日期和时间:
date:返回日期:

tiem:返回时间:

datetostr,timetostr,datetimetostr

--------------------------------------------------------------------------------------------


语句的书写规则:
1:每个语句必须以分号";"结束

2:简单的语句为空语句;即什么也不做
3:较为复杂的情况是多个语句用begint和end字围起来,组成复合语句。

比如:
begin

<语句1>
....

<语句2>
end;

赋值语句:
变量名(属性名):=值; [注意不要写成=]

注释语句:为了提高程序的可读性,可以在适当的位置加上一引注释
1:行注释:// 2:块注释:{ }


基本语句的介绍:
1:选择结构:

if 语句
1:if (条件) then

begin
语句体

end;
2:if (条件) then

begin
语句体

end
else

begin
语句体

end;
说明:

1:else上面的语句不能有分号
举列: #8:backspace,#46:小数点 #48---#57 (0---9)


case 语句
格式:

case 表达式 of
常量表1:语句1

常量表2:语句2
......

常量表n:语句n
else

其它语句
end;

说明:
1:表达式的值必须是顺序类型(整型,字符型,布欠型)

2:常量表中的值应该是"表达式"中可能具的值,各常量之间用逗号分隔,所有常量必须不同
3:else可以省略。

4:else表示没有匹配的项时,就做else.
举列:

2:循环结构:
1: while 语句

格式:
while (条件) do

begin
语句体

end;
说明:

1:可以在while里面设置break语句,强制退出循环
2:可以在while里面设置contiune语句,来结束本次循环。

举列:
2:for语句

格式:
for 循环变量:=初值 to|downto 终值 do

begin
语句体

end;
1:可以在for里面设置break语句,强制退出循环

2:可以在for里面设置contiune语句,来结束本次循环。
举列:

3:repeat
begin

语句体
end;

until (停止循环的条件)

上面讲解了一些基础的语法,现在我们来说一下Delphi的函数与过程。
过程与函数是程序设计中重要的概念,也是实现结构化程序设计思想的重要手段。

什么是过程:

过程(procedurce):是没有返回值的。

过程的分类:

1:标准过程:系统内部已经定义好的过程,无须编写 如:copy,delete等。

2:用户自定义过程:必须由用户自行编写代码以完成指定的操作。

包括:事件过程,通用过程

A:事件过程:依附于对像,当该对像的的某个事件被触发,就会去执行事件过程。比如:onclick等。

B:通用过程:告诉应用程序如何完成一项指定的任务,不与任何对像相联系。


事件过程的创建与调用:

创建:在objectonspector器中选择相应的事件直接编写代码。

说明:一个事件过程可以被多个对像,多个事件共享

举列:

通用过程的创建与调用:

A:创建只能在本单中使用的通用过程:[此时不要声明]

直接写在implementation 的下面{$R *.dfm}

procedurce 过程名(形叁表);

[局部声明]

begin

过程体

end;

B:创建能够在其它单元中使用的过程:

第一步:必须首先要在inte**ce部分声明

第二步:在实现部分写下实现代码

说明:

1:形参表由若干个形式参数组成,它决定了调用过程传递给过程的实参个数和类型。所有形参必须 说明类型,相同类型的形参之间用逗号隔开,不同类型的形参之间用分号隔开.

2:加上var表示传址,不加表示传值

举列测试:[定义两个数交换的过程]

例:用一个过程实现1到n的阶层,实现交换两个变量的值

和其他语言的比较在C等语言中,过程实际上就是一个void类型的返回如
void dotest(int p1,int p2);
那么对应Delphi的就是
procedure dotest(p1,p2: integer);




函数:有返回值。

定义格式:

function 函数名(形参表):函数类型;

[局部声明]

begin

函数语句

end;

函数与过程也分成在本单元中使用的和能够在其它单元使用的。

说明:

1:函数的返回值通过result关键字或函数名返回

列如:

function fat(n:integer):integer;

var

t,i:integer;

begin

t:=1;

for(i:=1 to n do

t:=t*i;

result:=t或fact:=t)

end

函数的调用;

t:=函数名(实参列表)

举列:


总结:在实际开发项目中,我们都是创建一个单元,然后把工程中要用到的函数或过程都放在这个指定 的单元中举列]

过程或函数的重载(method overloading)

在delphi在,充许有名字相同而参数不同的过程或函数,这就是过程和函数的重载(overload)

比如:

[可以在函数或过程后面加上overload关键字就行了]

procedurce test1(v1:integer);overload

procedurce test2(v1:string);overload

为什么要使用重载:

1:举列说明:

2:随便以后维护程序。比如你写了一个test的函数,里面包含了一个整型参数,当程序执行了一段时间 之后,需要test2函数必须也能处理字符串型参。有了重载,你就不必须要再写另外一个函数了。


过程或函数的默认参数:

比如:

procedurce test(A:integer=3);

说明:

1:不能同时把一个默认值指定给多个参数,

function myfun(x,y:integer=3):integer;[错]

改成:function myfun(x:integer=3;y:integer=3):integer;

2:当你声明的函数具有一个以上的参数时,你必须由右到左来指定默认的值,如果最右的参数没有 默认值,那么其它的叁数也不充许指定默认值

如:

pocedurce mypro(i:integer=3;s:string)[错错]

变量,过程或函数的作用域

1: 单元的接口部分与实现部分:

A:接口部分(inte**ce):用来声明其它单元可以访问的类型,常量,变量,函数和过程.其中的 函数和过程只需要列出它们的首部而在实现部分(implementation)进行实现

B:实现部分:用来实现在inte**ce部分声明的函数和过程。即给出这些函数和过程的完整实现 代码。在实现部分也可以声明类型,常量,变量,函数和过程。但它们仅仅能作为本单元的私有 部分

2:公有变量与私有变量:

在单元的接口部分声明的变量属于公有变量,可以被其它单元引用。

在单元的实现部分声明的变量属于私有变量,不能被其它单元引用。

[注意与类form中定义的区别开来]

whypro 发表于 2010-5-26 07:42:25

楼主 Pascal 讲的不错。继续加油呀!

suiyunonghen 发表于 2010-5-26 08:52:33

:loveliness:感谢斑竹的肯定,俺会继续的!同时也希望坛子里的更多人加入这一群体!

nevsayno 发表于 2010-6-1 07:39:20

那是相当的不错
页: [1]
查看完整版本: 以前的Delphi系列学习笔记(2) delphi基础语法以及过程函数