ch3应用程序的框架_第1页
ch3应用程序的框架_第2页
ch3应用程序的框架_第3页
ch3应用程序的框架_第4页
ch3应用程序的框架_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级程序设计枣庄学院信息科学与工程学院主要内容应用程序的基本结构编译项目文件前的设置项目文件项目文件管理与优化编译并运行项目项目文件中Application和Screen对象程序设计中的常用基本技巧第三章应用程序的框架和设计枣庄学院精品课程3.1应用程序的基本结构利用Delphi开发的应用程序从宏观上可分为三个层次,即项目文件、主单元文件和功能模块文件。项目文件是应用程序的主程序文件,它主要完成应用程序初始化及各种应用程序模块的管理工作。主单元文件是用于控制应用系统操作的有窗体的单元文件,在项目文件中,主单元是由Application对象的Run过程调用执行的。功能模块文件是能独立完成某项功能的程序,它一般由主单元通过菜单调用来执行,功能模块通常是有窗体的单元文件或数据模块文件。枣庄学院精品课程应用程序基本构成图示单元文件窗体文件主单元单元文件窗体文件数据模块模块n模块1模块2封面程序密码确认程序主程序枣庄学院精品课程3.2开发应用程序前的系统设置设置自动保存程序代码功能执行菜单Tools→EnvironmentOptions自动保存设置枣庄学院精品课程3.2开发应用程序前的系统设置设置自动保存程序代码

若选中Editorfiles,则表示当编译应用程序时,Delphi将自动保存当前正在编辑的程序文件。若选中ProjectDesktop,则表示当编译应用程序时,Delphi自动保存当前项目的桌面信息(一旦保存了桌面信息,当下次启动Delphi时,系统会自动回到保存的桌面状态)。枣庄学院精品课程3.2开发应用程序前的系统设置设置使用撤销操作执行菜单Tools→EditorOptions设置处枣庄学院精品课程3.3设置使用开发包使用外来组件包需要如下2个步骤:安装组件包;设置组件包的搜索路径。安装组件安装未编译的组件包(即有源程序代码的包)安装已编译组件包。枣庄学院精品课程未编译组件包的安装首先打开要安装包的项目文件(为.dpk),则显示类似如右图所示的窗口(若系统没有出现此窗口,可单击菜单Project→ViewSource,然后再按F12功能键),单击右图中的“Install”按钮即完成组件包的安装。安装按钮枣庄学院精品课程设置组件包的搜索路径单击菜单Tools→EnvironmentOptions,选择“Library”页,并按下图操作。加入选择包所在路径选择包所在文件夹枣庄学院精品课程3.3项目文件项目文件是应用系统的主控文件,它的扩展名是dpr。本节主要内容:项目文件的建立结构加入或移出单元文件设置枣庄学院精品课程3.3.1建立项目文件方法:File→New→Application,则建立一个名为Project1.dpr新项目文件.

枣庄学院精品课程3.3.2项目文件的组成结构查看项目文件内容可使用Project→ViewSource菜单。项目文件内容主要有三大部分组成:声明项目名部分、说明部分和执行部分。声明部分格式:program项目名;用于说明项目文件名,可通过File->saveas菜单修改。枣庄学院精品课程3.3.2项目文件的组成结构说明部分说明项目文件可引用的单元、资源文件及定义项目文件中使用的类型、常量、变量、过程或函数等。除定义变量、过程或函数定义外,常用的格式语句:uses语句和资源引用语句

uses语句单元名in'文件名'{窗体名}读取资源语句

{$R*.RES}

注意:这里的*表示与项目名重名。

枣庄学院精品课程3.3.2项目文件的组成结构执行部分执行部分是项目文件中Begin...End之间的部分,是应用程序启动时首先要执行的程序代码。主要有三种语句:初始化应用程序语句:Application.Initialize;窗体对象实例化语句,格式为:Application.CreateForm(窗体类名,窗体名);例如:Application.CreateForm(TForm1,Form1);上格式语句可以有多个,Delphi系统将第一个使用CreateForm语句建立的窗体默认为应用程序的主窗体。枣庄学院精品课程3.3.2项目文件的组成结构执行主窗体对应的程序:Aplication.Run;上语句不仅显示主窗体,同时它负责当主窗体关闭时,退出应用程序并返回到操作系统。注意:项目文件一般是由系统自动维护的,除非特别需要,一般不修改其中的代码。枣庄学院精品课程3.3.3将单元文件加入或移出项目文件用于将应用系统的模块程序(单元文件)组合到项目中

加入移出单元文件步骤:打开项目文件执行File→Open菜单,找到要打开的项目文件名(.dpr)并打开。向项目文件中加入单元:执行Project→AddtoProject菜单,则出现一个对话框,在对话框中查找并选择你要加入的单元文件,最后再单击“打开”按钮。注意:加入到项目文件中的单元,在项目文件中将以“单元名in'文件名'{窗体名}”的格式出现在Uses语句中。枣庄学院精品课程3.3.3将单元文件加入或移出项目文件用于将应用系统的模块程序(单元文件)组合到项目中从项目文件中移出单元文件:单击Project→RemovefromProject菜单注意:没有任何单元文件的项目文件将编译成一个无任何功能应用程序。加入或移出单元文件还可通过使用工具栏上的快捷按钮来完成,如图所示。加入单元移出单元枣庄学院精品课程3.3.4设置项目编译环境主要用于解决内存不够、文件存储等问题。单击Project→Options菜单可进入项目编译环境设置对话框,设置方法如下:设置窗体通常情况下,除主窗体外,其余窗体应设置成可用窗体,设置方法是:首先,在项目编译环境设置对话框上选择Forms页;其次,在“Autocreateforms”子窗口中选择窗体名后单击“>”按钮,使其转移到“Avialableforms”子窗口中,这样就使自动创建窗体变成可用窗体。注意:主窗体必须是自动创建窗体。设置主窗体自动创建窗体可用窗体枣庄学院精品课程3.3.4设置项目编译环境设置应用程序在项目编译环境设置对话框中选择“Application”页(如图所示),在此口主要做如下四个设置:标题

是应用程序最小化时在任务栏上显示的标题。帮助文件用于设置当激活帮助时,应用程序自动调用的帮助文件。图标用于设置应用程序在被最小化时显示的图标。目标文件扩展名用于设置编译生成的可执行文件的扩展名。标题设置帮助设置修改图标设置扩展名枣庄学院精品课程3.3.4设置项目编译环境应用程序可使用两种包,即设计期包和运行期包。可通过项目编译环境设置对话框来设置,设置方法如下:打开项目编译环境设置对话框,选择Packages,则显示如图所示对话框,若选中BuildwithRuntimepackages,则当前项目文件在编译时将使用运行期包,否则,使用设计期包。注意:若设置对话框中的Default检查框,则将当前设置作为以后新建项目的默认值。标题设置帮助设置修改图标设置扩展名枣庄学院精品课程设置项目文件存放路径为防止多种应用项目文件因存放而产生的混乱,合理分配每个应用程序的存放路径将显得非常重要。设置项目文件的存放位置可通过项目文件设置对话框来完成,如右图:输出目录单元输出目录搜索目录枣庄学院精品课程3.3.3将单元文件加入或移出项目文件常用的路径设置输出路径用于设置Delphi编译生成的可执行文件(exe)的存放路径。单元输出路径用于设置单元编译后生成的文件(.dcu文件)的存放路径。搜索路径用于指定编译器的搜索路径枣庄学院精品课程3.3.5项目中常用的文件

单元文件

单元文件主要分为窗体单元文件、组件单元文件和通用单元文件三种类型:

窗体单元文件具有窗体的单元,还可分为窗体单元文件(Form)、框架单元文件(Frame)和数据模块单元文件(DataModule)组件单元文件组件单元是创建新组件时建立的单元文件,有些有窗体,有些则没有。通用单元文件通用单元主要用于定义应用程序所有单元均可使用的数据类型、变量、过程、类等。枣庄学院精品课程3.3.5项目中常用的文件

单元文件

单元文件主要分为窗体单元文件、组件单元文件和通用单元文件三种类型:

窗体单元文件具有窗体的单元,还可分为窗体单元文件(Form)、框架单元文件(Frame)和数据模块单元文件(DataModule)组件单元文件组件单元是创建新组件时建立的单元文件,有些有窗体,有些则没有。通用单元文件通用单元主要用于定义应用程序所有单元均可使用的数据类型、变量、过程、类等。枣庄学院精品课程3.3.5项目中常用的文件窗体文件是单元文件的伴随文件,用于快速开发应用程序的界面,扩展名为dfm。建立窗体文件的方法:执行菜单:File→New→Form

在默认情况下,我们看到的窗体文件只是一个窗体。按F12功能键可实现窗体与其对应单元代码编辑窗口的互换枣庄学院精品课程资源文件目的:用于存放应用程序的图标、图片和版本等信息。使用资源文件方法:{$R*.res}

此语句常用于读取资源文件。其中,*表示与当前单元或项目文件重名。建立资源文件方法:使用Tools→ImageEditor菜单右击右击枣庄学院精品课程项目选项和桌面设置文件目的:保存项目或桌面设置。项目选项文件的扩展名为dof,它存储的是通过Project→Options菜单设置的选项。桌面设置文件的扩展名为dsk,它存储的是通过Tools→Options菜单设置的桌面选项。枣庄学院精品课程备份文件备份文件是恢复误操作而准备的文件。其文件名与原文件重名,扩展名前加“~”符号。如:项目文件~dpr

单元~pas

窗体文件~dfm

设置系统自动保留备份文件:Tools->EditorOptions->Display设置保留备份枣庄学院精品课程包文件作用:类似于动态链接库,保存可被其它程序调用的程序代码。文件扩展名:dpk(Delphipackage的缩写),此文件编译时可生成两种文件:扩展名是.dcp文件,它一种中间文件。扩展名是.bpl文件,它是能被程序使用的最终文件。枣庄学院精品课程3.4项目文件的管理与优化常用的方法:一个项目独占一个文件夹,可避免不同项目中同名文件的相互覆盖。共享单元放在一个文件夹,可提高单元文件的利用效率。枣庄学院精品课程3.5编译并运行项目编译的目的是将项目文件转化为可执行文件。有两种编译项目文件的方法:(1)Compile编译:用于编译做过修改的源程序。(2)Build编译:对项目中的所有文件重新编译。使用方法:Project->Compile或Build运行编译后的文件:Run->Run(F9编译并运行项目文件)另外还有F7、F8、F4。

枣庄学院精品课程3.6项目中的Application对象为加快程序开发,在任何有窗体的项目中,系统自动定义了一个名为Application的对象,以便用其完成某些独特的功能。

本节讲解Application对象如下内容:属性及应用方法及应用事件及应用枣庄学院精品课程属性及应用Application对象有较多的属性,常用属性见下表:

属性名 含义Active 判断当前应用程序是否具有焦点。ExeName 返回应用程序所在文件名(含路径)。Hint 用于保存组件的提示信息。注意,当鼠标移动到某个组件上时,则组件的Hint属性值就被赋到此属性中。Icon 用于设置应用程序在任务栏上显示的图标。MainForm 返回当前应用程序的主窗体对象。ShowHint 设置是否显示应用程序的提示信息。Title 应用程序任务栏上显示的标题。枣庄学院精品课程常使用ExeName属性取应用程序所在的路径名,如:Label3.caption:=ExtractFilePath(Application.ExeName);其中:ExtractFilePath函数用于返回字符串中的路径名。ExtractFileName返回字符串中的文件名。这两个函数用处很大,制作自动安装软件时要用到它。枣庄学院精品课程Application对象的方法

在项目文件中常使用的方法InitializeCreateFormRun

上述三种方法的作用分别是初始化应用程序、创建窗体和运行应用程序。

使用格式如下:Application.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;枣庄学院精品课程ProcessMessages方法ProcessMessages用于从Windows消息队列中检索任何等待处理的消息并进行处理.下面看一段代码:

whileJ<64000dobeginY:=Random(J);Inc(J);Application.ProcessMessages;end;若没有Application.ProcessMessages方法,则循环程序执行结束前不会响应用户的其它请求。枣庄学院精品课程MessageBox方法用于打开一个标准的Windows提示信息框。具体使用方法参见第5章提示信息窗口一节。例如:

ifApplication.MessageBox('提示信息','标题',MB_OKCANCEL)=idokthenShowMessage('ss');Minimize方法用于把应用程序的主窗口最小化。Restore方法用于把应用程序的恢复主窗口显示状态。枣庄学院精品课程Application对象的事件Application有较多的事件,Delphi专门为它提供了一个事件组件,如图所示。

事件列表枣庄学院精品课程Application较常用的事件列表如下:

事件 描述OnActivate 当应用程序被激活时,将触发这个事件。OnDeativate 当应用程序被挂起或切换到其它应用程序时将触发这个事件。OnException 当一个未处理的异常发生时,将触发这个事件。OnHelp 当用户请求帮助的时候将触发这个事件。OnMessage 当应用程序接收到一个消息时将触发这个事件。OnHint 当鼠标指向某个组件时将触发这个事件。OnIdle 当应用程序进入空闲状态时将触发这个事件。常使用此事件编写动画游戏。枣庄学院精品课程例题例1:利用Application组件设计应用程序,要求在主窗体的Statusbar组件中显示鼠标所指组件的提示信息。提示:在Application组件的Onhint事件中加入下代码:

Statusbar1.SimpleText:=Application.Hint;枣庄学院精品课程3.7项目中的Screen对象属性名含义ActiveControl它是只读属性,用于保存当前屏幕上获得焦点的组件。ActiveForm用于保存获得焦点的窗体。Cursor用于设置应用程序的光标形状。DataModuleCount表示应用程序中数据模块的个数。DataModules保存应用程序中的数据模块列表。FormCount表示应用程序中窗体的个数。Forms保存应用程序中的窗体列表。Fonts保存屏幕所支持的各种字体名称。Height表示屏幕的高度(以像素为单位)。PixelsPerInch表示表示系统字体的相对缩放比例。Width表示屏幕的宽度(以像素为单位)。Forms标准单元中定义的,其常用属性如下表枣庄学院精品课程3.8常用程序设计技巧1.使用资源文件使用资源文件(.res)就是使用资源文件中存放的位图、图标、光标等数据。使用资源文件前提条件:使用语句:{$R资源文件名.res}。资源名中的字母必须大写。注意:若在程序计期修改了资源文件,请使用Project→BuildAllProjects重新编译后再执行程序。枣庄学院精品课程读取资源的常用方法:取图片格式:image1.Picture.Bitmap.LoadFromResourceName(hInstance,‘图片名');取图标格式:Application.Icon.Handle:=LoadIcon(hInstance,‘图标名称’);其中hInstance表示包含资源文件的当前应用程序对象。取光标格式:Screen.Cursons[X]:=Loadcursor(hInstance,’光标名’);Screen.Cursor:=X;其中:X为正整数,因为默认光标取0到-22(即从crDefault到crSizeAll)枣庄学院精品课程2.修改屏幕分辨率使用WindowsAPI两个函数完成此功能,分别为:

(1)获取显示模式数据函数定义格式:EnumDisplaySettings(lpDName,iMNum,lpDMode)功能:获取指定的显示模式数据,若显示模式不存在,则返回值为0(False)。其中:lpDName:一般设置为Nil。

iMNum:用于指定显示模式号。

lpDMode:是TDevMode类型的指针变量,用于保存获取的显示模式数据。

枣庄学院精品课程VarDevModeArray:TList;//显示模式信息结构列表……varDevModeCount:Integer;//显示模式的个数DevModeInfo:^TDevMode;//定义一个指向显示模式的指针beginDevModeArray:=TList.Create;//创建列表对象DevModeCount:=0;GetMem(DevModeInfo,SizeOf(TDevMode));//分配内存

{枚举显示模式,并将获取的属性值其保存在到DevModeInfo变量中}枣庄学院精品课程whileEnumDisplaySettings(NIL,DevModeCount,DevModeInfo^)dobeginDevModeArray.Add(DevModeInfo);//将屏幕信息保存Inc(DevModeCount);//屏幕自信保存到ListBox1列表组件中ListBox1.Items.Add(IntToStr(DevModeInfo^.dmPelsWidth)+'×'+IntToStr(DevModeInfo^.dmPelsHeight)+','+IntToStr(Trunc(IntPower(2,DevModeInfo^.dmBitsPerPel)))+'colors');GetMem(DevModeInfo,SizeOf(TDevMode));//分配内存end;FreeMem(DevModeInfo,SizeOf(TDevMode));//释放分配的内存ListBox1.ItemIndex:=0;end;枣庄学院精品课程(2)设置屏幕的显示方式函数定义格式:ChangeDisplaySettings(lpDevMode,dwflags)

功能:按指定模式修改显示器的分辨率。其中:1)lpDevMode是显示模式数据的TDevMode类型指针变量。2)dwflags常使用CDS_UPDATEREGISTRY,表示修改显示模式后,同时修改注册表。3)函数返回值:当返回DISP_CHANGE_SUCCESSFUL时表示修改成功,当返回DISP_CHANGE_RESTART,则表示重启操作系统后才能使设置起作用。枣庄学院精品课程部分程序代码:VarModeChange:Longint;begin{更改显示模式,并修改注册表}ModeChange:=ChangeDisplaySettings(模式指针变量,CDS_UPDATEREGISTRY);ifModeChange=DISP_CHANGE_SUCCESSFULthenShowMessage('动态改变屏幕分辨率成功')elseifModeChange=DISP_CHANGE_RESTARTthenShowMessage('需要重新起动才能使设置起作用');end;枣庄学院精品课程3.8.3避免应用程序重复启动由于Windows是一个多任务的操作系统,因此可时运行同一程序的多个实例,但有时为了数据安全,要求应用程序只能运行一个实例。主要有两种方法:1.“查找窗口”法;2.“创建互斥对象”。枣庄学院精品课程1.查找窗口法工作原理:应用程序运行前使用FindWindow函数首先查找当前操作系统中是否加裁主窗体,如果有则不启动。FindWindow函数使用格式:FindWindow(类名,窗体标题名);其中:“类名”表示表示查找窗体所属的类。例如:将项目文件修改为如下格式:

VarHwnd:Thandle;beginHwnd:=FindWindow('TForm1','Main');//查找主窗体

IfHwnd=Thandle(nil)then//如果没找到应用程序的主窗体则启动应用程序

BeginApplication.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;end;

end枣庄学院精品课程2.使用互斥对象本方法是在应用程序中通过CreateMutex函数创建互斥对象,若创建不成功,则说明系统已经启动,则系统不再启动。使用格式:

CreateMutex(lpMA,bIO,lpName)功能:创建互斥对象。

其中:参数lpMA是一个指向安全属性的指针,一般使用空指针nil,表示使用默认安全属性。参数bIO表示互斥对象是否指定初始所有者,一般默认为True。参数lpName用于设置要创建的互斥对象名。

枣庄学院精品课程项目文件中的部分代码:VARMutex:Thandle;beginMutex:=CreateMutex(NIL,True,'Form1');//判断创建互斥对象是否成功

IFGetLastError<>ERROR_ALREADY_EXISTSTHENBEGINApplication.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;end;ReleaseMutex(Mutex);end.枣庄学院精品课程4.设置应用程序启动权限通过项目文件中加入判断进入权限的代码,解决户身份的验证问题。分析:由于应用程序运行是通过Application的Initialize、Createform、和Run三个过程实现的,因此在执行这丰类过程前加入判别用户权限的指令,若符合要求则启动,否则退出系统。程序基本格式如下:输入口令->Passwordif系统口令=Passwordthenbegin

执行启动程序代码;endElse退出系统;枣庄学院精品课程请看Initialize.dpr的源程序实例:programInitialize;usesForms,Dialogs,ChangeScreenin'ChangeScreen.pas'{Form1};varPassword:String;{$R*.res}beginifInPutQuery('登录口令','输入口令',password)thenbeginifpassword='Screen'then//判断登录口令

beginApplication.Initialize;Application.CreateForm(TForm1,Form1);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论