飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3703|回复: 3

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

[复制链接]
  • TA的每日心情
    奋斗
    2017-4-20 22:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-25 22:51:33 | 显示全部楼层 |阅读模式
    本帖最后由 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:有效位数[7---8]位
    real:有效位数[11---12]位

    double:有效位数[15---16]位
    extended:有效位数[19--20]位

    一般用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,i]);

    相当于 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中定义的区别开来]
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-5-26 07:42:25 | 显示全部楼层
    楼主 Pascal 讲的不错。继续加油呀!
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2017-4-20 22:12
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2010-5-26 08:52:33 | 显示全部楼层
    :loveliness:感谢斑竹的肯定,俺会继续的!同时也希望坛子里的更多人加入这一群体!
    PYG19周年生日快乐!
  • TA的每日心情
    郁闷
    2017-12-18 18:11
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-6-1 07:39:20 | 显示全部楼层
    那是相当的不错
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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