版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Delphi教程教程第第7章章 键盘、鼠标和文件编程键盘、鼠标和文件编程7.1键盘的编程键盘的编程7.1.1关于键盘在计算机发展过程中,一开始是就使用键盘作为输入方式,在DOS环境中,大多只有判断键盘是否单击,以及单击的是哪个键,在Windows之中,可以判断键盘单击的事件有三种如下图所示: 在这些事件中,OnKeyDown和OnKeyUp都会传入用户单击的Key值(word值),可以利用这些值,来判断用户按了哪些键,而这些值代表了Windows中的Virtual Key Code。而OnKeyPress所返回的是一个Char值,代表一个ASCII字符。ASCII字符和Virtual Key
2、Code是不相同的,因为Virtual Key Code中有代表ASCII的字符,但ASCII字符不包含全部的Virtual Key Code,因为Virtual Key Code中内含了很多功能键 7.1.2 键盘常用事件1OnKeyDown当按下键盘上的任一个键时,就会触发此事件。如字母键、数字键、功能键(F1F12)、Ctrl键、Shift键或Alt键等,都将产生一个OnKeyDown事件。2OnKeyPress当用户单击ASCII字符的键盘时,就是说当按下键盘上的一个字符键,如字母键、数字键等会产生一个OnKeyPress事件,但是单独按下功能键(F1F12)、Ctrl键、Shift键
3、或Alt键等,不会产生OnKeyPress事件。3OnKeyUp 当按下键盘上的任一个键后松开时,都会产生一个OnKeyUp事件。对于功能键(F1F12)、Ctrl键、Shift键或Alt键等,也会产生一个OnKeyUp事件。 4检测功能键 在组件的OnKeyDown、OnKeyUp、OnMouseDown和OnMouseUp等事件的处理过程中,有一个TShiftState类型的变量Shift,TShiftState类型定义如下:Type TShiftState=setof(ssShift,ssAlt,ssCtrl,ssLeft,ssRight,ssMiddle,ssDouble);根据Shi
4、ft的值就可以判断当键盘上的键按下时Shift、Alt和Ctrl键的状态,或者按下鼠标 左键、中键时的状态或者是否双击了按键。当然,如果有OnMouseDown事件发生了,而又不是按下左键和中键,则按下的一定是右键。 7.2鼠标的编程鼠标的编程常用鼠标的事件有以下几种: 1常用鼠标事件 (1)OnClick:当用户单击鼠标任何一个键时,就会触发此事件。(2)OnMouseDown:当用户单击鼠标时,就会触发此事件。(3)OnMouseMove:当用户单击鼠标在对象上移动时,就会触发此事件,但停止就不触发了。(4)OnMouseUp:当鼠标的某个按键按下,然后松开后会产生一个此事件。 在这些事件
5、中,OnMouseDown和OnMouseUp都会触发事件,但是在用户单击时,可能会移动鼠标位置,使得两者被触发的对象不同的,但OnClick和OnMouseDown是会触发在同一个对象上的。 当用户在对象A按一下时,A会同时触发OnMouseDown OnClick OnMouseUp OnMouseMove当用户在对象A单击但在对象B放开时,A会触发OnMouseDown OnMouseMove OnMouseUp B会触发OnMouseMove 因此如果要触发OnClick事件,就必须要在一个对象按一下才行,否则只会有OnMouseDown、OnMouseMove、OnMouseUp这些
6、事件。2拖放事件 (1)OnDragDrop:在拖曳事件开始时会触发此事件。(2)OnDragOver:当拖曳对象跨过一个组件时会触发此事件。(3)OnEndDrag:当拖曳事件结束后会产生触发此事件。具体过程如下:(1) 拖曳操作开始 大多数的组件具有DragMode属性,表示开始拖曳操作的方式。DragMode属性的缺省值为dmManual,也就是要在被拖动组件的OnMouseDown事件的处理过程中调用BeginDrag过程才开始拖曳操作。如果将DragMode属性设置为dmAutomation,则鼠标左键在被拖动组件上按下后就自动开始拖曳操作。(2)接受拖曳操作 当拖动一个组件经过第二
7、个组件的时候,第 二个组件会产生一个OnDragOver事件。在该事件的处理过程中有一个布尔类型的参数,该参数的设置直接影响是否产生OnDragDrop事件。一般情况下,在OnDragOver事件的处理过程中,根据参数Source判断拖曳操作的源。如果是可以接受的源,则将Accept参数设置为True;否则,将其设置为False。(3)处理拖曳操作在第二个组件OnDragDrop事件处理过程中,根据拖曳操作的源做一些相应的处理。(4)拖曳操作结束拖曳操作完成后释放鼠标左键,会在第一个组件中产生一个OnEndDrag事件,可以根据参数Target的数值进行相应的处理。如果参数Target的值为n
8、il,则表示拖曳操作没有被接受;如果Target的值不为nil,则Target的值就是接受拖曳操作的组件。 3滚轮事件(1) OnMouseWheel:当用户单击滚轮按钮时,就会触发此事件。(2) OnMouseWheelDown:当用户用滚轮按钮向下转动时,就会触发。(3) OnMouseWheelUp:当用户滚轮按钮向上转动时,就会触发。7.3文件的编程文件的编程Delphi的文件分为文本文件、有类型文件和无类型文件。 7.3.1适合于各种文件的基本操作1与外部文件联系的建立与中断在Delphi中要对外部文件进行读写操作前后,需将该外部文件名分配给一个文件类型的变量已经中断文件变量与该外部
9、磁盘文件的联系。(1)文件变量与外部文件建立联系通过调用AssignFile过程可以初始化一文件变量即建立文件变量(F)与外部文件之间的联系。AssignFile过程的声明如下:procedure AssignFile(var F;FileName:string);其中F是一个文件变量,它可以代表各种类型的文件。FileName是一个字符串表达式,代表某个特定的文件名。在调用该过程文件变量(F)将一直和外部文件相联系,直到关闭该文件变量。在由FielName所指定的外部文件中,同样进行对该文件变量的各种操作。(2)文件变量与外部文件中断联系通过调用CloseFile过程可以将中断文件变量(F)
10、与外部磁盘文件之间的联系。CloseFile过程的声明如下:procedure ClsoeFile(var F);其中F是一个文件类型的变量,可以代表各种文件的类型,该文件可以由读方式打开、写方式打开或者由添加方式打开。在对同文件变量相联系的外部磁盘文件修改后,调用CloseFile过程将释放文件变量,并关闭该外部文件。2文件的打开与关闭(1)以读方式打开文件(Reset)。通过调用Reset函数可打开一个已经存在的文件。如果该文件是一个文本文件,那么文件变量(F)的属性为只读。如果指定的文件不存在,则会产生错误,如果指定的文件已经打开,则先关闭再重新打开。 当前文件 的位置设置在文件的开始。
11、调用Reset后,如果文件为空Eof(F)为True,否则为False。Reset过程的声明如下:procedure Reset(var F:File;RecSize:Word);其中F是一个任意文件类型的变量,RecSize(记录长度)是一个可以默认的表达式,并且仅当F是一个无类型文件时才用,该参数指定数据传送时的文件大小。(2)以写方式打开文件(Rewrite)通过调用Rewrite函数可创建并打开一个新文件。如果F是一个文本文件,那么文件变量(F)的属性为只读。如果文件已经打开,则先关闭然后在重新创建, 当前文件的位置设 置在文件开始。调用Rewrite后,则Eof(F)必为True。R
12、eset过程的声明如下:procedure Rewrite(var F:File;Recsize:Word);其中F是一个任意文件类型的变量,RecSize(记录长度)是一个可以默认的表达式,并且仅当F是一个无类型文件时才用,该参数指定数据传送时的文件大小。(3)用Erase过程删除文件。通过调用Erase过程可删除一外部文件。Erase过程的声明如下:procedure Erase(var F);其中F是一个任意文件类型的变量,调用Erase过程将删除同F相连的文本文件。 3文件的基本操作函函 数数 与与 过过 程程 名名 实实 现现 功功 能能 functon IOResult:Integ
13、er; 返回最近一次I/O操作的状态值 procedure Rename(var F;Newname:string);procedure Rename(var F;Newname:PChar); 用Newname重新命名文件 procedure ChDir(S:string); 将当前目录改为字符串S制定的目录 function Eof(var F):Boolean;Text files;function Eof(var F:text):Boolean; 检测文件是否结束,如果结束和文件为空则为Ture,否则为False procedure GetDir(D:Byte;var S:string
14、); 检测由D指定驱动器的当前目录。D的取值可为(0,1,2,3),其分别代表(默认,A,B,C) procedure RmDir(S:string); 删除由字符串S指定的目录 procedure MkDir(S:string); 新建一个由字符串S指定的目录,改目录原来并不存在 7.3.2 适合于文本文件的基本操作1以添加方式打开文件(Append)通过调用函数Append可打开一个已经存在的文件以便于在文件末尾添加文本。如果在文件最后的128个字节块中,存在字符+(ASCII 26),那么文件将在该字节处插入,并且覆盖该字符。即,文本可被插入到以字符+终止的文件后。Append过程的声明
15、如下:Procedure Append(var F:Text);其中F是一个任意文件类型的变量,并且必须同用AssignFile函数打开的外部文件相联系。如果指定名称的外部文件 不存在,就会 产生错误。如果指定的文件已经打开,则先关闭再重新打开。当前文件的位置设置在文件末尾。如果分配给F的是一个空名字,则在调用Append函数后,文件变量(F)将同标准输出文件建立联系。 2文本文件的读取与写入(1)用Read过程读取数据。通过调用Read过程可以从文本文件中读取字符串、字符或数字。其声明如下:procedure Read(var F:Text;V1,V2,Vn);其中F是文本文件变量,V1,V
16、2,Vn用于存储读取的数据,其必须为相同的类型,可以定义为字符串类型变量、 字符型变 量或整型变量、实型变量。当V1,V2,Vn定义为字符串型或字符型变量时,则Read过程将按照定义的长度读取字符。当V1,V2,Vn定义为整型变量或实型变量时,则Read过程将以空格作为分隔符,若在数字中出现逗号、分号或其他字符将产生异常。(2)用Readln过程读取数据。通过调用Readln过程可以从文本文件中读取字符串、字符或数字,直到一行的结束。其声明如下:procedure Readln(var F:Text;V1,V2,Vn);其中F是文本文件变量,V1,V2,Vn用于存储读取的数据,可以定义为字符串
17、型变量、字符型变量或整型变量、实型变量。(3)用Write过程写入数据。通过调用Write过程可以向文件中写入数据。其声明如下: procedure Write(var F:Text;P1,P2,Pn);其中F是文本文件变量,P1,P2,Pn用于存放写入的数据,其可以是字符串类型、字符类型、整型或浮点型。(4)用Writeln过程写入数据。通过调用Writeln过程可以向文件中写入一行数据,并在结尾处输入回车换行符。procedure Writeln(var F:Text;P1,P2,Pn);3文件的基本操作函函 数数 与与 过过 程程 名名 实实 现现 功功 能能 Procedure Ass
18、ignPrn(var F:Text); 建立文本文件变量同打印机之间的联系 Function Eoln(var F:Text):Boolean; 检测文件指针是否指向行尾 Procedure Flush(var F:Text); 输入方式(Rewrite或Append)打开的文件缓冲区,以确保所有写入文件的字符都被写入外部文件 Function SeekEof(var F:Text):Boolean; 返回文件尾状态 Function SeekEonln(var F:Text):Boolean; 返回文件行尾状态 Procedure SetTextBuf(varF:Text;varBuf;Si
19、ze:Integer); 设置文件缓冲区 7.3.3有类型文件有类型文件是一种具有一定数据类型的文件,它是由指定数据组成,读写过程所操作对象的单位是一个指定类型的数据。由类型文件的变量可声明如下: Type fileTypeName=file of type 其中file of 为保留字,type可以是各种数据类型如整型、实型及记录型。FileTypeName为类型文件名。1有类型文件的读取和写入方法对于有类型文件允许同时为读和写打开。通过调用Read过程可以从文件中读取数据。 其中F,及V1,V2,Vn的定义同文本文件。其声明如下:procedure Read(F,V1,V2,Vn);通过调用Write过程可以向文件中写入数据。其声明如下:procedure Write(F,V1,Vn);2文件的基本操作函函 数数 与与 过过 程程 名名 实实 现现 功功 能能 Function FilePos(var F):Longint; 返回文件的当前文件指针位置 Function FileSiz
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中化学实验探究报告:化学反应速率与平衡实验研究教学研究课题报告
- 基于人工智能的高中生物课堂个性化学习时间管理及生物学实验技能培养教学研究课题报告
- 基于问题导向的高中生物光合作用模型教学探索教学研究课题报告
- 2026年江西工业工程职业技术学院单招职业技能笔试备考试题及答案详解
- 2025安康紫阳县紫金砂石有限公司招聘笔试历年参考题库附带答案详解
- 电工(高级)资格证考试考试彩蛋押题(夺冠)附答案详解
- 电焊工题库(附参考答案)
- 2025国家电投集团中国重燃招聘18人笔试历年参考题库附带答案详解
- 2026年青海农牧科技职业学院高职单招职业适应性测试备考题库及答案详解
- 电工(高级)资格证考试题库检测模拟题附完整答案详解【典优】
- 2025榆林市旅游投资集团有限公司招聘(15人)参考笔试题库及答案解析
- 2025福建三明市总工会三明市工人文化宫招聘工作人1人参考题库带答案解析
- 【人卫课件耳鼻喉9版】鼻科学第一章 鼻的应用解剖学及生理学
- 抵押车过户协议书
- 葡萄种植课件
- 浅析我国政府雇员制的利弊及发展对策研究
- 2025年全国高校辅导员国赛大赛基础知识测试题(附答案)(三套)
- 粉丝群体特征分析-洞察与解读
- 2025年亚氨基二乙酸行业分析报告及未来发展趋势预测
- 2025年江苏省普通高中高二上学期学业水平合格性考试调研历史试题(解析版)
- 学堂在线 雨课堂 学堂云 批判性思维-方法和实践 章节测试答案
评论
0/150
提交评论