delphi上机讲义
- 格式:doc
- 大小:498.50 KB
- 文档页数:68
15.5.2 TDataSource部件的事件TDataSource部件具有三个事件:● OnDataChange事件● OnStateChange● OnUpdataDataOnDataChange事件:当与TDataSource相连的数据集中的记录指针的位置发⽣改变时,该事件就被触发,也就是说当程序调⽤数据集部件的Next、Previous、Insert、Append等⽅法导致记录指针的位置发⽣改变时,便会触发该事件。
该事件⼀般⽤于保持应⽤中多个部件之间的同步。
OnUpdataData事件:当数据集部件中当前记录将要被修改时,触发该事件。
例如在程序调⽤post⽅法之后但在修改后的数据记录真正被写回磁盘中的数据库⽂件之前触发该事件,在应⽤中使⽤⾮数据浏览部件时要它与数据集保持同步时常使⽤该事件进⾏相关的处理。
OnStateChange事件:当与TDataSource部件相连的数据集部件的状态发⽣改变时,便触发该事件。
因为数据集部件的State 属性标明了数据集部件当前所处的状态,当数据集的状态发⽣变化时,使⽤该事件进⾏有关的处理是很有⽤的,在⼀个具体的应⽤中,数据集部件的状态常常是频繁地变化的,为了跟踪数据集部件的状态变化,可以⽤下⾯例⼦中的程序代码将数据集部件当前的状态显⽰在⼀个标签上:TForm1.DataSource1OnStateChange(Sender : Tobject);varS : String;beginCase Table1,State ofdsInactive : S := 'Inactive';dsBrowse : S := 'Browse';dsEdit : S := 'Edit';dsInsert : S := 'SetKey';dsSetKey : S := 'SetKey';end;Label1.Caption := S;end;类似地我们也可以通过检测数据集部件的状态来控制有关的按钮和菜单项是否有效。
10.3 利⽤DLLs实现数据传输10.3.1 DLLs中的全局内存Windows规定:DLLs并不拥有它打开的任何⽂件或它分配的任何全局内存块。
这些对象由直接或间接调⽤DLLs的应⽤程序拥有。
这样,当应⽤程序中⽌时,它拥有的打开的⽂件⾃动关闭,它拥有的全局内存块⾃动释放。
这就意味着保存在DLLs全局变量中的⽂件和全局内存块变量在DLLs没有被通知的情况下就变为⾮法。
这将给其它使⽤该DLLs的应⽤程序造成困难。
为了避免出现这种情况,⽂件和全局内存块句柄不应作为DLLs的全局变量,⽽是作为DLLs中过程或函数的参数传递给DLLs 使⽤。
调⽤DLLs的应⽤程序应该负责对它们的维护。
但在特定情况下,DLLs也可以拥有⾃⼰的全局内存块。
这些内存块必须⽤gmem_DDEShare属性进⾏分配。
这样的内存块直到被DLLs显⽰释放或DLLs退出时都保持有效。
由DLLs管理的全局内存块是应⽤程序间进⾏数据传输的⼜⼀途径,下⾯我们将专门讨论这⼀问题。
10.3.2 利⽤DLLs实现应⽤程序间的数据传输利⽤DLLs实现应⽤程序间的数据传输的步骤为:1. 编写⼀个DLLs程序,其中拥有⼀个⽤gmem_DDEShare属性分配的全局内存块;2. 服务器程序调⽤DLLs,向全局内存块写⼊数据;3. 客户程序调⽤DLLs,从全局内存块读取数据。
10.3.2.1 ⽤于实现数据传输的DLLs的编写⽤于实现数据传输的DLLs与⼀般DLLs的编写基本相同,其中特别的地⽅是:1. 定义⼀个全局变量句柄:varhMem: THandle;2. 定义⼀个过程,返回该全局变量的句柄。
该过程要包含在exports⼦句中。
如:function GetGlobalMem: THandle; export;beginResult := hMem;end;3. 在初始化代码中分配全局内存块:程序清单如下:beginhMem := GlobalAlloc(gmem_MOVEABLE and gmem_DDEShare,num);if hMem = 0 thenMessageDlg('Could not allocate memory',mtWarning,[mbOK],0);end.num是⼀个预定义的常数。
D e l p h i 上机讲义计算机与信息工程系2006.2目录第1次DELPHI集成环境的使用 (4)1讲义 (4)1.1D ELPHI程序的编写、编译和运行 (4)1.2常用编辑功能 (6)2上机指导 (6)2.1一个简单的基于控件的可视化程序 (6)2.2一个控制台程序 (7)3练习 (8)第2次简单数据类型的函数 (9)1讲义 (9)1.1简单数据类型的函数 (9)1.2字符串的函数 (9)1.3使用D ELPHI系统帮助 (10)2上机指导 (10)第3次数据的输入与输出 (12)1讲义 (12)1.1基于控制台方式的输入与输出 (12)1.2基于可视化控件的输入与输出 (12)2上机指导 (13)2.1控制台应用程序 (13)2.2基于可视化控件的程序 (14)第4次表达式求值 (15)1讲义 (15)1.1 表达式 (15)1.2表达式书写 (16)2上机指导 (16)第5次分支语句 (17)1讲义 (17)2上机指导 (18)第6次循环语句 (20)1讲义 (20)2上机指导 (20)2.1 FOR循环 (20)2.2 WHILE循环 (22)2.3 UNTIL循环 (23)2.4复杂循环程序 (24)第7次过程和函数 (28)1讲义 (28)1.1过程与函数的编写 (28)1.2参数 (30)1.3过程与函数的使用 (30)1.4嵌套与递归 (31)1.5全局变量与局部变量 (31)2上机指导 (32)第8次自定义简单类型 (36)1讲义 (36)2上机指导 (36)第9次集合类型 (38)1讲义 (38)2上机指导 (38)第10次数组 (39)1讲义 (39)2上机指导 (40)2.1一维数组的应用--排序与查找 (40)2.2二维数组 (44)2.3八皇后问题 (45)第11次记录类型与指针类型 (47)1讲义 (47)2上机指导 (47)第12次程序结构与结构化设计 (50)上机指导 (50)附录1: (55)五子连珠游戏的一种敏捷开发 (55)附录2: (63)STRATEGY模式在DELPHI中的实现及应用 (63)后记 (67)第1次 Delphi 集成环境的使用1讲义Delphi 是什么通常很难用一句话说清,因为Delphi 本身就有丰富的内涵。
在西方文明中,Delphi 曾经被古希腊人认为是世界的中心,那里居住着预言之神Oracle 。
这里我们要讨论的Delphi 则是Borland 公司推出的用于软件开发的产品。
1.1 Delphi 程序的编写、编译和运行高级语言及其编译器通常与一些必要的程序开发工具集成在一起,形成所谓的集成开发环境(IDE )。
在Delphi 的IDE 中就可以完成程序设计、资源重用、代码编译、调试测试等一系列任务。
Delphi 的集成开发环境包括:菜单、工具栏、组件面板、窗体设计器、代码浏览器、代码编辑器、项目管理器、对象观察器(Object Inspector )、对象树状视图(Object Tree View )等。
图表 1-1Delphi 创建应用程序的方法:表单1. 创建项目1)在IDE的File菜单中选择菜单项New|Application,系统将创建一个Windows 应用程序框架,它包括了一个空白的窗体。
如果我们按快捷键Ctrl+Alt+F11后将出现项目管理器,在这里我们可以看到系统为该项目创建的一系列缺省文件。
2)在IDE的File菜单中选择菜单项Save All,此时弹出保存文件对话框。
输入所要编写的项目名称(将来生成可执行文件的主文件名与此相同)以及单元文件名称。
3)如果要选择其他项目类型,可以在IDE的File菜单中选择菜单项New|Other…,此时会弹出New Items对话框。
这里有多种项目或应用程序类型可供选择。
图表1-22. 编辑文件一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。
我们可以在“骨架”中加入自己的代码。
缺省的应用程序是一个空白的Windows窗体(Form),可以运行它,结果得到一个空白的窗体。
因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户编写应用程序打下了良好的基础。
一旦创建好一个项目,Delphi就已经为我们做好了一切基础工作——程序框架本身就是一个已经完成的可运行应用程序,只是不处理任何事情。
如图所示,在代码编辑器中输入代码时,我们可以看到有一个动态提示框不断地提示我们输入代码,这就是Code lnsight功能。
可用光标直接选中某一行。
在代码编辑器中编辑程序可以得到Code insight的智能提示:图表1-33. 编译和运行程序的编译可以选择Project菜单下的Compile XXX菜单项或Build XXX菜单项,两者的区别在于Compile只编译当前获得焦点的文件;而Build则编译所有受到当前激活文件内容改动影响的文件,而且一旦编译通过,将所调用的系统函数与程序的目标代码进行联接,最终形成可执行的exe文件。
编译后程序如果出现语法错误,需要根据代码编辑器下方Build窗口中的提示信息对程序进行重新修改,直到编译后不再出现错误为止。
图表1-31.2 常用编辑功能在Delphi中,编辑功能键和WORD中的用法类似:选中:用鼠标选中或用shift+箭头。
复制:ctrl+c粘贴:ctrl+v剪切:ctrl+x也可用菜单中的编辑菜单。
2 上机指导在以后的上机实验中我们使用两种应用程序:基于控件的可视化程序和控制台应用程序。
2.1 一个简单的基于控件的可视化程序启动Delphi后出现图1-1,(或new-application新建一个应用程序)用鼠标点击控件面板中的standard上的命令按钮(上面有OK),单击form1,可以在对象观察器中修改有关属性如图1-5:caption属性为命令按钮的标题,在后面方格内双击后,button1变为蓝色,此时输入新的标题即可如:确定然后回车。
caption属性也可在代码中修改:双击命令按钮:就出现一个图口:光标停在下列代码中:procedure TForm1.Button1Click(Sender: TObject);beginend;在begin end;之间输入如下代码:button1.caption:=’你好!’;注意在输入代码时,输入的符号除汉字串外,都是英文符号,即半角符号。
图表1-4输入代码后,点击运行工具按钮(绿色▲),点击确定按钮,标题就会变为“你好!”。
2.2 一个控制台程序在Delphi集成开发环境中,选择菜单File|New打开New Items对话框,如图1-2所示,选中New标签页中的Console Application选项,按下OK按钮。
Delphi集成开发环境会自动创建一个空的控制台程序项目,并在代码编辑窗口中自动打开Project1.dpr文件,并构建了这个程序的基本框架,其代码如下所示:program Project1;{$APPTYPE CONSOLE}usesSysUtils;begin{ TODO -oUser -cConsole Main : Insert code here }end.在相应位置输入以下斜体加粗代码:program Project1;{$APPTYPE CONSOLE}usesSysUtils;vartempStr : string;tempInt : Integer;begin{ TODO -oUser -cConsole Main : Insert code here } write('请输入您的大名: ');readln(tempstr);writeln(tempstr,' 您好,欢迎进入Delphi世界! ');write('请输入一个整数: ');readln(tempStr);tempInt := StrToInt(tempStr);writeln('您输入的数是: ',IntToStr(tempInt));writeln('按Enter键退出。
');readln;end.注:其中黑体、斜体修饰的为手工输入。
以后同。
点击运行工具按钮(绿色▲),根椐提示输入内容如图1-5:图表1-53 练习1 试输入如下代码,运行能看到什么?program Project2;{$APPTYPE CONSOLE}usesSysUtils;vari,j:integer;begin{ TODO -oUser -cConsole Main : Insert code here }for i:=1 to 9 dobeginfor j:=1 to i dowrite(i,'*',j,'=',i*j:2,' ');writeln;end;readln;end.2 如可把程序存到磁盘上?并修改?第2次简单数据类型的函数1讲义1.1简单数据类型的函数简单数据类型包括序数类型(ordinal)和实数类型(real)。
序数类型包括整数类型,字符类型,布尔类型,枚举类型和子界类型。
由于序数类型都具有一些共同的特点,所以Delphi针对此数据类型的操作,预定义了操作函数,该表是几个常用的函数:1.2字符串的函数字符串可以看成一组字符,它好是用单引号界定的。
常用的是string类型。
常用的函数如下:copy:返回一个字符串的子串;function Copy(S; Index, Count: Integer): string;delete:从一个串中删除一个子串; procedure Delete(var S: string; Index, Count:Integer);procedure Insert(Source: string; var S: string; Index: Integer);将源串插入到S中。
function Length(S): Integer;返回串的长度function Pos(Substr: string; S: string): Integer;在S查找子串的首次出现的位置。
Inttostr(intx)将整数转换为字符串Strtoint(s)将串转换为整数。
Str(x,s)把实数或整数转换为字符串。
Val(s,v,code)把字符串转换为实数。
Uppercase、lowercase大小写转换。
1.3 使用Delphi系统帮助Delphi系统提供了非常丰富的帮助,当我们需要了解某些问题时,可借助于帮助。
在帮助中,也提供了大量的实例,可以复制后进行实验,大大提高学习、开发效率。