第一篇:delphi复习资料
题型:
填空题20×1 简答题5×6 程序填空题11×2 编程题2×14 资料整理的不是完全完整,结合这些重点可以在书上再仔细复习。希望好好复习,大家都能通过!
第一章Delphi简介
1.1delphi概念 Delphi的主要特点: Borland公司的Pascal编译器 Delphi以object Pascal为编程语言 Delphi充分发挥了windows的强大功能 Delphi提供了丰富的32位可视组件库
Delphi在数据库和网络处理功能方面是同类产品中最强的
1.2delphi7集成开发环境
主窗口:包括菜单栏,工具栏及组件栏; 对象游览器:包括属性页和事件页; 对象树性列表; 窗体设计器; 代码编辑器;
1.3delphi程序的基本结构
扩展名为dpr的是项目文件;扩展名为pas的单元文件;扩展名为dfm的是窗体文件
单元文件的格式如下:
单元头:该单元指定单元的名称
接口部分:该部分从保留字interfact开始,到保留字implementation之前结束。接口部分可以有uses语句,还可以用来声明常量,数据类型,变量,过程和函数等。其中uses语句必须紧跟在保留字interfact之后。在整个程序中都可以被访问
实现部分:这些声明可以在本单元中被访问,不可以在其他单元中被访问,类的方法必须在实现部分实现
初始化部分:从保留字implementation开始,到保留字finalization之前结束。一个单元中可以没有该部分。
结束部分:一个单元中只有出现了初始化部分,才可以有结束部分
第二章Object Pascal语言基础 2.1词法符号 保留字
标识符:1标识符由字母,数字或下划线组成 2标示符的第一个字符必须是字母或下划线 3标识符的长度不应超过255个字符 4不能将保留字用作标识符 5标识符不区分大,小写
标准标识符是可以重新定义的,而保留字却不允许重新定义
因system单元是自动应用的,不必也不允许在引用部分列出system单元 Absolute指令字用于指示相同类型的另一标识符存放在同一段内存区域中 2.2常量和变量
布尔常量是指false和true这两个值 用#引导一个整数,整数表示该字符的ASCII码 用‘’‘’表示单引号字符 2.3简单数据类型
数据类型分为简单数据类型,字符串类型,结构类型,指针类型,过程与函数类型和可变类型等是一种常见的分类方法
有序数据类型特点:
1、数据的分布是离散的;
2、除了第一个元素外,其他任何元素都有一个前驱元素;
3、除了最后一个元素外,其他任何元素都有一个后继元素
关系运算符号:=,<>,>≡,>,<≡,< 整型数的逻辑运算符:not,and,or,xor 左,右移位运算符:shl,shr 基本字型有ansichar和widechar Pascal语言提供的自变量为实型的标准函数由: 1绝对值函数abs(x):函数值为x的绝对值 2平方函数sqr(x):函数值为x的平方
3正弦函数sin(X):函数值为x的正弦,其中x的单位为弧度 4余弦函数cos(x):函数值为x的余弦,其中x的单位为弧度 5反正切函数arctan(x):函数值为x的正反切,函数值的单位为弧度 6指数函数exp(x):函数值为指数e 的x次方 7对数函数in(x):函数值为x的自然对数 8平方根函数sqrt(x):函数值为x的平方根
9舍入函数round(x):对实数x作四舍五入,结果为整数 10截尾取整函数trunc(x):截去实数x的小数部分,结果为整数 object pascal提供了丰富的日期时间处理函数,常用的有: 1date0:函数返回系统当前日期,无参数,返回数据是tdate time型 2time0:函数返回系统当前时间,无参数,返回数据是tdate time型 3now0:函数返回系统当前日期和时间,无参数,返回数据是tdate time型 4strtodte(日期字符串):字符串转换为日期时间函数,返回数据是tdate time型
2.4结构类型 结构数据: —集合类型(set)—数组类型(arry)—记录类型(record)—文件类型(file)—类类型(class)
—类引用类型(class reference)—接口类型(interfact)
object pascal中规定了基类型只能是不超过265个有序值的集合,集合元素的叙数值必须介于0~~255之间
集合运算有交(*),并(+),差(—),运算对象是两个相同类型的集合,运算结果也是集合。例如,若有为[1,3,5],y为[3,4,5],则x*y为[3,5],x+y为[1,3,4,5],x-y为[1] 数组的定义:Type arry [indextype。。,indextypen] of basetype ①对于通用字符串类型string,指定其最大长度(0------255)。此时string型被视为shortstring型
②shortstring型不是以null(空字符#0)作为字符串的结果标志,而是将长度保存在字符串数组下标为0的储存单元中 ③ansistring以full结束
记录的定义: Type 记录类型标识符=record 域1:类型1 域2:类型2。。。。域n:类型n 2.6语句流程 语法形式: 输入语言
Read([文件变量]变量列表)
Readln([文本文件变量]变量列表)有回车 省略文本变量参数表示从键盘输入中读取数据 输出语言
Write([文件变量]输出项表)
Writeln([文本文件变量]输出项表)有回车
注释和编译指令 //单行注释内容 {注释内容}(*注释内容*)
Case语句的语法格式: Case选择表达式of 常量1:语句1 常量2:语句2。。。。
常量n-1:语句n-1 [else语句n;] End;
保留字case后的选择表达式,其值必须是有序类型,如整型,字符型,布尔型,枚举型或子界型 P45页程序
While语句的执行过程是:先计算布尔表达式的值,当值为true时,执行循环体中的语句序列,然后重新计算布尔表达式的值,若仍为true则再执行一遍循环体
While语句的特点是先判断条件,当条件为true才执行。当第一次条件为false时,循环次数为0
Repeat语句的执行过程是:先执行repeat到until之间的语句,然后计算布尔表达式的值,若为false,则再执行repeat到until之间的语句,若为true则推出循环体
Break过程,可使程序的执行流程立即退出该层循环 Continue过程将使程序直接转入下一次循环 2.7过程与函数
Procedure过程名(参数表)
Function函数名(参数表):返回数据类型 过程由过程首部、局部声明部分和过程体组成。函数由函数首部、局部声明部分和函数体组成。
参数的传递如下:
1值参数声明时,形参前面无任何修饰
2变量参数声明时 变参传递的是一个变量的地址,即实参把地址传递的是一个变量的地址,即实参把地址传递给变参,变参和实参指向的是同一地址空间。在过程和函数中对变参的修改直接影响实参 3常量参数声明时,形参的前面用保留字const修饰
过程和函数重裁是指定义多个名称相同,而参数列表不同的过程和函数。编译器根据调用时实参表中的参数个数和类型,自动匹配一个重裁的过程或函数。重裁过程或函数使用默认参数可能会导致二义性错误 2.8程序与单元的结构 单元结构: 1单元首部
2接口部分:定义的这些标识符可以被引用该单元的程序访问 3实现部分:在实现部分定义的标志符不能被其他单位或程序访问 4初始部分 5终结部分
2.9标识符的作用域
标识符的作用域是指其在程序中起作用的范围。
单元中接口部分定义的标识符包括数据类型,类,常数,变量,过程和函数导等 他们在引用该单元的程序(项目文件,其他单元)中都可以被访问
第三章 Delphi中的面向对象 3.1面向对象程序设计概述
将具有相同属性和行为的对象抽象为类,每个对象都属于某个类。通过继承关系构成类的层次结构,子类可以直接继承父类的性质和功能。3.2类与对象
类是具有相同或相似属性和行为的一组对象的共同描述,是对相似对象建立的模板。
对象由属性和方法构成。属性是描述对象静态特征的一组数据想:方法描述了该类对象动态特征的一个操作序列,体现对象的行为特征或功能。定义类:type 类名=class 数据成员
成员函数或过程 End;
注意:在函数或过程名前必须带有类名。Procedure Circle.Draw; 声明对象一般形式为:var 对象名:类名; 访问对象成员:对象名.成员
构造函数和析构函数的定义,作用和特点:
构造函数是专用的创建对象和初始化对象的成员函数。定义时用保留字constructor,函数名通常为create。在定义的构造函数中,不仅可以为类对象分配内存空间,而且可以打开文件或数据库读取数据或控制设备复位。析构函数是专用的删除对象和为对象进行善后处理的成员函数。定义时用保留字destructor,函数名通常为Destroy。在析构函数中,不仅可以释放相应的内存资源,还可以保存数据信息,关闭文件或者数据库,控制设备复位并关机。3.3类成员的访问权限
封装是把一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体,也就是对象。
访问权限分为:private:私有数据成员、成员函数、过程。不能被类所在单元以外的程序访问,但本单元是可见的。
Protected:保护„„。被该类及该类的所有派生类访问,并成为派生类的私有成员。
Public:共有„„。被该类以外的类访问。
Published:公布„„。在设计期间的对象观察器窗口中可见。
Automated:自动„„。用于响应对象链接与嵌入自动化类型信息的公共接口。3.4继承
继承的实质是在既有类的基础上构造新的类,即新类从一个或者多个已有类中继承数据和方法,同时增加或重新定义数据和方法,由此构造出一个新的类型,称为派生类。已有的类称为基类。继承的主要目的是实现代码的重用。派生类的定义:type 派生类=class(基类){派生类新增或改写部分} End;
派生类的构造和析构函数:在派生类构造函数的开始部分,使用inherited保留字来调用基类的构造函数,首先初始化基类的成员,然后构造派生类的特有成员。在派生类的析构函数的结尾部分,使用inherited保留字来调用基类的析构函数,最后释放基类的成员部分。
构造函数越上层越早被调用,析构函数越下层越早被调用。3.5多态性
多态性是指同一的操作,在不同的对象中具体实现过程不同。Object Pascal 支持两种多态性和运行时的多态性。编译时的多态性通过重载来实现,运行时的多态性用虚方法来实现。
重载函数或者过程用保留字overload来说明。例如:Function max(x:integer):integer;integer; 虚方法的定义如p79 虚方法与动态方法的区别:在运行时才能确定对象方法的调用地址,这种调用方法为动态联编。虚方法与动态方法在功能上是等价的,不同在于虚方法额调用速度比较快,动态方法的代码比较少。
抽象类与抽象方法:使用指令字abstract说明,则该方法称为抽象方法,包含抽象方法的类称为抽象类。定义:procedure 过程名;virtual;abstract;
第四章
4.1 VCL基础
四种基本的组件类型:标准组件,自定义组件,图形组件,非可视组件。图形组件与标准组件的的区别在于:①标准组件可以获得输入焦点,即可用Tab键依次获得焦点;图形组件不能获得输入焦点。②标准组件可以包含其他组件,即可以是其他组件的父类;图形组件不能包含其他组件。③标准组件具有一个WINDOWS句柄,图形组件没有WINDOWS句柄。
4.2窗体设计
窗体组件的属性值设置为 组件名.属性:=属性值。重点看一下caption、visible、hint。
窗体的方法和事件详见P91.4.3常用VCL组件
对于memo组件的编程填空要注意。列表框组件(listbox)的常用属性见P104 4.4菜单设计
对菜单项可以指定其加速键,方法是在菜单项的Caption属性中,在要作为加速键的字母前添加符号“&”,则运行时该字母带有下划线,按下Alt+加速字母键就执行此菜单项。
4.6对话框的使用
Showmessage过程:调用Showmessage过程会弹出一个简单的对话框,对话框上显示提示信息及“确定”按钮,单击该按钮,就关闭对话框。
Inputbox函数:调用Inputbox函数显示一个能够接受哟娜防护输入数据的对话框,并返回用户输入的数据值。
Inputquery函数:与Inputbox函数最大的不同是他的返回值是一个逻辑值。
第五章 5.1程序调试
错误的种类及处理方式:
1、语法错误:没有遵守语言的语法规则而产生。
2、运行错误:程序在执行过程中发生了错误。程序试图打开一个不存在的文件或试图修改一个只读文件,程序运行过程中出现除零错误或用户输入了非法数据等。
3、逻辑错误:运行的结果与设想的结果不同。
解决逻辑错误可以从三步骤来解决:猜测出程序可能出错的地方,并在此设置断点。让程序执行到断点停止运行,观察所有中间变量及对象内容。让程序单步运行,同时观察每一个变量及对象内容的变化。
事件变量和相关数据的值:提示文本,watch list窗口,evaluate 窗口。5.2异常保护和处理
1、异常保护与try„finally„end;语句 Try „ //被保护的代码块 Finally „ //处理语句 End;
2、响应异常和try„except„end;语句 Try //以下为保护代码块 „
If <异常条件> raise<异常对象> Except //以下为异常处理快
On <异常类1> do <处理过程1或语句1> On <异常类2> do <处理过程2或语句2> On „
Else <其他处理过程或语句> End;
通过继承类exception可以自定义新的异常类。
第6章 Delphi7与数据库
6.1数据库简介 数据库可以长期存储、有组织、可共享的数据集合。
数据库系统(database system,DBS)是指具有数据管理功能的计算机系统。它一般由数据库、数据库管理系统和应用系统构成。
数据库系统根据的组织方式主要分为层次数据库系统、网状数据库系统、关系型数据库系统很面向对象数据库系统等几类
Delphi支持关系型数据库,关系型数据库由表组成。标的定义了事物的一组属性数据,称为记录。表的列定义了事物的某种属性,称为字段。6.2 Delphi7的数据库访问机制
Borland推出了一个数据库引擎(borland database engine,BDE)BDE管理器(BDE Administrator)是设置和管理BDE的工具,它可以用来管理BDE中的数据库别名和驱动器。Datebase Desktop的使用:
1、定义数据库别名
2、设置工作目录及私有目录
3、建立数据表结构
4、保存数据表文件
5、建立索引(1)建立主索引(2)建立次索引
6、设置有效性检查
7、设置口令
8、设置参照完整性
9、输入部分数据
数据库游览器可用于定义数据库别名、查询或编辑数据库中的各类信息,如数据库的参数设置、各类据表文件的结构及数据,也可以使用SQL语句进行查询 6.3数据库组件
使用TTable组件连接并显示数据表的一般步骤
1、把一个TTable组件放到窗体上
2、TableName属性指定要访问的表
3、TDataSource组件放到窗体上,设置DataSet属性指向该TTable组件
4、把数据控制组放到窗体上,设置TDataSource属性指向该TDataSource组件
5、把TTable组件的Active属性设为True Tablel.Fields[0].AsString:=Editl Edit.Text Editl.Text= Tablel Fields [0].AsString Editl.Text:= Tablel.FieldByName(‘Name’).AsString 当表结构改变引起字段索引号改变时,就要修改相应的程序,所以使用第二种方法比较好。
DataSet属性:表明于当 前数据源组件相联系的数据集组件对象的名字
Enabled属性:如果Enabled属性值为True(默认值),数据控制组件将显示数据:如果Enabled属性值为False,则所有与此数据源组件相连的数据控制组件都将不显示任何数据。
Columna属性用于指定TDBGrid对象中各栏目的特征 6.4 TField对象的使用
动态字段对象与永久字段对象的概念,区别,使用场合:Delphi会为数据中的每一个字段自动生成一个动态的字段对象。数据集的结构和其他信息改变,当应用程序重新打开这个数据集时,就会基于最近的结构和信息重建所有的字段对象。当数据集关闭时,这些对象也跟着取消。
动态对象的最大特点是适应性强,缺点是要想改变字段的显示属性、数据格式就要编写代码,不能把某些字段暂时隐去,也不能增加新的字段。
永久字段最大的好处是可以在设计时设置它的属性。可以选择部分字段,增加新的字段。再永久字段对象列表中删除某些需要保护的字段,避免用户访问这些字段;在数据库查询或特定数据表的字段基础上定义新的字段,代替现存的字段;改变原有的字段的显示和编辑属性。6.5 数据集的操作 数据集的打开与关闭:
1、设置Active属性 Table.Active:=True;//打开数据集,数据集组件对数据表进行读写操作。Table.Active:=False;//关闭数据集,数据集组件不能对数据表进行读写操作。
2、调用Open和Close方法 Table1.Opene//打开数据集和 Table1.Close//关闭数据集。移动记录指针:
1、Bof属性:如果Bof为True,表明当前记录指针所处的位置为数据集的第一条记录;反之,则不是第一条记录。
2、Eof属性:如果Eof为True,表明当前记录指针所处的位置为数据集的最后一天记录;反之,则不为最后一条记录。
3、First方法:将记录指针移至数据集的第一条记录处,并使之成为当前记录,同时将Bof属性值设置为True。
4、Last方法:将记录指针移至数据集最后一条记录处,并使之成为当前记录,同时将Bof属性设置为True。
5、Next方法:将记录指针后移一条记录,并使之成为当前记录。如果记录指针指向了数据集的最后一条记录,将Eof属性设置为True。
6、Prior方法:将记录指针前移一条记录,并使之成为当前记录。如果记录指针指向了数据集的第一条记录,将Bof属性设置为True。
7、MoveBy方法:将记录指针从当前记录开始向后或向前移动若干条记录。格式如下:function MoveBy(Distance:Integer):Integer;
限制记录集:
1、SetRangeStart方法和SetRangeEnd方法可以过滤记录。SetRangeStart方法用来限制记录集的开始,SetRangeEnd方法用来限制记录集的结束,调用ApplyRange方法使限制生效,调用CancelRange方法取消为数据表设定的限制范围。
2、使用数据集的Filter属性
Filter属性值是一个用来指明数据表过滤标准的字符串,Filter属性决定了过滤器是否起作用。
查找记录:
1、使用FindKey方法。使用Table的FindKey方法或FindNearest方法。
2、搜索特定记录(Locate)。FindKey或FindNearest方法只能在TTable组件中使用,如果使用的是TQuery或TStoreProc组件,就要使用Locate方法来查找记录。Locate函数适合于所有数据集组件,也适合于TTable组件。AppendRecord方法与InsertRecord方法:这里两个方法分别与Append方法与Insert方法相似,都是用于在表中插入一条新纪录,但AppendRecord方法与InsertRecord方法比Append方法与Inser t方法更简单、更方便一些,不需要调用Post方法。过程形式如下:Procedure AppendRecord(Const Values:Array of Const);
Procedure InsertRecord(Const Values:Array of Const);
建立数据表的主从关系:设置表之间的主从关系是通过设置从表的MasterSource属性和MasterField属性来实现的,且从表必须按MasterField属性中指定的字段建立了索引。
6.6TQuery组件
TQuery组件和TTable组件的比较:同属于数据集组件。
不同之处为:TQuery组件主要功能是用来支持SQL语言访问本地或远程数据库;TQuery组件允许用户同时访问多个表,而TTable组件一次只能访问一个表格;TQuery组件访问的是表格中的特定数据内容,而TTable组件只有在提供过滤或限定检索范围时才能访问表格中的特定数据内容,否则访问的将是表格中的全部数据。掌握P193 BDE综合实例。
6.8 ADO技术
通过ADO不仅能够访问基于SQL Server的所有数据库,而且可以通过ODBC访问所有支持ODBC的数据库。
ODBC是一种采用开放式结构进行数据库链接的接口标准,是一种开放的独立于厂商的API应用程序接口。掌握P208 ADO应用实例
第七章 Windows编程基础
7.1动态链接库(DLL)
Windows允许同时运行的多个程序共享一组函数的单一备份,于是引入了动态链接方式,将可共享的程序代码以及各种数据资源编译成单独的模块。
一般项目的格式如下: Program 程序标识符; Uses 单元列表; Begin 程序体; End.DLL项目文件的格式如下: Library 程序标识符号; Uses 单元列表;
Exports 过程和函数标识符列表; Begin 程序体; End.两者的区别的原因在于:Delphi编译器是一句项目文件头的保留字是Program还是Library来决定编译生成的是EXE文件还是DLL文件。若DLL 要输出共其他应用程序调用的函数或过程,则需要在其项目文件的保留字exports之后一一列出,这些DLL函数或过程将被编译成远程地址调用。
Window系统自身包含三个DLL,分别是Kernel,User,GD1。DLL调用必须使用标准方式,其一是静态引用,其二是动态引用。静态引入:
加载引用的DLL文件是,库文件的查找顺序是:
1、当前路径;
2、Windows系统的安装目录;
3、Windows的系统目录system和system32;
4、列在环境变量PATH中的路径。
引入方法:
1、最简单的是名字引入;
2、使用索引引入;
3、若名字引入会引起标识符冲突,可以使用换名引入。
第二篇:Delphi 字符串类型浅析
Delphi 字符串类型浅析 收藏
参考资料《Delphi 5开发人员指南》“第2章Object Pascal语言” 《PASCAL精要》“第7章 字符串操作” “Delphi中String类型和Char类型的比较” “Object Pascal中String类型的内幕探讨”
基本知识字符串类型
•AnsiString这是Pascal缺省的字符串类型,它由AnsiChar字符组成,其长度没有限制,同时与null结束的字符串相兼容。
•ShortString保留该类型是为了向后兼容Delphi1.0,它的长度限制在255个字符内。
•WideString功能上类似于AnsiString,但它是由WideChar字符(UniCode字符集)组成的。引入这种类型,主要是为了支持OLE编程。
•PChar指向null结束的Char字符串的指针,类似于C的char*或lpstr类型。
•PAnsiChar指向null结束的AnsiChar字符串的指针。
•PWideChar指向null结束的WideChar字符串的指针。
字符类型
•AnsiChar,以 8 位表示(共有 256 个不同的符号)。
•WideChar,以 16 位表示(共有 64,000 个不同的符号)。
String类型
注意:以下是指Delphi2007以前的编译器(包括Delphi2007)。
1、缺省情况下,如果用如下的代码来定义字符串,编译器认为是AnsiString字符串: var
S:string;//编译器认为S的类型是AnsiString
2、编译开关$H
“$H编译开关”的值用来决定当变量声明为string时,它是被当作AnsiString类型还是被当作ShortString类型。当“$H”值为负时,string变量是ShortString类型;当“$H”值为正时(缺省情况),string变量是AnsiString类型。下面的代码演示了这种情况: var
{$H-}
S1:string;//S1是ShortString类型 {$H+}
S2:string;//S2是AnsiString类型
使用$H规则的一个例外是,如果在定义时特地指定了长度(最大在255个字符内),那么总是ShortString。var
S:string[63];//63个字符的ShortString字符串
Char类型
1、Delphi2007以前的编译器(包括Delphi2007)缺省情况下认为Char是AnsiChar类型,PChar是PAnsiChar类型。
2、Delphi2009的编译器缺省情况下认为Char是WideChar类型,PChar是PWideChar类型。请注意,没有任何方法可变更这个新的编译器预设设定。对于字符串类型而言,会以固定的硬式编码方式将 Char 类型对应到特定的数据类型。
AnsiString类型
1、AnsiString是生存期自管理类型。
2、AnsiString字符串总是以null字符结束的,这使得AnsiString字符串能与Win32API中的字符串兼容。
3、AnsiString类型是一个指向在堆栈中的字符串结构的指针。可以使用Sizeof去读取AnsiString类型的大小,不论字符串的实际长度是多少,Sizeof(AString)永远是4。
4、AnsiString字符串在内存中分配的情况 注意:
在Delphi2.0以后版本中,不能再通过字符串的第0个元素来设置或得到字符串的长度,只能通过Length()函数来得到字符串的长度,通过SetLength()过程来设置字符串的长度。Borland并不保证String的内存结构在以后的Delphi版本中会保持不变。
(1)、Delphi5内存结构如下:
(2)、Delphi7内存结构如下:
AnsiString指向一块内存起始偏移8字节处,前面8字节依次为引用计数和长度计数两个整数。(3)、Delphi2009内存结构如下:-12-10-8-4
最后一位
字码页
字符大小
引用计数
字串长度
字串内容
0
除了字串长度及引用计数外,新的AnsiString格式包括字符大小及字码页。字符大小可用来区分 AnsiString 及UnicodeString,而字码页特别适用于 AnsiString 类型(可用于 Delphi 2009),UnicodeString 类型的字码页则固定为 1200,字码包括UTF-
8、GBK等,例如“$03A8就是936,查MSDN 936sizeof(StrRec));
showmessage(Format('分配大小:%d 引用计数:%d 字串长度:%d', [P.allocSiz,P.refCnt,P.length]));end;
示例:delphi7字符串内存结构
代码:
procedure TForm1.Button1Click(Sender: TObject);type
PStrRec = ^StrRec;
StrRec = packed record
refCnt: Longint;
length: Longint;
end;var
str: string;
P: PStrRec;
begin
str:='123';
P := Pointer(Integer(str)sizeof(StrRec));
showmessage(Format('字码页:%d 字符大小:%d 引用计数:%d [P.codePage,P.elemSize,P.refCnt,P.length]));end;
示例:widestring的长度
代码:
字串长度:%d', procedure TForm1.Button1Click(Sender: TObject);
//---
function _WStrLen1(const S: WideString): Integer;
begin
if Pointer(S)= nil then
Result := 0
else
Result := PInteger(Integer(S)-4)^ div sizeof(WideChar);
end;var
str: widestring;
begin
str := '测试123';
showmessage(Format('字串长度:%d', [_WStrLen1(str)]));end;
本文来自CSDN博客,转载请标http://blog.csdn.net/starsky2006/archive/2010/07/31/5778729.aspx
出处明:
第三篇:Delphi实习报告
实习报 告 书 专 用 纸
实习报 告 书
引言
题
目: Delphi 学
院:
专
业: 地理信息系统 班
级:
姓
名: 学
号:
2013年
6月日
实习报 告 书 专 用 纸
娱乐场所信息查询软件,软件界面设计简洁,美观,其人性化的软件流程,可以让一般人方便的查询娱乐场所,上手极易,不用打开多个窗口可重复查询。系统需求分析
根据用户的需求,对本系统做整体的需求分析,这是保证系统有效性和实用性的前提。
2.1 功能需求分析
在设计本系统之前,作者与相关工作人员进行了交流,并对此进行了归纳提炼,得出建立一个娱乐场所信息查询应具备如下功能:
(1)娱乐场所信息查询。可以对任何一个娱乐场所的详细信息进行查询,其中包括名称、所处路名、ID等。
(2)娱乐场所所在地区的地图显示。(3)最短路径的分析。(4)地图打印。
2.2 数据需求
根据功能需求的要求,需要有一系列的数据来支撑,本系统需要的数据包括所处地区的地图模板、道路信息、娱乐场所信息等 系统设计
为确保系统顺利的实施,本系统遵循软件工程原理和方法,对系统进行总体设计和详细设计;其次,应满足先进性原则,依照国际标准,借鉴主流系统的体系结构,保证系统具有较长的生命力和扩展能力;此外,还应满足成熟性原则、实用性原则、高可靠性原则等。根据需求分析的结果,本着以上原则展开对本系统的设计。
3.1 界面设计
为了界面设计,增强系统的美观性、灵活性,使系统易于操作,采用了很多优秀的
实习报 告 书 专 用 纸
3.1.1 登录界面
该系统需要输入用户名、密码才可运用,具有较好的保护性
3.1.2 关于界面
3.2 技术路线
本系统采用Embarcadero Delphi XE3作为开发工具。Delphi,是Windows平台下著名的快速应用程序开发工具,最早的版本由美国Borland(宝兰)公司于1995年开发。
实习报 告 书 专 用 纸
Delphi是一个集成开发环境(IDE),使用的核心是由传统Pascal语言发展而来的Object Pascal,以图形用户界面为开发环境,通过集成开发环境、VCL工具与编译器,配合连结数据库的功能,构成一个以面向对象程序设计为中心的应用程序开发工具。
“真正的程序员用C,聪明的程序员用Delphi”,这句话是对Delphi最经典、最实在的描述。Delphi最大的特点是简单易学、执行高效而且功能强大。和Microsoft Visual Studio C++ 相比,Delphi更易于掌握,学习周期也比较短,而在功能上却丝毫不逊色;而与Visual Basic相比,Delphi功能更强大、更实用,尤其在开发数据库方面,它的特点更是体现得淋漓尽致。这正是作者选用Delphi作为开发工具的原因。
Delphi发展至今,从Delphi 1到现在的Delphi XE2,不断添加和改进各种特性,功能越来越强大。Delphi 2010内置了Direct 2D模块及开发库,其新加的功能包括:○1○1支持64位Windows操作系统的开发;○2○2称为FireMonkey的新的跨平台框架;○3○3在Windows上开发,用来编译Max OS X的交叉编译器;④FireMonkey支持iOS(Apple iPad及iPhone)的开发;⑤LiveBindings的新的数据绑定功能,允许你将任何可视对象绑定到任何使用表达式的源对象。系统实现
4.1 概述
在完成了需求分析、系统设计和技术路线的选定后,按照前期工作的思路,逐步的实现商品管理系统。本系统以Delphi XE3为开发环境,实现了连云港娱乐场所信息查询功能。
4.2 功能模块实现
4.2.1 登录模块
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm2.Button1Click(Sender: TObject);begin
ClientDataSet1.Close;ClientDataSet1
.CommandText
:='select
*
from
Table01
where name='''+edit1.Text+''' and “PASSWORDs” ='''+edit2.text+'''';ClientDataSet1.Open;if ClientDataSet1.RecordCount=0 then begin ShowMessage('口令错误');end else begin ModalResult:=mrOk;end;end;4.2.2 图层管理
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm1.FormCreate(Sender: TObject);var denglu: TForm2;begin pShpLayer := TGIS_LayerSHP.Create;pShpLayer.path := 'D:delphi连云港.shp';ttkViewer1.Add(pShpLayer);pShpLayer := TGIS_LayerSHP.Create;pShpLayer.path := 'D:delphi道路.shp';ttkViewer1.Add(pShpLayer);pShpLayer := TGIS_LayerSHP.Create;pShpLayer.path := 'D:delphi娱乐.shp';pShpLayer.Params.Labels.Field := '名称';pShpLayer.Params.Labels.color := clred;ttkViewer1.Add(pShpLayer);ttkViewer1.FullExtent;pShpLayer1 := ttkViewer1.items[0] as TGIS_LayerVector;pShpLayer2 := ttkViewer1.items[1] as TGIS_LayerVector;pShpLayer3 := ttkViewer1.items[2] as TGIS_LayerVector;denglu := TForm2.Create(Self);denglu.showmodal;
实习报 告 书 专 用 纸
denglu.Free;end;4.2.3 图层的放大缩小(1)点击缩放
操作部分核心代码如下所示
procedure TForm1.Button2Click(Sender: TObject);begin ttkViewer1.mode := giszoomex;end;
(2)点击暂停缩放
操作部分核心代码如下所示:
procedure TForm1.Button3Click(Sender: TObject);begin ttkViewer1.mode := gisSelect;end;4.2.4点击地图平移
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm1.Button5Click(Sender: TObject);begin ttkViewer1.mode := gisdrag;end;4.2.5点击属性查询
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm1.Button4Click(Sender: TObject);begin ttkViewer1.mode := gisSelect;end;4.2.6路名显示 点击路名显示
操作部分核心代码如下所示:
procedure TForm1.Button8Click(Sender: TObject);begin pShpLayer1.Params.Labels.Visible := false;pShpLayer3.Params.Labels.Field := '名称';pShpLayer2.Params.Labels.Field := '路名';ttkViewer1.FullExtent;end;4.2.7最短路径分析 点击最短路径查询
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm1.Button6Click(Sender: TObject);var ii, jj: Integer;I: Integer;aa, bb: string;begin presultlayer := TGIS_LayerVector.Create;presultlayer.CS := ttkViewer1.CS;presultlayer.Params.Line.color := clred;presultlayer.Params.Line.Width := 40;presultlayer.HideFromLegend := True;ttkViewer1.Add(presultlayer);
proadlayer := ttkViewer1.Items[1] as TGIS_LayerVector;
pgeocoding := tgis_geocoding.Create(proadlayer);pgeocoding.RoadName := 'GIS_UID';(ttkViewer1.Get('TGIS_Geocoding')
as
实习报 告 书 专 用 纸
TGIS_LayerVector).HideFromLegend := True;
pshortespath := TGIS_ShortestPath.Create(ttkViewer1);pshortespath.LoadTheData(proadlayer);pshortespath.RoadName := 'GIS_UID ';pshortespath.UpdateTheData;pshape := proadlayer.FindFirst(proadlayer.Extent, '路名=''' + Edit1.Text + '''');aa := pshape.GetField('gis_uid');ii := pgeocoding.Parse(aa);if ii > 0 then begin pstartpoint := pgeocoding.Point[0];Edit1.Text := pgeocoding.Query[0];pgeocoding.AddPoint(pstartpoint, 3 / ttkViewer1.Zoom, nil);end else begin ShowMessage(Edit1.Text + ' 是无效地名');Exit;end;
pshape := proadlayer.FindFirst(proadlayer.Extent, '路名=''' + Edit2.Text + '''');bb := pshape.GetField('gis_uid');jj := pgeocoding.Parse(bb);if jj > 0 then begin pstoppoint := pgeocoding.Point[0];Edit2.Text := pgeocoding.Query[0];pgeocoding.AddPoint(pstoppoint, 3 / ttkViewer1.Zoom, nil);end else
实习报 告 书 专 用 纸
begin ShowMessage(Edit2.Text + ' 是无效地名');Exit;end;
pshortespath.UpdateTheData;if pshortespath.Find(pstartpoint, pstoppoint)then begin presultlayer.RevertAll;for I := 0 to pshortespath.ItemsCount-1 do begin pshape pshortespath.Items[I].Layer.GetShape(pshortespath.Items[I].Uid);if pshape <> nil then presultlayer.AddShape(pshape);end;ttkViewer1.VisibleExtent := presultlayer.Extent;ttkViewer1.Zoom := ttkViewer1.Zoom * 0.8;ttkViewer1.Update;end else begin ShowMessage(' 此路不通 ');end;end;4.2.8打印 点击打印
:=
实习报 告 书 专 用 纸
操作部分核心代码如下所示:
procedure TForm1.Button9Click(Sender: TObject);begin ttksimple.preview;end;4.2.9定点查询 点击定点查询
操作部分核心代码如下所示:
procedure TForm1.Button1Click(Sender: TObject);var pshape: TGIS_Shape;
实习报 告 书 专 用 纸
pLayer: TGIS_LayerVector;begin pLayer := ttkViewer1.items[2] as TGIS_LayerVector;pshape := pLayer.FindFirst(pLayer.Extent, '名称=''' + Edit3.Text + '''');if pshape <> nil then begin ttkViewer1.Center := pshape.Centroid;pshape := pshape.MakeEditable;pshape.IsSelected := true;ttkattrib.ShowShape(pshape);ttkattrib.Visible := true;ttkViewer1.Update;end;end;4.2.9关于模板
4.3 系统功能及效率分析
经过测试,系统总体的执行效率比较高。能够满足用户的基本要求。总结
本论文主要是探讨娱乐场所信息查询服务的设计与实现问题。在系统设计之初,尽管作者做了调查,但依然缺少足够的管理方面的经验,在结构和功能方面尚有考虑不到的地方。
第四篇:delphi 日常语法总结
Delphi总结
目录
Delphi总结.......................................................................................................................................1
1:控件只能输入数字................................................................................................................1 2:下拉框赋值............................................................................................................................1 3:初始化Cell.............................................................................................................................2 4:注册Cell.................................................................................................................................2 5:华表居中 华表增加,删除某一行......................................................................................2 6:设置增删改查按钮状态........................................................................................................2 7:主键获取方法........................................................................................................................3 8:获取多条,返回容器............................................................................................................3 9:保存
修改
删除
方法....................................................................................................4 10:遍历下拉框的值..................................................................................................................5 11: TDBGridEh增加,修改后定位到某个..............................................................................5 12::json封装,解析.................................................................................................................5 12:导出Excel文件(TsaveDialog控件).....................................................................................7 13:判断奇偶数分别插入不同位置..........................................................................................7
14:从一个目录复制文件到另一个目录,删除文件......................................................8
15:从下拉框多个值获取ID.....................................................................................................8
16:Delphi 格式化日期.....................................................................................................8 17:华表某一列求和..........................................................................................................8
1:控件只能输入数字
if not(key in ['0'..'9', #8])then key := #0;2:下拉框赋值
procedure TSickDistrtionsFrm.SetDoct();var
obj: TDoctInfoClass;
DoctInfo: THis_DoctInfo;
idx: Integer;begin
inherited;
obj := TDoctInfoClass.Create;
obj.GetAllDoctDB();
for idx := 0 to obj.iteminfo.Count1, cl1.Rows1, cl1.Rows1 do
begin
DoctInfo := THis_DoctInfo(cbbzgys.Items.Objects[idx]);
if DoctInfo.sDoct_ID + '.' + DoctInfo.sDoct_Name = BedDistrtion.sDirectorDoct then
begin
cbbzgys.ItemIndex := idx;
end;
end;11: TDBGridEh增加,修改后定位到某个
adors.Locate('sMlbm', CatalogueInfo.sMlbm, [loCaseInsensitive]);
12::json封装,解析
Var
jo, jo1, jt, jfields: ISuperObject;//封装明细
jo := SO();jt := SA([]);for idw := 0 to TJXMBInfo.iteminfo.Count1 do
begin
TJXMBInfo := TB_TJXMBInfo.Create;
TJXMBInfo.sbz := tt.O[i].s['sbz'];
TJXMBInfo.sxmmc := tt.O[i].S['mc'];
TJXMBInfo.sxmbh := tt.O[i].S['bh'];
TJXMBInfo.sKebh := tt.O[i].S['sKebh'];//
TJXMBInfo.sxmmx:= tt.O[i].S['sxmmx'];
TJXMBInfo.nxmjg := tt.O[i].d['XMJG'];
iteminfo.Add(TJXMBInfo);
end;
end
else
begin
TJXMBInfo := TB_TJXMBInfo.Create;
TJXMBInfo.sbz := jo.O['list'].s['sbz'];
TJXMBInfo.sxmmc := jo.O['list'].S['mc'];
TJXMBInfo.sxmbh := jo.O['list'].S['bh'];//
TJXMBInfo.sxmmx := jo.O['list'].S['sxmmx'];
TJXMBInfo.sKebh := jo.O['list'].S['sKebh'];
TJXMBInfo.nxmjg := jo.O['list'].d['XMJG'];
iteminfo.Add(TJXMBInfo);
end;
end;end;12:导出Excel文件(TsaveDialog控件)
{导出Excel }
if SaveDialog1.Execute then
begin
{命令执行}
{获取文件名}
Cell1.DoExportExcelFile(SaveDialog1.FileName);
end;13:判断奇偶数分别插入不同位置
for idx := 0 to PhyData.iteminfo.Count-1 do
begin
TJXMBjson := TB_TJXMBInfo(PhyData.iteminfo.Items[idx]);
if idx mod 2 = 0 then
//偶数
begin
row1 := row1 + 1;
cl1.DoSetCellData(0, row1, '□' + TJXMBjson.sxmmc);
cl1.DoSetCellTextStyle(0, row1, 1);
cl1.DoSetRowHeight(row1, cl1.DoGetRowBestHeight(row1)+ 15);
end
else if idx mod 2 = 1 then
//奇数
判断列增加
begin
cl1.DoSetCellData(2, row1, '□' + TJXMBjson.sxmmc);
cl1.DoSetCellTextStyle(2, row1, 1);
cl1.DoSetRowHeight(row1, cl1.DoGetRowBestHeight(row1)+ 15);
end;
for idxC := 0 to 4 do
begin
cl1.DoSetCellAlignment(idxC, row1, 32);//居中显示
end;
end;,14:从一个目录复制文件到另一个目录,删除文件
CopyFile(PChar('D:A***920001X.xml'), PChar('D:B***920001X.xml'), false);
DeleteFile('D:B***920001X.xml');
15:从下拉框多个值获取ID aInfo.sOpid :=THis_UserInfo(cbbczy.Items.Objects[cbbczy.ItemIndex]).sUser_ID;
16:Delphi 格式化日期
formatdatetime('yyyy-mm-dd',now);17:华表某一列求和
cl1.DoSetFormula(1, fpirow, 'sum(B' + IntToStr(3)+ ':B' + IntToStr(fpirow)+ ')');
第五篇:delphi粮库监控系统开题报告
delphi粮库监控系统开题报告.txt心若无尘,一花一世界,一鸟一天堂。我曾经喜欢过你,现在我依然爱你希望月亮照得到的地方都可以留下你的笑容那些飘满雪的冬天,那个不带伞的少年,那句被门挡住的誓言,那串被雪覆盖的再见delphi粮库监控系统开题报告毕业设计(论文)题目基于C/S结构的粮库监控系统设计
设计(研究)内容和意义:
一、开发语言说明:
Delphi是Borland公司开发的一组基于VCL库的可视化开发工具,它在组件技术的支持、数据库支持、系统底层开发支持、网络开发支持、面向对象特性等各方面都有相当不错的表现,并且学习使用较为容易,充分体现了所见即所得的可视化开发方法,开发效率高。它也继承了该公司一贯以来的优良传统,代码执行效率高。Delphi 的VCL库是基于Object Pascal(面向对象Pascal),语法较为灵活,使用也较为广泛。
二、开发本系统的目的及其对于粮库监控的意义
粮食是关系国计民生的重要战略物资,吃饭始终是人类赖以生存和社会稳定的头等大事,保持粮食科学仓储和流通至关重要,尤其是我国粮食总体上丰收年份少、欠收年份多,我国还有数千万群众的温饱问题尚未解决,我们必须居安思危,做好储粮保粮工作,将粮食储备过程中的损失减少到最低。
建国50年来,粮食仓储和流通设施建设取得了很大成绩,粮食仓储规模比1949年的750万吨增加了20多倍。以粮食主产区和主销区为重点,在全国铁路、水路和公路干线的枢纽地点,初步形成了各种规模、多种仓型和多中储运方式相结合的粮食仓储和流通网络,解决了部分国家粮食收储和供应的需要,但国内的仓储形势仍旧非常严峻。因此,国家队这种情况非常重视,由朱容基总理亲自抓粮食储备工作,投入二千亿元建设国储粮仓,同时国际农业组织又通过世界银行为我国提供无偿贷款,用以支持东北走廊粮食中转库和吸纳库的建设工作。在这种情况下,开发一个结合现代计算机技术、控制技术、图形技术的粮库监控系统,可以简化粮食存储管理过程,保障粮食的安全,减少人力,提高效率,这对于推进粮库管理的现代化将具有非常重要的作用。
本系统基于C/S结构,是一种分布式计算机控制系统。它的实质是利用计算机技术对生产过程进行集中监控、操作、管理和分散控制的一种新型的控制技术。DCS是由计算机技术、信号处理技术、测量控制技术、网络通信技术和人机接口技术相互发展和渗透而产生的。它既不同于分散的仪表控制系统,又不同于集中式计算机控制系统,它是吸收了两者的优点,在它们的基础上发展起来的一门系统工程技术,具有很强的生命力和显著的优越性。
储粮管理现代化是当前粮食系统改造的重大项目之一,贮粮管理现代化能及时检测、保存个粮仓的粮情信息(如粮温、粮湿等),对于安全储粮、历史数据查询、分析得出储粮普遍规律都有积极的作用;对改变早期粮情信息检测手工作业效率低,劳动强度大以及降低储粮成本有明显的作用。就项目初步在一个粮库的实施情况看,大大减少了人力。既能产生一定期的经济效益,也具有重大的社会效益。
三、系统功能实现
①系统自动连接数据库并初始化
②系统根据数据库中的仓房货位配置表建立系统目录列表结构;
③用户选择需要的仓房货位进行实时监控;
④用户选择特定的仓房货位进行危粮监控;
⑤用户设置测温点具体信息;
⑥系统定时自动保存最新数据到数据库;
⑦用户查询需要的数据生成图表或报表并进行打印;
⑧用户配置系统基础信息。
四、设计方法和步骤:
根据当前Delphi技术发展趋势,分析情况,讨论合适的架构设计方案,并且根据系统的规划情况设计数据库(采用SQL SERVER 2000),同时选择合适的Delphi第三方控件作为辅助开发工具。开发过程完全按照软件工程的流程合理的安排每个工作步骤,协调组员,增强组员间的联系和沟通。要求有完整的注释和工作文档资料。按时完成任务,然后经过系统的测试最后发布程序。在开发过程中要注意本系统精髓的体现:C/S三层结构,系统动态初始化,实时监控,操作简便。只有立足于这几点,本系统才算真正成功。
第一步:搭建系统架构,明确要实现的功能;
第二步:深入学习Delphi的知识,以使既定系统功能得到全面的实现;
第三步:分配任务,具体实现;
第四步:各功能模块进行单元测试;
第四步:结合各部分功能模块,进行系统合成;
第五步:系统测试。
设计(研究)方案和进度安排:
设计(研究)方案:
本系统主要研究基于C/S结构的监控系统,首先,为了避免C/S结构客户端庞大的缺陷发挥其优势,决定采用MIDAS技术将系统C/S结构转变为带有应用服务器层的三层机构,使表达层与业务逻辑层分离,实现瘦客户端;其次,为了开发出一个务实的系统,能够确实的对粮库管理发挥出作用,提高粮库管理的效率,增加粮食的安全,在系统设计前进行了充分的调研和分析,主要把系统分为实时数据处理和历史数据处理两部分,分别满足用户对粮情实时监控以及对历史数据分析总结的需要。
进度安排:
第一阶段:1月13日——3月6日
主要任务:熟悉Delphi的集成开发环境,编写一些初级程序并实现其功能;
熟悉SQL SERVER 2000,能建立数据库和数据表;
在Delphi环境中熟练对数据库的基本操作功能;
完成二篇与计算机专业有关的英文期刊文章的翻译。
第二阶段:3月7日——3月21日
主要任务:市场调研,去至少二个省属或市属的粮库了解实际需求;
查找有关文献资料,完成文献综述;
提出粮库监控系统的需求分析,拟定功能模块和开发提纲;
完成毕业设计开题报告。
第三阶段:3月22日——4月22日
主要任务:系统架构并完成数据库设计;
根据系统需求及功能模块,设计后台软件的功能框架和主界面;
完成前台实时数据处理部分的软件开发;
完成其他附属功能中的一部分软件开发;
第四阶段:4月23日——5月10日
完成其他附属功能中的剩余部分软件开发;
整合各功能模块,以达到界面整合的目的。
测试并修改各功能程序,直至完整地实现系统功能。
测试整个系统的运行,对功能进行补充、修改
第五阶段:5月11日?——5月16日
主要任务:完善整个监控系统既定的全部功能;
进行二次测试,提高软件系统的健壮性。
第六阶段:5月17日?——6月初
主要任务:整理文档资料,撰写毕业设计论文;准备答辩。
主要参考文献资料:
[1]杨叔子, 史铁林, 李东晓.分布式监测诊断系统的开发与设计[J].振动、测试与诊断, 1997, 17(1):1-6.[2]NicholsH.M.C., BernardC.B., avid M.H..Remote Instrument Diagnosis on the Internet [J].IEEE Intelligent System, 1998,(5):70-76
[3]刘艺.Delphi第三方控件使用大全.中国水利水电出版社[M], 2001.1.[4]李之明, 高玉琢.DELPHI 7组件经典解析[M].中国铁道出版社, 2003.6.[5]飞思科技产品研发中心.DELPHI 7 组件及分布式应用开发[M].电子工业出版社, 2003.1.[6]Raghu Ramakrishnan, Johannes Gehrke.DATABASE MANAGEMENT SYSTEMS [M].清华大学出版社, 2002.12.[7]David Sceppd.ADO PROGRAM TECHNOLOGY [M].清华大学出版社, 2001.1.[8]柳树春.基于Web 3-Tier客户、服务器体系的应用系统开发与实现[J].计算机工程与应用, 2004.[9]杨秀金.面向对象技术与安全储粮决策分析系统推理[J].微机发展, 1999,(4):60~63
[10]李时惠.计算机多点温度采集系统的设计与实现[J].计算机技术与自动化, 2001, 20(1):71~74
[11]Roger S.Pressman.Software Engineering:A Practitioner’s Approach[M].机械工业出版社, 2005.7.