文档库 最新最全的文档下载
当前位置:文档库 › Delphi 中串口通讯的实现

Delphi 中串口通讯的实现

Delphi 中串口通讯的实现
Delphi 中串口通讯的实现

Delphi 中串口通讯的实现

张海航

Delphi 是新一代可视化开发工具,它具有功能强大、简便易用和代码执行速度快等特点,是全球公认的快速应用开发工具技术的先驱者,它越来越在构架企业信息系统方面发挥着重要作用。由于Delphi 这些显著特点,许多程序员选择Delphi作为开发工具编制各种应用程序。但是,令人惋惜的是Delphi没有自带串口通讯的控件,在它的帮助文档里也没有提及串口通讯,这就给编制通讯程序的开发人员带来众多麻烦,影响了开发进度,下面就这一技术进行讨论。

用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是可实现的功能更强大,应用面更广泛,更适合于编写较为复杂的低层次通信程序。相比较而言,利用SPComm 控件则相对较简单,该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。

使用控件这一方法容易掌握,而SPCOMM支持多线程,所以SPCOMM控件的应用更加广泛。结合实例详细介绍SPCOMM的使用。

一.SPCOMM控件的安装

1.选择下拉菜单Component的第二项Install Component 。

图1

弹出图1所示的窗口,在Unit file name 处填写控件SPCOMM控件所在路径,其它可用默认值,点击OK按纽。

2.安装成功后,system控件面板中将出现一个红色控件COMM。现在使用COMM控件可以象Delphi自带控件一样使用。

二.SPCOMM的主要属性,方法和事件

1.属性

CommName:填写COM1,COM2…等串口的名字,在打开串口前,必须填写好此值。

BaudRate:设定波特率9600,4800等,根据实际需要来定,在串口打开后也可更改波特率,实际波特率随之更改。

ParityCheck:奇偶校验。

ByteSize:字节长度_5,_6,_7,_8等,根据实际情况设定。

Parity:奇偶校验位

pBits:停止位

SendDataEmpty:这是一个布尔属性,为true时表示发送缓存为空,或者发送队列里没有信息;为False 时表示表示发送缓存不为空,或者发送队列里有信息。

2.方法

Startcomm过程用于打开串口,当打开失败时通常会报错,错误主要有7种:

⑴串口已经打开;

⑵打开串口错误;

⑶文件句柄不是通讯句柄;

⑷不能够安装通讯缓存;

⑸不能产生事件;

⑹不能产生读进程;

⑺不能产生写进程;

StopComm过程用于关闭串口,没有返回值。

函数WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word ): boolean 用于发送一个字符串到写线程,发送成功返回true,发送失败返回false, 执行此函数将立即得到返回值,发送操作随后执行。函数有两个参数,其中 pdatatowrite是要发送的字符串,dwsizeofdatatowrite 是发送的长度。

3.事件

OnReceiveData : procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object 当输入缓存有数据时将触发该事件,在这里可以对从串口收到的数据进行处理。Buffer中是收到的数据,bufferlength是收到的数据长度。

OnReceiveError : procedure(Sender: TObject; EventMask : DWORD)

当接受数据时出现错误将触发该事件。

三.SPCOMM的使用

下面,我们结合一个串口通讯的例子来说明SPCOMM的使用。

为了实现PC与单片机8051之间的通讯,首先要调通它们之间的握手信号,假定它们之间的通讯协议是,PC到8051一帧数据6个字节,8051到PC一帧数据也为6个字节,当PC发出(F0,01,FF,FF,01,F0)后能收到这样一帧(F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。在PC方要发送及接受数据需要以下步骤:

1.创建一个新的工程COMM.DPR,把窗体的NAME属性改为FCOMM,把窗体的标题改为测试通讯,添加控件。

对COMM1(黑色矩形围住的控件)进行属性设计,设波特率4800,校验位无,字节长度_8,停止位_1,串口选择COM1。Memo1中将显示发送和接受的数据。选择File/Save As将新的窗体存储为Comm.pas。

2.编写源代码

变量说明

var

FCOMM: TFCOMM;

Viewstring:string;

i:integer;

rbuf,sbuf:array[1..6] of byte;

打开串口

procedure TFCOMM.FormShow(Sender: TObject);

begin

comm1.StartComm;

end;

关闭串口

procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);

begin

comm1.StopComm;

end;

发送数据

自定义的发送过程

procedure senddata;

var

i:integer;

commflg:boolean;

begin

viewstring:="";

commflg:=true;

for i:=1 to 6 do

begin

if not https://www.wendangku.net/doc/be11611117.html,m1.writecommdata(@sbuf[i],1) then begin

commflg:=false;

break;

end;

sleep(2); {发送时字节间的延时}

viewstring:=viewstring+inttohex(sbuf[i],2)+" "; end;

viewstring:="发送"+viewstring;

fcomm.memo1.lines.add(viewstring);

fcomm.memo1.lines.add("");

if not commflg then messagedlg("发送失败!",mterror,[mbyes],0);

end;

procedure TFCOMM.Btn_sendClick(Sender: TObject);{发送按钮的点击事件} begin

sbuf[1]:=byte($f0); {帧头}

sbuf[2]:=byte($01); {命令号}

sbuf[3]:=byte($ff);

sbuf[4]:=byte($ff);

sbuf[5]:=byte($01);

sbuf[6]:=byte($0f); {帧尾}

senddata;{调用发送函数}

end;

接收过程

procedure https://www.wendangku.net/doc/be11611117.html,m1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);

var

i:integer;

begin

viewstring:="";

move(buffer^,pchar(@rbuf^),bufferlength);

for i:=1 to bufferlength do

viewstring:=viewstring+inttohex(rbuf[i],2)+" ";

viewstring:="接受"+viewstring;

memo1.lines.add(viewstring);

memo1.lines.add("");

end;

如果memo1上显示发送F0 01 FF FF 0F 和接受F0 01 FF FF F0 这表示串口已正确的发送出数据并正确的接受到数据,串口通讯成功。

delphi面试题及答案

delphi面试题及答案 【篇一:delphi程序期末试题答案】 一、单选题(每小题2分,共30分) 1.在 radiogroup 组件中有 4 个单选框,当选中第 2 个单选框时,radiogroup 组件中的 itemindex 属性值应为(b)。 a.0 b.1c.2d.3 2.函数和过程的区别为(a)。 a.函数执行后返回一个值,而过程不需返回值b.过程执行后返回一个值,而函数不需返回值c.过程在被调用时,能执行某种特殊功能并能返回到调用它的地方d.函数在被调用时,能执行某种特殊功能并能返回到调用它的地方3.32 and 27 的值是(b)。 a.59b.0c.27d.32 4.窗体与数据模块的扩展名是(b)。 a..dcu b..dfm c..pas d..dpr 5.delphi 中用什么函数来析构一个组件(c)。 a.constructor b.destroy c.free d.create 6.一个指针变量ptr 的域成员 fs 访问的方法是(c)。 a.ptr-fs b.ptr.fsc.ptr^fs d.ptr@fs 7.type aarrays=[1?8,1?5] of integer ,该类型定义了多少个下标元素(d)。 a.45 b.54 c.48 d.40 8.delphi 的所有类都是从什么类继承下来的(b)。 a.tcomponent b.tobject c.tstream d.tnull 9.定义构造函数时用到的保留字是(c)。 a.class b..implementation c.create d.construction 10.下列组件中属于可视组件的是哪一个(d)。 a.tdatasource b.topendialog c.ttable d.tscrollbar 11.设有过程 procedure pro(var x,y:integer); 变量 a , b 为整型 变量,其值分别为 5、6,则合法的过程调用语句是(a.pro(5,6) b.pro(5,b) c.pro(a,6)d.pro(a,b) 12.下列组件中不能获取焦点的是(b)。 a.tedit b.tlabelc. trichedit d.ttreeview13.定义抽象类必 须使用的指令字是(a)。 a.abstractb.virtualc.dynamicd.override” 14.delphi是哪个公司的产品(c)。 a. microsoft b.ibm c.borland d.dom

delphi常用函数大全

delphi常用函数大全(转) Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中 Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块 AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写) AnsiCompareText函数比较字符串(不区分大小写) AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程 BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录 Checked属性确定复选框选中状态 Chr函数返回指定序数的字符 CloseFile命令关闭打开的文件 Color属性标签的颜色 Columns属性显示的列数 CompareStr函数比较字符串(区分大小写) Concat函数合并字符串 Continue命令继续for、while、repeat的下一个循环 Copy函数返回一字符串的子串 Cos函数余弦函数 Ctl3D属性是否具有3D效果 Cursor属性鼠标指针移入后的形状 Date函数返回当前的日期 DateTimeToFileDate函数将DELPHI的日期格式转换为DOS的日期格式DateTimeToStr函数将日期时间格式转换为字符串DateTimeToString函数将日期时间格式转换为字符串 DateToStr函数将日期格式转换为字符串

Delphi程序设计复习题

《Delphi程序设计》复习题 一、单项选择题 1、下面哪句话对Delphi的描述是正确的()。 A.只能用于数据库客户端开发的工具B.Delphi的编程语言全部是面向过程的C.Delphi的编程语言是Java D.面向对象的可视化的开发环境 2、在Delphi中,建立一个文本编辑区域,可采用下列()。 A、命令按钮 B、文本标签控件 C、Edit控件 D、Timer控件 3、表达式60 +19 div 2 的值是() A.67 B.79 C.69 D.80 4、一个Delphi应用程序必有一个()文件和至少一个单元文件。 A) 执行程序B) 项目C) 数据D)图形 5、最适合于在工具栏上放置的工具按钮是() A.Button B.RadioButton C.SpeedButton D.BitBtm 6、Delphi应用程序设计基于()语言。 A) Basic B) C++ C) Pascal D) Object Pascal 7、下列表达式中()不是布尔表达式。 A) A=3 B) A div B C) A and B D) A>B 8、“x 是小于100的非负数”的Object Pascal表达式是()。 A.0 ≤x < 100 B.x >= 0, x<100 C.(x >=0) AND (x < 100) D.(x >= 0 ) OR (x<100) 9、利用Image对象的哪个属性设置,可以使加载的图像自动放大或缩小,以适应Image的显示区域() A.Stretch B.AutoSize C.Align D.Center 10、工具栏上的一个SpeedButton按钮如果要设置为状态按钮,则正确设置的方法是() A.将SpeedButton按钮的GroupIndex属性设置为0,且AllowAllUp属性设置为True。 B.将SpeedButton按钮的GroupIndex属性设置为0,且AllowAllUp属性设置为False。 C.将SpeedButton按钮的GroupIndex属性设置为非0值,且AllowAllUp属性设置为True。 D.将SpeedButton按钮的GroupIndex属性设置为非0值,且AllowAllUp属性设置为False。 11、要改变一个对象的高度,应使用属性()。 A、Font B、ForcColor C、Name D、Height 12、表达式30 +19 div 2 的值是() A.37 B.49 C.39 D.40 13、下列合法的变量名是()。 A、na + e B、e- 3r C、r_3 D、5we

Delphi常见错误代码

Delphi常见错误代码及中文解释 ';' not allowed before 'ELSE' ElSE前不允许有“;” '' clause not allowed in OLE automation section 在OLE自动区段不允许“”子句 '' is not a type identifier 不是类型标识符 '' not previously declared as a PROPERTY 前面没有说明PROPERTY 'GOTO

delphi1

一、单选 1)下列符号哪一个是Delphi中的合法变量名() A 6book B if C name[1] D count1 2)下列常量说明中哪一个是合法的() A const c:=(b>4.5); B const c:8.6; C const c=3.2; D const c:=”book ”; 3)下列实数中哪个是不合法的( ) A 0.45E+02 B .25+2 C 25E -3 D 24.67 4)设n为整型变量,其值为4568,表达式(n mod 1000)div100 ( ) A 分离出个位数字B分离出千位数字 C 分离出百位数字D分离出十位数字 5)有下面的程序段: a:=false; b:=false; c:=true; x:=20; if a then x:=x-10; x:=30; if b then if c then x:=34; else x:=15; 假设所有变量都已定义,程序段执行后x的值() A 15 B 20 C 34 D 30 6)有下面的程序段: ch1:= 'z'; ch2:= 'x'; if ch1 <>'x' then case ch2 of 'x': case ch1 of 'z': s:= 'xy'; 'y': s:='xz'; end; 'y': s:='yy'; end; 假设所有变量均已说明,程序段被执行后s的值是()。 A 'xz' B 'yy' C 'xy' D xy 7)有下面的程序段: i:= 1; repeat n:= i * i; i:=i+2; until n>2*i; 假设所有变量均已说明,循环体执行的次数()。 A 1 B 2 C 3 D 4 8)有下面的程序段: s:= 100; n:= 3; for ch:= 'a' to 'e' do if not odd(n) then s:=s-n; n:=n+5; 假设所有变量均已说明,s的值()。 A 100 B 97 C 61 D 74 9)以下正确的枚举类型定义是:( ) A type vowel=('a','e','i','o','u'); B type num=(1..3,8..10); C type color=(red,blue,greeen); D type realtype=(1.5,2.5,3.5,4.5); 10)集合表达式[1,2,3]+[4,5,6,1,2]的值为:( ) A[1,2,3,4,5,6,1,2] B [1,2,3] C [4,5,6,1,2] D [1,2,3,4,5] 11)Delphi没有用到的文件类型有() A、.frm B、.pas C、.dfm D、.dpr

delphi try except语句 和 try finally语句用法以及区别

一、异常的来源 在Delphi的应用程序中,下列的情况都比较有可能产生异常。 (1)文件处理 (2)内存分配 (3)Windows资源 (4)运行时创建对象和窗体 (5)硬件和操作系统冲突 二、异常的处理 (1)try…except…end; 在try体内的代码发生异常时,系统将转向except部分进行异常的处理。这是Delphi处理异常的最基本的方式之一。 (2)try…finally…end; 这种异常处理结构一般用于保护Windows的资源分配等方面,它确保了无论try体内的代码是否发生异常,都需要由系统进行最后的统一处理的一些Windows对象的正确处理。 和try…except…end不同,该结构的finally部分总被执行。 (3)不存在try…except…finally…end结构来既处理异常,又保护资源分配的结构,但是,try…except…end结构允许嵌套到try…finally…end结构中,从而实现既处理异常,又保护资源的分配。 三、异常的精确处理 (1)定义一个异常。 在Delphi中,每个异常都是Exception[1]类的一个派生类[2]。因此,定义一个异常就是定义一个Exception类的派生类。 type EMyException = class(Exception); 当然,基类可以是Exception或者Exception的任何一个任何层次的派生类。 (2)在程序中抛出一个异常。 根据不同的情况抛出异常是使用异常的最基本的模式。在Delphi中,由raise语句来实现。 【语法】raise 异常类.Creat e(‘异常的缺省说明’); (3)在try…except…end中更加精确的捕捉异常。 使用on E:异常类do…结构可以在do体内处理特定异常类所抛出的异常。 四、异常的调试 在Delphi IDE中,解除“Debugger Options”(可以使用菜单 Tools—>Debugger Options…进行访问)中的Integrated Debugging复选框的勾选状态可以进行异常的调试。 五、异常的补充说明

Delphi程序填空

试卷代号:2235 中央广播电视大学2008—2009学年度第二学期“开放专科”期末考试 Delphi程序设计试题 2009年7月 一、填空题(20分,每空2分) 1.结构化程序设计要求程序中仅采用——三种控制结构,其中每种结构只能有一个入口和一个出口。 2.现实世界中对象具有自己的状态和行为。对应着,面向对象技术中的对象可以具有自己的属性和——。 3. Delphi应用程序中项目文件的扩展名是——。 4. 在设计阶段,利用Image对象的——属性,可以加载一幅图片。 5.时钟组件(Timer)能有规律的以一定时间间隔触发——事件,并执行该 事件过程中的程序代码。为了使计时器控件丁imerl每隔0.5秒就触发一次并执行事件代码,应将Timerl控件的Interval属性设置为——。 6.Delphi程序与数据库之间进行数据交换一般要由多个数据库组件协作完成。如果用户要查询数据库中的一条信息,该指令通过用户界面组件发出,经数据源组件到达数据集组件。数据集组件利用——组件与数据库建立连接,并读取数据库中的数据,而后又经过组件将数据送到用户界面组件中显示。 8.利用对象的LineTo等绘图方法,可以绘制基本图形。 二、单项选择题(30分,每题3分) 1.Delphi程序设计的基本特点是( ) A. 可视化程序设计B.代码程序设计 C. 事件驱动编程D.A和C 2.修改窗体的标题时,应当在属性页中设置的属性是( ) A.Caption B.Name C.Text D.Label 3.“x是小于100的非负数”的ObjectPascal表达式是( ) A.0≤x<100 B.x>=0,x<100 C.(x>=0)AND(x<100) D.(x>=0)OR(x<100) 4.利用Image对象的哪个属性设置,可以使加载的图像自动放大或缩小,以适应Image 的显示区域( ) A.Stretch B.AutoSize C.Align D.Center 5.工具栏上的一个SpeedButton按钮如果要设置为状态按钮,则正确设置的方法是( ) A. 将SpeedButton按钮的Grouplndex属性设置为0,且AllowAllUp属性设置为True B. 将SpeedButton按钮的Grouplndex属性设置为0,且AllowAllUp属性设置为False C.将SpeedButton按钮的Grouplndex属性设置为非0值,且AllowAllUp属性设置为True D.将SpeedButton按钮的Grouplndex属性设置为非0值,且AllowAllUp属性设置为

Delphi代码编写标准详解

Delphi编写标准指南 一、序言 二、通用源代码格式规则 2.1 缩格 2.2 页边空格 2.3 Begin...End 配对 三、Object Pascal 3.1 括号 3.2 保留字和关键字 3.3 过程和函数(例程) 3.3.1 命名/格式化 3.3.2 形式参数 3.3.2.1 格式化 3.3.2.2 命名 3.3.2.3 参数的排序 3.3.2.4 常量参数 3.3.2.5 名称的冲突 3.4 变量 3.4.1 变量的命名和格式 3.4.2 局部变量 3.4.3 全局变量的使用 3.5 类型 3.5.1 大写约定 3.5.1.1 浮点指针类型 3.5.1.2 枚举类型 3.5.1.3 变数和ole变数类型 3.5.2 结构类型 3.5.2.1 数组类型 3.5.2.2 记录类型 3.6 语句 3.6.1 if 语句 3.6.2 case 语句 3.6.2.1 一般性话题 3.6.2.2 格式 3.6.3 while 语句 3.6.4 for 语句 3.6.5 repeat 语句 3.6.6 with 语句 3.6.6.1 一般话题 3.6.6.2 格式 3.7 结构异常处理 3.7.1 一般话题 3.7.2 try...finally的使用 3.7.3 try...except的使用

3.7.4 try...except...else的使用 3.8 类类型 3.8.1 命名和格式 3.8.2 域 3.8.2.1 命名/格式 3.8.2.2 可视化 3.8.3 方法 3.8.3.1 命名/格式 3.8.3.2 使用静态的方法 3.8.3.3 使用虚拟/动态的方法 3.8.3.4 使用抽象的方法 3.8.3.5 属性存取方法 3.8.4 属性 3.8. 4.1 命名/格式 3.8. 4.2 使用存取的方法 四、文件 4.1 工程文件 4.1.1 命名 4.2 窗体文件 4.2.1 命名 4.3 数据模板文件 4.3.1 命名 4.4 远端数据模板文件 4.4.1 命名 4.5 Unit文件 4.5.1 通用Unit结构 4.5.1.1 unit的名字 4.5.1.2 uses子句 4.5.1.3 interface部分 4.5.1.4 implementation部分 4.5.1.5 initialization部分 4.5.1.6 finalization部分 4.5.2 窗体单元 4.5.2.1 命名 4.5.3 数据模板单元 4.5.3.1 命名 4.5.4 一般目的单元 4.5.4.1 命名 4.5.5 构件单元 4.5.5.1 命名 4.6 文件头 五、窗体和数据模板 5.1 窗体 5.1.1 窗体类型命名标准

Delphi异常处理tryexcept语句和tryfin(精)

一、异常的来源在Delphi的应用程序中,下列的情况都比较有可能产生异常。(1)文件处理(2)内存分配(3)Windows 资源(4)运行时创建对象和窗体(5)硬件和操作系统冲突 二、异常的处理(1)try…except…end;在try体内的代码发生异常时,系统将转向except部分进行异常的处理。这是Delphi处理异常的最基本的方式之一。(2)try…finally…end;这种异常处理结构一般用于保护Windows的资源分配等方面,它确保了无论try体内的代码是否发生异常,都需要由系统进行最后的统一处理的一些Windows对象的正确处理。和try…except…end不同,该结构的finally部分总被执行。(3)不存在try…except…finally…end结构来既处理异常,又保护资源分配的结构,但是,try…except…end结构允许嵌套到try…finally…end结构中,从而实现既处理异常,又保护资源的分配。三、异常的精确处理(1)定义一个异常。 在Delphi中,每个异常都是Exception[1]类的一个派生类[2]。因此,定义一个异常就是定义一个Exception类的派生类。type EMyException = class(Exception;当然,基类可以是Exception或者Exception的任何一个任何层次的派生类。(2)在程序中抛出一个异常。根据不同的情况抛出异常是使用异常的最基本的模式。在Delphi中,由raise语句来实现。【语法】raise 异常类.Create(…异常的缺省说明?; (3)在try…except…end 中更加精确的捕捉异常。使用on E:异常类do…结构可以在do体内处理特定异常类所抛出的异常。四、异常的调试在Delphi IDE中,解除“Debugger Options”(可以使用菜单Tools—>Debugger Options…进行访问)中的Integrated Debugging复选框的勾选状态可以进行异常的调试。五、异常的补充说明(1)每一段程序都有可能产生错误!这是软件业的一个不容置疑的现象和规律。事实上,传统的if…else…结构完全可以解决所有的错误,使用Exception机制也没能够回避在最原始的层次,通过遍历可能的情况来产生异常的做法,那么,为什么还要异常机制?答案很清楚:异常提供了一种更加灵活和开放的方式,使得后来的编程者可以来根据实际的情况处理这种错误,而不是使用预先设定好的处理结果。 Delphi7异常处理了解什么是异常和Delphi7中提

Delphi语法基础

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 的一大优点,因为在大小写敏感的语言中,许多语法错误是由不正确的大写引起的。 然而大小写不敏感也有不便之处:第一,你必须注意大小写不一致的标识符实际上是相同的,以避免把他们当成不同的元素使用;第二,你必须尽量保持大写使用的一致性,以提高代码的可读性。 大写使用的一致性不是编译器强制要求的,但是保持大写使用的一致性是值得提倡的好习惯。一个常用的方法是将每个标识符的第一个字母大写,标识符若由几个词组合而成(中间不能插入空格),每个词的第一个字母应大写: MyLongIdentifier MyVeryLongAndAlmostStupidIdentifier 此外,编译器不编译代码中的空格、空行和Tab键空格,这些元素通称为空白,它们只用来提高代码的可读性,不影响编译过程。

delphi开发调试快捷键

Delphi开发的调试技巧_快捷鍵列表 2009-10-12 14:26 From:https://www.wendangku.net/doc/be11611117.html,/jangill/blog/item/ae669c58205b248981 0a18b5.html 1、设置调试选项 Delphi主菜单。【Project】->【Options】,或单击工程管理器中的【Project Options】按钮。显示Project Options,选择Complier <1>选中 Debug Information :把调试信息嵌入到DCU单元文件,会加大编译后的DCU文件,但不会影响最后生成的exe的大小和执行速度。同时激活【Search】菜单中的【Find Error】命令。 当文件中包含调试信息并得到一个运行时错误(run-time error),记录下Delphi提供的16进制地址,在【Search】->【Find Error】中输入,Delphi将重新编译程序,并停留在产生错误的命令行。 <2>Local symbols:决定调试器能否看到在Implementation中定义的局部变量。 <3>Reference infoj选项/Definition Only选项 是否产生应用程序中对象标识符的引用信息。信息和对象代码存在dcu 文件中,可以使用对象浏览器查看。如果Definition Only 选项同时选中,编译器将生成标识符定义位置的信息,能够激活对象浏览器的Refenrence页。如果不选,Dcu文件更小。

编辑器命令 {$D} Debug Information {$L} Local Information {$Y} Symbol Information {$C} Assertions 2、使用内部调试器 <1> 命令行参数 在【Run】->【Parameters】中设置 <2>断点 条件断点 使源代码断点只有在满足某个条件时才有效。 在【View】->[Debug windows]->【BreakPoints】打开“BreakPoint List”对话框,右击断点,从弹出菜单中选择属性。打开“Source BreakPoint Properties”对话框,在Condition中输入条件,在对话框中点击按钮【Advanced】,可以设置更多选项,“Ignore Subsequent Exceptions”使调试程序遇到下一个断点时不中断;选中“Handle Subsequent Exception”则调试程序遇到下一个断点时恢复默认性能。也可以通过【Run】->【Add BreakPoint】设置。 数据断点 特定地址的内存被修改时才使程序挂起。【Run】->【Add BreakPoint】

delphi程序单元基础讲解

Delphi程序单元 Object Passal的程序结构很特殊,与其它语言如C++,Object Windows等结构都不同。一个Delphi程序由多个称为单元的源代码模块组成。使用单元可以把一个大型程序分成多个逻辑相关的模块,并用来创建在不同程序中使用的程序库。 8.1Program单元 Program单元就是Delphi中的项目文件。 Program单元是一个特殊的单元,类似于C语言中的Main程序,即为应用程序的主程序。一个程序可以有多个单元组成,也可以只有一个Program单元组成,例如前面我们介绍过的DOS窗口程序就只有一个Program单元组成。下面是一个典型的Program单元:program Project1; uses Forms, Unit1 in'Unit1.pas'{Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end (1)程序首部指定程序名、以及参数等。 (2)Uses语句定义程序用到的所有单元。 标识符为单元的名字,各单元之间用逗好(,)隔开,最后结束用分号(;)。 注意:每个程序总是自动包含System单元,Program单元的Uses部分不能 显式指定。System单元用于实现一些低级的运行时间程序的支持,如文件输入 输出(I/O)、字符串操作、浮点运算、动态内存分配等。另外,Delphi在发行时提供了许多预先定义的单元,在构造程序时可以直接使用。例如,如果你将一个核对框放进一个窗体,你就自动地使用了StdCtrls单元,因为TCheckBox构件在StdCtrls中定义。 Uses部分列出单元的顺序决定它们初始化的顺序,并影响编译器定位标识符的顺序。如果两个单元定义了一个相同名字的类型,编译器将总是使用前面那个单元的类型。 (3)程序块由保留字Begin和End括起来的一段代码组成,用于对程序的初始化。

Delphi作的程序的源代码中常见的文件扩展名

Delphi作的程序的源代码中常见的文件扩展名 Delphi作的程序的源代码中常见的文件扩展名 时间:2011-5-24来源:yang 作者: peng点击: 32次 整理了一下用Delphi作的程序的源代码中常见的文件扩展名,并给出了这些文件扩展名的意义,以便源代码管理时作为参照,扩展名以字母为序(不需要进源代码库不表示不需要进库)。 ~* Delphi生成的备份文件,在版本控制库及发布代码中不应该出现这些文件,如果修改了某个文件却因某些原因没有保存的话,可以尝试使用这些文件恢复。 bmp/wmf/emf/gif/jpg/pcx/png/tiff/ico/cur/ani 图形/图标/光标文件,这些文件如果使用到了也需要进源代码库。 bpg 工程组文件(Borland Project Group File),文本格式,需要进源代码库;bpg文件其实是makefile格式,要编译bpg 文件可以使用make工具,语法如下: make -f %FileName%

bpl 运行时刻包文件,是一种Borland定义的特殊格式的dll,简单的说与普通dll的差别就是bpl有一些共用的部分只使用了同一引用,而dll使用了多份拷贝,因此才会使得bpl与dll的某些方面的差别很大。 此类型文件是否进源代码库需要根据其用途来判断,一般情况下源代码编译出来的bpl无需进库,但是如果此bpl 是IDE的扩充插件,可能也需要进库,此外如果第三方组件没有提供源码仅提供了此文件,则此文件也需要进源代码库。 bpr/bpf/bpj/h/cpp BCB(Borland C++ Builder)相关文件,如果工程使用了BCB,则需要进源代码库,但在我们的工程中应该不需要这些文件。 cab ActiveX控件包文件,如果是工程使用到的第三方控件,则需要进源代码库。 cfg 编译工程时的配置文件。dcc32.exe程序编译工程时使用cfg文件的顺序为:首先使用dcc32.exe同目录下的dcc32.cfg 文件,然后使用待编译文件同目录下的dcc32.cfg文件,最后使用待编译文件同目录下的同名的cfg文件,为了保证在不

Delphi练习

一.选择题(每题2分,共3 0分). 1、以下标识符中哪个是合法的Delphi标识符?[C]。 A.Delphi 7 B.Delphi.7 C._Delphi_7_ D.1st_class 2、下列对TADOQuery组件ADOQuery1的SQL属性正确操作的语句是[D] A.ADOQuery1.SQL.Clear:=’’; B. ADOQuery1.SQL.Close; C.ADOQuery1.SQL.Add:=’select * from table1’; D.ADOQuery1.SQL.Text:=’select * from table1’; 3、[C]组件没有Items属性。 A.TComboBox B. TListBox C. TMemo D. TRadioGroup 4、有序类型不包括以下的哪一个?[A] A.Real B. Integer C. Char D. Boolean 5、以下哪个组件是可视组件?[A] A.TDBGrid B.TADOQuery C.TDataSource D. TADOConnection 6、以下哪个不是关系型数据库?[B] A.Access B.ADO C.SQL Server D.Oracle 7、[C]是一种提供访问各种数据类型的连接机制,是基于OLE-DB之上的技术,是微软提出的新标 准,且力图将它树为新的统一数据库接口. A.DAO B. ODBC C. ADO D. BDE 8、以下哪个组件是通过SQL属性来获取数据的?[D] A.TDataSource B. TADOConnection C. TADOTable D. TADOQuery 9、ConnectionString属性是用于设置要连接的数据库的,以下哪个组件无该属性?[A] A.TDataSource B. TADOConnection C. TADOTable D. TADOQuery 10、要让菜单项的名字之前显示一个勾,应该设置菜单项的[B]属性值为true。 A.Default B. Checked C. Enabled D. Visible 11、如果想在界面中直观地显示一些几何图形,就要用到TShape组件,以下[C]属性用于设置它的 形状。 A.Brush B. Pen C. Shape D. Name 12、设n为整型变量,且已赋值为1898,表达式(n mod 100) div 10表示:[B] A.分离出个位数字 B.分离出十位数字 C.分离出百位数字 D.分离出千位数字 13、设有如下程序段: i :=1; repeat n :=i*i; i :=i+2; until n>2*i; 假设所有变量均已说明,问其中循环体的执行次数是:[C] A.1 B.2 C.3 D.4 14、如果用户不希望别人看到他在文本编辑框中输入的字符,可以将TEdit的[A]属性设置为*。 A.PasswordChar B. Caption C. Text D. Name 15、若要设置TLabel组件中的文本在水平方向上居中对齐,应将[A]属性值设为taCenter。 A.Alignment B. Layout C. WordWrap D. Transparent 1、以下标识符中哪个是合法的Delphi标识符?[C]。 A.A[B]7 B.7AB C.AB7 D.IF 2、下列对TADOQuery组件ADOQuery1的SQL属性正确操作的语句是[B] A.ADOQuery1.SQL.Clear:=’’; B. ADOQuery1.SQL.Add(’select * from table1’); C.ADOQuery1.SQL.Close; D.ADOQuery1.SQL:=’select * from table1’;

Delphi面向对象的编程方法

Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。 本章中,我们将讨论Object Pascal的主要特点,并讲解如何在事件处理过程和其他应用程序中,使用它来编制程序代码。本章将讲解Delphi应用程序中最常用的Object P ascal语法,而不是Pascal语言的一切细节。如果您完全不熟悉Pascal编程,请参阅一些基础的Pascal教程。如果您具有编程经验,并能熟练地使用其他流行程序语言,您将在本章的Object Pascal中发现一些相同的概念。如果您已经熟悉了Borland Pascal,就可以快速浏览或跳过本章。 2.1 编写Object Pascal程序代码 在前边的章节中,我们通过例程,已经编写了几行简单的代码。在本章中,我们将从熟悉Pascal编程的角度,配合实例,讲解Object Pascal编程的基本方法。 在编写自己的Object Pascal程序时,要注意程序的可读性。Pascal语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。一般的程序员都有这样的体验:如果不给程序加上适当的注解,一段时间后,自己也难以理清程序的流程。给程序及时地加上注释是良好的编程习惯。Delphi的注释需要加注在{}之间,编辑器会把它们处理成为空白。Delphi保留了Borland Pascal编辑器的风格,关键字采用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。 2.1.1 编写赋值语句 在事件处理过程中,最常用到的工作就是把一个新值赋给一个属性或变量。在设计用户界面时,可以使用Object Inspector(Object Inspector)来改变其属性;但有时需要在程序执行时改变属性的值,而且有些属性只能在执行时改变,这些属性在Delphi的在线帮助的“Proprety”主题中被标为执行期属性。进行这种改变,就必须使用赋值语句。 下文的赋值语句表征一个OnClick事件。当按钮按动后,将编辑框部件Edit1的Co lor属性置为clRed: procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Color := clRed; end; 当按动按钮后赋值语句被执行,编辑框变成红色。

Delphi程序设计复习资料

《Delphi 程序设计》复习题 一、填空题 1、结构化程序设计的基本原则是取消goto 语句,程序中仅采用顺序、 和循环三种控制结构。 2、一个对象是由属性、方法和事件所组成。属性表示对象中的数据, 是对象能够执行的动作, 是能够引起对象反应的条件。 3、与数学表达式 ) sin()(sin 222y x y x ++对应的Object Pascal 表达式是 。 4、ListBox 对象列表框中的内容是通过 属性来进行设置的。 5、结构化程序设计要求程序中仅采用顺序、分支和循环三种控制结构,其中每种结构只能有 个入口和一个出口。 6、对象的三个要素是属性、方法和 。 7、Delphi 应用程序中项目文件的扩展名是 。 8、在设计阶段,利用Image 对象的 属性,可以加载一幅图片。 9、Delphi 中与窗体文件对应的文件是单元文件,其最常用的文件扩展名是 *. 。 10、与数学表达式 ab y b a -++23)sin(对应的Object Pascal 表达式是 。 11、调用主窗体的 方法,可以结束程序关闭窗体。 12、如果让界面上的一个按钮变为不可用,需要将它的 属性设为False 。 13、如果要在窗体上设计一个主菜单,首先要建立 对象。 14、与数学表达式 a xy a b a +++22)(cos 对应的Object Pascal 表达式是 。 15、利用 对象的LineTo 等绘图方法,可以绘制基本图形。 16、RadioGroup 对象中的单选按钮个数及名称是通过 属性来进行设置的。 17、时钟组件(Timer)能有规律的以一定时间间隔触发 事件,并执行该事件过程中的程序代码。为了使计时器控件Timer1每隔0.5秒就触发一次并执行事件代码,应将Timer1控件的Interval 属性设置为 。 18、Delphi 程序与数据库之间进行数据交换一般要由多个数据库组件协作完成。如果用户要查询数据库中的一条信息,该指令通过用户界面组件发出,经数据源组件到达数据集组件。数据集组件利用 组件与数据库建立连接,并读取数据库中的数据,而后又经过 组件将数据送到用户界面组件中显示。 19、与数学表达式 a x a by a ++22)(sin 对应的Object Pascal 表达式是

第2章Delphi语法基础

第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常量名 = 表达式; 例如: Const PI = 3.1415926535897932385; College = '山东教育学院'; Numeric = ['0'..'9']; // 数字字符集合 Alpha = ['A'..'Z', 'a'..'z']; // 英语字母集合 AlphaNum = Alpha + Numeric; // 集合的并 2. 变量 变量声明的格式: var变量名表:类型; 例如: var X, Y, Z: Double; I, J, K: Integer; S1, S2: String; Digit: 0..9; // 子界类型 Flag: Boolean; 单元级或全局变量可以在声明时初始化(每个声明语句仅限一个变量)。例如: var x: Integer = 0; S: string = 'abc';

相关文档