第2章Delphi语法基础
- 格式:doc
- 大小:171.00 KB
- 文档页数:22
Delphi基本语法格式和常用函数分类:《Delphi中的进制转换(如hex与bin)》ShowMessage(Format('%d:%d', [pos, length(keys)])+':'+keys);Format('%d:%d:%x', [pos, key_len,byte(pchar(keys)[0])]) // 其中keys为string类型《delphi快捷键-和vim对应上的快捷键》delphi延时函数代码!Delphi文件操作函数Delphi关于多线程同步的一些方法,信号量,互斥量和临界区delphi轻松实现原子操作-CreateSemaphore获得Integer和DWord类型的最大值ShowMessage(IntToStr(High(Integer)));ShowMessage(IntToStr(High(DWord)));// delphi的sleep()就是一个ms毫秒级延时函数,但是使用sleep会导致程序短暂pendingprocedure TForm1.delay(MSecs: Integer);//延时函数,MSecs单位为毫秒(千分之1秒)var FirstTickCount, Now: Longint;beginif MSecs <> 0 then beginFirstTickCount := GetTickCount();repeatApplication.ProcessMessages;Now := GetTickCount();until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount); end;end;varwrite_semaphore:THandle;write_semaphore:=CreateSemaphore(0, 1, 1, nil);procedure TForm1.Button1Click(Sender: TObject);beginWaitForSingleObject(com.write_semaphore, INFINITE); // 返回值WAIT_TIMEOUT和WAIT_OBJECT_0ReleaseSemaphore(com.write_semaphore, 1, nil);end;var file_name:string;file_name:='c:\luther.gliethttp.txt';send_fd:=FileOpen(file_name, fmOpenRead or fmShareDenyWrite); FileWrite(com.log_fd, PChar(file_name)^, length(file_name));GetForegroundWindow找到xp操作系统上当前前景窗体句柄. GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口; GetForegroundWindow 是获取当前系统中被激活的窗口.《Delphi中FindWindow和FindWindowEx的语法和用法》《delphi获取操作系统已运行的所有窗口程序-如打开的所有记事本的标题》两个函数的级别不一样, 一个是线程级、一个是系统级.被激活的窗口不一定是顶层窗口(最上面的窗口).// 向当前占有焦点的控件发送剪切板粘帖指令if Edit1.Focused or Edit3.Focused or Edit4.Focused then SendMessage(Form1.ActiveControl.Handle, WM_PASTE, 0, 0);==================================char类型数组和string之间的使用以及bin数据转换为hex函数使用// 这是摘自Classes.pas库中的实现代码procedure BinToHex(Buffer, Text: PChar; BufSize: Integer); assembler; constConvert: array[0..15] of Char = '0123456789ABCDEF';varI: Integer;beginfor I := 0 to BufSize - 1 dobeginText[0] := Convert[Byte(Buffer[I]) shr 4];Text[1] := Convert[Byte(Buffer[I]) and $F];Inc(Text, 2);end;end;procedure TForm1.Button3Click(Sender: TObject); var strs:string;p:pchar;i,max:Integer;beginstrs:='abcd1234';max:=length(strs);p:=Pointer(strs);i:=0;while (i <= max) dobeginShowMessage(p[i]);Inc(i);end;end;procedure TForm1.Button4Click(Sender: TObject); var strs:string;hex:array of char;max:integer;hex_len:Integer;beginstrs:='你cd1234';max:=length(strs);hex_len:=2*max;//+1;SetLength(hex, hex_len);BinToHex(pointer(strs), pointer(hex), max);ShowMessage(inttostr(length(string(hex))));hex_len:=high(hex)+1;max:=hex_len shr 1;//div 2;ShowMessage(IntToStr(hex_len)+':'+inttostr(max));strs:='';SetLength(strs, max);HexToBin(pointer(hex), pointer(strs), hex_len);ShowMessage(strs);end;function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);function IntToHex(Value: Integer; Digits: Integer): string; overload; function StrToInt(const S: string): Integer;==================================Format('x=%d',[12]);//'x=12'//最普通Format('x=%3d',[12]);//'x=12'//指定宽度Format('x=%f',[12.0]);//'x=12.00'//浮点数Format('x=%.3f',[12.0]);//'x=12.000'//指定小数Format('x=%8.2f'[12.0])//'x=12.00';Format('x=%.*f',[5,12.0]);//'x=12.00000'//动态配置Format('x=%.5d',[12]);//'x=00012'//前面补充0Format('x=%.5x',[12]);//'x=0000C'//十六进制Format('x=%1:d%0:d',[12,13]);//'x=1312'//使用索引Format('x=%p',[nil]);//'x=00000000'//指针Format('x=%1.1e',[12.0]);//'x=1.2E+001'//科学记数法Format('x=%%',[]);//'x=%'//得到"%"S:=Format('%s%d',[S,I]);//S:=S+StrToInt(I);//连接字符串去除字符串中所有空格,字符串替换字符串str:=StringReplace(str, ' ', '', [rfReplaceAll]);functionStringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;数组和string字符串之间拷贝数据.var buf:array [0..63] of char;name:string;......name:=name+#13+#10+'hello!'+#13+#10+''; strpcopy(pchar(@buf),name);high(buf)取得数组最大值,此处为63low(buf)获得数组最小值,此处为0varstrs:TStringList;beginstrs:=TStringList.Create;strs.Delimiter:=' ';strs.DelimitedText:='I am a programer';strs[0]strs[1]等就是去除了所有空格的一个个单词了字符串string常用处理函数uses StrUtils;LeftStr(str, 3); // 读取最左边的3个字符RightStr(S, 3); // 读取最右边的3个字符Delete(str, 16, 1);Copy(str, 3, 4);还有MidStr用于中文拷贝,如:MidStr('电脑报', 1, 1); Insert('h', str, 2);LowerCase(str); // 将str变为小写UpperCase(str); // 将str变为大写Pos('Like', 'I Like Reading!'); // 查找Like的位置,此处为3,如果没有返回0Trim(str); // 删除头尾的所有空格TrimLeft(str);TrimRight(str);===================var S: String;arrText: array of Char; // 定义一个动态数组SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。
Delphi的类和对象(⼆)-类的属性unit Unit2;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;procedure Button1Click(Sender: TObject);end;//TMyClass1 类⾥⾯只有两个字段(变量来到类⾥⾯称做字段)TMyClass1 = classFName: string; {字段命名⼀般⽤ F 开头, 应该是取 field 的⾸字母}FAge: Integer; {另外: 类的字段必须在⽅法和属性前⾯}end;{这个类中的两个字段, 可以随便读写; 在实际运⽤中, 这种情况是不存在的.}//TMyClass2 类⾥⾯包含两个属性(property)、两个⽅法、两个和 TMyClass1 相同的字段TMyClass2 = classprivateFName: string;FAge: Integer;procedure SetAge(const Value: Integer);procedure SetName(const Value: string);publishedproperty Name: string read FName write SetName;property Age: Integer read FAge write SetAge stored True default88;//设置默认值并将属性值存储到窗体⽂件中(.dfm)end;//TMyClass3继承⾃TMyClass2TMyClass3 = class(TMyClass2)publicproperty Age NoDefault;{//当在⽗类中声明了⼀个带有默认值的属性后,要对其进⾏覆盖时,如果不指定新的默认值,应使⽤NoDefault关键字}end;{但这⾥的字段: FName、FAge 和⽅法: SetAge、SetName 是不能随便访问的,因为, 它们在 strict private 区内, 被封装了, 封装后只能在类内部使⽤.属性⾥⾯有三个要素:1、指定数据类型: 譬如 Age 属性是 Integer 类型;2、如何读取: 譬如读取 Age 属性时, 实际上读取的是 FAge 字段;3、如何写⼊: 譬如希尔 Age 属性时, 实际上是通过 SetAge ⽅法.属性不过是⼀个桥.通过属性存取字段和直接存取字段有什么区别?通过属性可以给存取⼀定的限制,譬如: ⼀个⼈的 age 不可能超过 200 岁, 也不会是负数; ⼀个⼈的名字也不应该是空值.看 implementation 区 TMyClass2 类的两个⽅法的实现, 就增加了这种限制.}varForm1: TForm1;implementation{$R *.dfm}{ TMyClass2 }procedure TMyClass2.SetAge(const Value: Integer);beginif (Value>=0) and (Value<200) thenFAge := Value;end;procedure TMyClass2.SetName(const Value: string);beginif Value<>''thenFName := Value;end;//测试:procedure TForm1.Button1Click(Sender: TObject);varclass1: TMyClass1;class2: TMyClass2;beginclass1 := TMyClass1.Create;class2 := TMyClass2.Create;class1.FAge := 1000; {TMyClass1 中的 FAge 字段可以接受⼀个离奇的年龄}class2.Age := 99; {通过 TMyClass2 中的 Age 属性, 只能赋⼀个合理的值}//class2.FAge := 99; {TMyClass2 中的 FAge 字段被封装了, 在这⾥⽆法使⽤}class1.Free;class2.Free;end;end.属性的存储: storedproperty ButtonSize: Integer read FButtonSize write SetButtonSize default 0;property Color: TColor read FColor write SetColor default clBtnHighlight;property Increment: TScrollBarInc read FIncrement write FIncrement stored IsIncrementStored default 8;property Margin: Word read FMargin write FMargin default 0;property ParentColor: Boolean read FParentColor write SetParentColor default True;property Position: Integer read FPosition write SetPosition default 0;property Range: Integer read FRange write SetRange stored IsRangeStored default 0;property Smooth: Boolean read FSmooth write FSmooth default False;property Size: Integer read FSize write SetSize default 0;property Style: TScrollBarStyle read FStyle write SetStyle default ssRegular;property ThumbSize: Integer read FThumbSize write SetThumbSize default 0;property Tracking: Boolean read FTracking write FTracking default False;property Visible: Boolean read FVisible write SetVisible default True;这是类TControlScrollBar中的属性定义,其中的Range属性中存在stored IsRangeStored定义。
delphi语言基础知识:数据类型、表达式、函数,希望对大家有所帮助.一、数据类型整数类型integer -32768~32767短整型shortint -128~127长整型longint -2147483648~2147483647字节型type 0~255字型word 0~65535实数型real:包括正实数、负实数和实数零。
实数的绝对值在1E-38到1E+38之间。
形式有两种:⑴十进制表示法人们日常使用的带小数点的表示方法。
如0.0,-0.0,5.61,-8.0,等都是实数形式。
⑵科学记数法科学记数法是采用指数形式的表示方法,如1.25×105可表示成1.25E+05。
在科学记数法中,字母“E”表示10这个“底数”,而E之前为一个十进制表示的小数,称为尾数,E之后必须为一个整数,称为"指数"。
如-1234.56E+26 , 0.268E-5 , 1E5是合法形式,而.34E12 , 2.E5 , E5 ,E,1.2E+0.5都不是合法形式的实数。
和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算整数的运算速度慢且无法像整数那样精确表示,只能近似表示。
如2.03.0比23的运算慢。
字符型char 括在两个单引号中的字符:‟a‟表示字符;a表示标识符,‟3‟ 表示字符;3表示整数值布尔型boolean布尔型有两个值,真和假,分别用标准常量名true和false表示,序号分别为1和0。
二、常量在程序运行过程中,其值不能被改变的量称为常量。
如12,14.8,'abc',true等。
Pascal中有一个标准标识符Maxint,它代表所使用的计算机系统允许的最大整型数,而最小的整型数即为-Maxint-1。
Turbo Pascal还定义了长整数常量MaxLongInt,其值为2147483647。
字符常量:是由字符组成,所有字符来自ASCII字符集,共有256个字符。
DELPHI语法基础注释在Pascal中,注释括在大括号中或带星号的圆括号中。
Delphi 也认可C++ 风格的注释,即把注释放在双斜线后。
例如{this is a comment}(* this is another comment *)// this is a comment up to the end of the line第一种注释方式较简略,使用也较为普遍;第二种方式在欧洲使用较广,因为欧洲的键盘缺少大括号;第三种方式的注释是从C++借用来的,只在32位版本的Delphi中可用,它在给一行代码加短注释时非常有用。
上述三种不同的注释方式有益于进行嵌套注释。
例如你要注销一段代码,而代码行中又包含真正的注释行,这时采用同一种注释方式是不对的:{ ... code{comment, creating problems}... code }正确的方法是插入第二种注释方式:{ ... code//this comment is OK... code }注意:如果左大括号或圆括号-星号后面跟美元符号($),那么其中的内容就成了编译指令,如{$X+}。
使用大写字母Pascal 编译器(不象其他语言的编译器)不考虑字符的大小写,因此标识符Myname、MyName、myname、myName、和MYNAME是完全相同的。
总体上来说,这是Pascal 的一大优点,因为在大小写敏感的语言中,许多语法错误是由不正确的大写引起的。
然而大小写不敏感也有不便之处:第一,你必须注意大小写不一致的标识符实际上是相同的,以避免把他们当成不同的元素使用;第二,你必须尽量保持大写使用的一致性,以提高代码的可读性。
大写使用的一致性不是编译器强制要求的,但是保持大写使用的一致性是值得提倡的好习惯。
一个常用的方法是将每个标识符的第一个字母大写,标识符若由几个词组合而成(中间不能插入空格),每个词的第一个字母应大写:MyLongIdentifierMyVeryLongAndAlmostStupidIdentifier此外,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。
Delphi基本语法格式1. 常量:固定值,不可变数。
1)const常量名 = 常量值(表达式);2)resourcestring常量名 = 字符串(常量);2.变量1)定义Var 名字1,名字2,…名字n:类型;2)命名原则(参考)变量名字 = 类型(缩写) + 作用域(简称) + 确切含义名称3)三种赋值格式变量名:= 值;变量名1: = 变量2;变量名:= 过程或函数的调用;3.类型常量1)类型常量是全局变量并不是一个常量,它进行了预初始化值。
2)定义Const名字:类型 = 值;3)种类简单的类型常量数组类型常量记录类型常量集合类型常量指针类型常量过程类型常量4.数据类型5.用户自定义类型子域类型Type名称=初值…终值;枚举类型Type名称=(值1,值2,值3…值N);数组类型Type名称=Array[下标定义]of类型名Type 名称= [下标定义1,下标定义2…下标定义N] of元素类型或名称= [下标定义1of…Array [下标定义N] of元素类型集合类型Type 名称=set of元素类型指针类型Type名称= ^结点类型记录类型Type名称=Record域名1:类型;域名1:类型;……域名N:类型;end;文件类型Type名称=file of元素类型语句简单语句X := Y + Z; // assignmentRandomize; // procedure call复合语句beginA := B;C := A * 2;end;end之前的最后一条语句末尾分号不是必需的,你可以写成:beginA := B;C := A * 2end;赋值语句在Pascal 语言中赋值语句用冒号-等号操作符“:=”,条件语句If语句对if-then型语句,仅当条件满足时,语句才执行;if CheckBox1.Checked thenShowMessage ('CheckBox1 is checked')对if-then-else型,if语句在两条语句中选择一条执行if CheckBox2.Checked thenShowMessage ('CheckBox2 is checked')elseShowMessage ('CheckBox2 is NOT checked');要注意的是,不能在第一句之后、else 关键词之前加分号,否则编译器将告知语法错误。
delphi语法if 表达式 thenbegin语句一;endelse if 表达式二 thenbegin语句二;.......endelsebegin语句n;end;if MessageDlg('Welcome to my Delphi application. Exit now?', mtConfirmation, [mbYes, mbNo,mbok], 0) = mrYes then begin语句endend;end.判断文件是否存在if FileExists('C:\Windows\RegEdit.Exe') =true/false then ShowMessage('regedit.exe文件存在!');opendialog运行,判断打开文件的位置if OpenDialog1.Execute thenbeginshowmessage(OpenDialog1.FileName);end;删除文件trydeletefile('文件路径和文件名');exceptshowmessage('error');end;直接删的话,就用上面这段代码,已经考虑到了如果当文件不存在时的情况FormatDateTime用法声明为:function FormatDateTime(const Format: string; DateTime: TDateTime): string; overload;返回值是一种格式化后的字符串,重点来看Format参数中的指令字符c 以短时间格式显示时间,即全部是数字的表示FormatdateTime('c',now);输出为:2004-8-7 9:55:40d 对应于时间中的日期,日期是一位则显示一位,两位则显示两位FormatdateTime('d',now);输出可能为1~31dd 和d的意义一样,但它始终是以两位来显示的FormatdateTime('dd',now);输出可能为01~31ddd 显示的是星期几FormatdateTime('ddd',now);输出为: 星期六dddd 和ddd显示的是一样的。
Delphi基础语法的学习笔记和注意事项总结以下是我在⾃学Delphi的时候,对⼀些注意点的简单总结,并没有什么系统性可⾔,只是⼀个学习时顺⼿记下的笔记,主要为了当时加深对知识的印象,并没有希望能在以后的复习和使⽤Delphi中有什么多⼤的参考作⽤。
缺少Delphi的各种数据类型的介绍……知识点。
1. Delphi编译器⾃动对全局变量符初值。
当程序开始时,所有的整型变量赋值为0,浮点数赋值为0.0,指针为null,字符串为空等等,因此,在源代码中不必对全局变量赋0初值2. Object Pascal允许在const和var声明的时候,⽤编译期间的函数,这些函数包括Ord()、Chr()、Trunc()、Round()、High()、Low()、Sizeof(),例如下⾯的所有代码都是合法的typeA = array[1..2] of Integer;constw: Word = Sizeof(Byte);vari: Integer = 8;j: SmallInt = Ord(‘a’);L: Longint = Trunc(3.1415926);x: ShortInt = Round(2,71828);B1: Byte = High(A);B2: Byte = Low(A);C: char = Chr(46);//注意在定义变量的类型并赋值时,使⽤ = ⽽不是 :=3. 如果要移植Delphi1.0的16位代码,请记住,⽆论是Integer还是Cardinal类型都已经从16位扩展到32位。
更准确的说,在Deiphi2和Delphi3中,Cardinal被看做是31位的⽆符号证书,在Delphi4以后,Cardinal才真正成为32位的⽆符号数4. 警告:在Delphi1、2和3中,Real是6字节的浮点数,这是Pascal特有的数据类型,和其他的语⾔不兼容。
在Delphi4中,Real是Double类型的别名,6字节的浮点数仍然有,但现在是Real48.通过编译开关 {$REALCOMPATIBILITY ON} 可以是Real仍代表6字节的浮点数5. 虽然AnsiString在外表上跟以前的字符串类型⼏乎相同,单它是动态分配的并有⾃动回收功能,正是因为这个功能AnsiString有时被称为是⽣存期⾃管理类型。
Delphi中DBEdit组件使用方法出处:多特软件站时间:2011-04-22 人气:325我要提问我来说两句用Delphi开发简单的WebMail程序Delphi 中压缩流和解压流的应用核心提示:Delphi的DBEdit组件位于组件板的Data Controls页上,用于编辑数据表当前记录某字段的值。
相关下载:DelphiV7.0Delphi的DBEdit组件位于组件板的Data Controls页上,用于编辑数据表当前记录某字段的值。
DBEdit 组件的主要属性与方法如下:1、主要属性(1)DataSource用于选择数据源,使DBEdit组件通过数据源与数据表连接。
当DBEdit通过数据源与数据表连接后,显示数据表的哪一个字段,则是由DataField字段决定的。
(2)DataField用于选择数据字段,如果DataField设置为TB0602,则DBEdit用于显示与编辑字段TB0602的值。
DataSource与DataField是数据界面组件用于选择数据表与字段的最重要的2个属性。
(3)Enabled当Enabled为True时数据界面组件有效,此时组件可用于编辑操作。
当Enabled为False时,数据界面组件无效,运行后该组件呈灰色,不能用鼠标或键盘对该组件进行操作。
(4)ReadOnly当ReadOnly为True时,数据只能读不能修改;为False时,数据可读可写。
默认值为False。
以上属性也是大多数数据界面组件的共同属性,因此在下面的组件介绍中,不再重复介绍上述属性。
2、主要方法(1)OnChange当字段内容发生变化时触发该事件。
(2)OnClick用鼠标单击组件触发该事件。
(3)OnDblClick用鼠标双击组件触发该事件。
(4)OnKeyDown当键按下时触发该事件。
(5)OnKeyUp当键松开时触发该事件。
(6)OnMouseDown当鼠标按下时触发该事件。
(7)OnMouseUp当鼠标松开时触发该事件。
第2章Object Pascal语言基础Delphi的编程语言是Object Pascal,即面向对象的Pascal语言。
自Delphi 7 开始,Object Pascal语言改称为Delphi 语言。
第1节保留字和标识符一、保留字保留字是由系统使用的具有特殊含义的单词(如And、If、For、Var等),详见教材16~17页表2.1。
二、指令符指令符也是由系统使用的具有特殊含义的单词(如Public、Private等),详见教材17页表2.2。
三、标识符标识符(Identifiers)用于表示常量、变量、域(字段)、类型、属性、过程、函数、程序、单元、库和包(packages)的名称。
Object Pascal标识符的声明和使用应遵循以下规定:∙长度任意,但仅前255个字符有效。
∙首字符必须是字母或下划线。
∙不能含有空格,中间的字符可以是字母、数字和下划线。
∙不能使用保留字(reserved words)作为标识符。
∙不区分大小写,例如sName与sname等价。
第2节注释三种注释形式:{注释内容}(*注释内容*)//注释内容注意:如果注释符{之后紧跟一个美元符号$(如{$R *.res}),表示该语句是一条编译指令,它与普通的注释不同,通常由Delphi自动生成,用于设置编译过程,不要修改或删除它。
第3节常量和变量一、常量1. 普通常量如:123,-100,3.14,'abc',True等。
2. 符号常量符号常量用保留字Const声明,格式如下:Const常量名 = 表达式;例如:ConstPI = 3.1415926535897932385;College = '山东教育学院';Numeric = ['0'..'9']; // 数字字符集合Alpha = ['A'..'Z', 'a'..'z']; // 英语字母集合AlphaNum = Alpha + Numeric; // 集合的并2. 变量变量声明的格式:var变量名表:类型;例如:varX, Y, Z: Double;I, J, K: Integer;S1, S2: String;Digit: 0..9; // 子界类型Flag: Boolean;单元级或全局变量可以在声明时初始化(每个声明语句仅限一个变量)。
例如:varx: Integer = 0;S: string = 'abc';第4节数据类型概述1. 数据类型分类Object Pascal的数据类型可分为以下几类:∙简单类型:包括有序类型(整型、字符型、布尔型、枚举型和子界型)和实数类型。
∙字符串类型∙结构类型:包括集合、数组、记录、文件、类、类引用和接口类型。
∙指针类型∙过程类型∙可变类型2. 预定义类型与自定义类型有些数据类型是在Object Pascal中预先定义好的,编译器能够自动识别,无须编程者定义即可直接使用(如整型、实型、字符型、字符串型等)。
这些数据类型属于预定义类型(predefined types),或称内置类型(built-in types)。
另外一些数据类型在使用前必须由编程者定义(如枚举、子界、结构类型等),这些数据类型属于自定义类型(user-defined types)。
自定义类型需用type保留字声明:type自定义类型名称 = 类型;一、简单类型(Simple)包括有序类型和实数类型。
特点:一个简单类型的变量只存储单一值,它占用的内存大小相对固定。
1. 有序类型有序类型(Ordinal types)包括整数、字符、布尔、枚举和子界类型。
有序类型定义一组有序的值,其中除第一个值以外均有一个惟一的前接值(predecessor),除最后一个值以外均有一个惟一的后继值(successor)。
每个值都有一个序号,在多数情况下,若某值的序号为n,则其前接值的序号为n-1,后继值的序号为n+1。
整数类型值的序号是其本身;子界类型保留其基类型的序号;其他类型中第一个值的默认序号为0,后续值序号依次加1。
枚举类型的声明可以覆盖默认值。
以下是操作有序类型的常用预定义函数:High和Low亦可用于短缩字符串类型和数组。
例如:Byte 类型的最高值为255,因此,High(Byte)返回255。
2的后继值是3,因此Succ(2)返回3。
标准过程Inc和Dec分别使有序变量的值加1和减1。
例如,Inc(I) 与 I := Succ(I) 等价;若I为整型变量,则Inc(I)相当于I := I + 1。
(1)整数类型∙∙(2)字符类型Char为通用类型。
常用函数:Chr函数:Chr(65)返回'A',与#65等价。
“#”常用于生成控制字符。
例如,下面的表达式表示在两个字符串之间插入回车换行符:'字符串1'#13#10'字符串2'(3)布尔类型Boolean为首选类型。
注意:上表后两列中的0、1、非0只是序号,而不是布尔值本身。
在Object Pascal中,布尔表达式不能与整数或实数转换。
例如,若X是一个整型变量,则以下语句将产生编译错误:if X then ...;可以用以下语句:if X <> 0 then ...;(4)枚举类型(Enumerated types)枚举类型是一组有序的标识符。
枚举类型没有固定的范围,须由程序员定义。
这种需要编程者定义的数据类型称为“自定义类型”。
声明:type枚举类型名= (标识符列表);例如:typeTMyColor = (mcRed, mcGreen, mcBlue);Answer = (ansYes, ansNo);var Color1, Color2: TMyColor; Ans1: Answer;(标识符列表)本身起着类型名的作用,因此亦可直接声明变量:var Color1, Color2: (mcRed, mcGreen, mcBlue);(5)子界类型(Subrange types)子界类型是某一有序类型值的子集。
子界类型属于自定义类型。
基类型(base type):在子界、集合、数组、指针等自定义类型声明中引用的数据类型。
注意:区分基类型(base type)与基本类型(Fundamental type)。
声明:type子界类型名 = 下界..上界;例如:{ 声明一个枚举类型 }type TColors = (Red, Blue, Green, Yellow, Orange, Purple, White, Black);{ 定义子界类型,它的“基类型”是上面声明的枚举类型TColors }type TMyColors = Green..White;又如:typeTGrade = 0..100; //基类型是整数类型TLetter = 'A'..'Z'; //基类型是字符类型var MyGrade: TGrade; MyLetter: TLetter;“下界..上界”本身起着类型名的作用,因此可直接声明变量:var x, y: 1..200;注意:为子界类型的变量赋值时,不应超出其上下界。
2. 实数类型3. 日期和时间在Delphi内部采用实数(Double)存取日期和时间信息。
为了便于使用,Delphi在系统单元(System.pas)中定义了TDateTime数据类型(映射为Double)。
该类型数据的整数部分代表日期(0=1899年12月30日),小数部分代表时间(时刻÷24),可以分别进行算术运算。
以下是系统定义的常用日期时间函数:●Date:返回当前系统日期●Time:返回当前系统时间●Now:返回当前系统日期和时间以下函数将日期时间型数据转换为字符串:function DateTimeToStr(DateTime: TDateTime): string; //日期和时间function DateToStr(Date: TDateTime): string; //日期function TimeToStr(Time: TDateTime): string; //时间以下函数将日期时间格式的字符串转换为日期时间型数据:function StrToDateTime(const S: string): TDateTime;function StrToDate(const S: string): TDateTime;function StrToTime(const S: string): TDateTime;二、字符串类型保留字string默认为AnsiString类型。
例如:变长字符串:var S1, S2: string;定长(短)字符串(最大长度255):var MyString: string[100];提示:●标准函数Length可以获取字符串的长度。
●对字符串中的单个字符可以通过其位置序号存取。
例如:S1[1]表示字符串S1中的第1个字符。
●字符串常量内的两个连续的单引号代表一个被引用的单引号。
例如:'It''s a football.' {It's a football.}'''' {'}三、结构类型特点:结构类型(Structured types)的变量可含有多个值,它占用的内存大小不固定。
1. 集合(Set)类型集合是一组特定同类有序类型(称为基类型)值的元素,这些元素没有内在的顺序。
集合中最多可有256个基类型值,每个值的序号必须在0~255之间。
(1)集合类型的声明和应用声明:type集合类型名= set of基类型;由于集合类型中元素的个数及其序号受限,因此,通常用子界声明集合类型。
例如:type TMonth = set of 1..12; // 声明集合类型,基类型为整数类型子界...var M1, M2:TMonth; // 声明集合变量亦可用set of ... 结构直接声明变量:var M1: set of 1..12; // 声明集合变量...M1:=[1,3,5,7,8,10,12]; // 为集合变量赋值以下是set of ... 结构的几个示例:set of 'a'..'z'set of Byteset of (Club, Diamond, Heart, Spade)set of Char若需判断某集合中是否有某个成员,用in操作符。
例如:if 5 in M1 then ...(2)集合构造器(Set constructors)集合构造器代表一组集合类型的值,格式为:[ 项1, ..., 项n ]其中每一项既可以是代表基类型中某个值的表达式,也可以是用两个句点(..)隔开的成对表达式。