应用程序设计及框架.ppt

上传人:牧羊曲112 文档编号:5723670 上传时间:2023-08-14 格式:PPT 页数:60 大小:1.08MB
返回 下载 相关 举报
应用程序设计及框架.ppt_第1页
第1页 / 共60页
应用程序设计及框架.ppt_第2页
第2页 / 共60页
应用程序设计及框架.ppt_第3页
第3页 / 共60页
应用程序设计及框架.ppt_第4页
第4页 / 共60页
应用程序设计及框架.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《应用程序设计及框架.ppt》由会员分享,可在线阅读,更多相关《应用程序设计及框架.ppt(60页珍藏版)》请在三一办公上搜索。

1、第三章 应用程序的框架和设计,本章内容:应用程序的基本结构编译项目文件前的设置项目文件项目文件管理与优化编译并运行项目项目文件中Application和Screen对象程序设计中的常用基本技巧,3.1 应用程序的基本结构,利用Delphi开发的应用程序从宏观上可分为三个层次,即项目文件、主单元文件和功能模块文件。项目文件是应用程序的主程序文件,它主要完成应用程序初始化及各种应用程序模块的管理工作。主单元文件是用于控制应用系统操作的有窗体的单元文件,在项目文件中,主单元是由Application对象的Run过程调用执行的。功能模块文件是能独立完成某项功能的程序,它一般由主单元通过菜单调用来执行,

2、功能模块通常是有窗体的单元文件或数据模块文件。,应用程序基本构成图示,3.2 开发应用程序前的系统设置,设置自动保存程序代码功能 执行菜单ToolsEnvironment Options,自动保存设置,设置自动保存程序代码功能,若选中Editor files,则表示当编译应用程序时,Delphi将自动保存当前正在编辑的程序文件。若选中Project Desktop,则表示当编译应用程序时,Delphi自动保存当前项目的桌面信息(一旦保存了桌面信息,当下次启动Delphi时,系统会自动回到保存的桌面状态)。,2.设置使用撤消操作,执行菜单ToolsEditor Options,设置处,3.设置使

3、用开发包,使用外来组件包需要如下2个步骤:(1)安装组件包;(2)设置组件包的搜索路径。(1)安装组件 有两种方法,一种是安装未编译的组件包(即有源程序代码的包),另一种是安装已编译组件包。,1)未编译组件包的安装,首先打开要安装包的项目文件(扩展名为.dpk),则显示类似如右图所示的窗口(若系统没有出现此窗口,可单击菜单ProjectView Source,然后再按F12功能键),单击右图中的“Install”按钮即完成组件包的安装。,安装按钮,2)已编译组件包的安装,由于未编译组件包不提供源代码,其安装方法为:ComponentInstall Packages,则出现如下左侧图所示对话框,

4、单击“ADD”按钮,选择要安装包.bpl文件,再按“打开”按钮即可。,单击,确认,(2)设置组件包的搜索路径,单击菜单ToolsEnvironment Options,选择“Library”页,并按下图操作。,加入,选择包所在路径,选择包所在文件夹,3.3 项目文件,项目文件是应用系统的主控文件,它的扩展名是dpr。本节主要内容:项目文件的建立结构加入或移出单元文件设置,3.3.1 建立项目文件,方法:FileNewApplication,则建立一个名为Project1.dpr新项目文件.,3.3.2 项目文件的组成结构,查看项目文件内容可使用ProjectView Source菜单。项目文件

5、内容主要有三大部分组成:声明项目名部分、说明部分和执行部分。(1)声明部分 格式:program 项目名;用于说明项目文件名,可通过File-save as菜单修改。,(2)说明部分,用于说明项目文件可引用的单元、资源文件及定义项目文件中使用的类型、常量、变量、过程或函数等。除定义变量、过程或函数定义外,常用的格式语句:uses语句和资源引用语句 uses语句 单元名 in 文件名 窗体名 读取资源语句$R*.RES 注意:这里的*表示与项目名重名。资源文件一般存放应用程序使用图标、图片等数据。,(3)执行部分,执行部分是项目文件中Begin.End之间的部分,它是应用程序启动时首先要执行的程

6、序代码。本部分主要有三种语句:1)初始化应用程序语句:Application.Initialize;2)窗体对象实例化语句,格式为:Application.CreateForm(窗体类名,窗体名);例如:Application.CreateForm(TForm1,Form1);上格式语句可以有多个,Delphi系统将第一个使用CreateForm语句建立的窗体默认为应用程序的主窗体。3)执行主窗体对应的程序:Aplication.Run;上语句不仅显示主窗体,同时它负责当主窗体关闭时,退出应用程序并返回到操作系统。注意:项目文件一般是由系统自动维护的,除非特别需要,一般不修改其中的代码。,3.

7、3.3 将单元文件加入或移出项目文件,用于应用系统的模块程序(单元文件)组合到项目中 加入移出单元文件步骤:打开项目文件 执行FileOpen菜单,找到要打开的项目文件名(.dpr)并打开。向项目文件中加入单元:执行ProjectAdd to Project菜单,则出现一个对话框,在对话框中查找并选择你要加入的单元文件,最后再单击“打开”按钮。注意:加入到项目文件中的单元,在项目文件中将以“单元名 in 文件名 窗体名”的格式出现在Uses语句中。,从项目文件中移出单元文件:单击ProjectRemove from Project菜单注意:(1)没有任何单元文件的项目文件将编译成一个无任何功能

8、应用程序。(2)加入或移出单元文件还可通过使用工具栏上的快捷按钮来完成,如图所示。,加入单元,移出单元,3.3.4 设置项目编译环境,主要用于解决内存不够、文件存储等问题。单击ProjectOptions菜单可进入项目编译环境设置对话框,设置方法如下:设置窗体通常情况下,除主窗体外,其余窗体应设置成可用窗体,设置方法是:首先,在项目编译环境设置对话框上选择Forms页;其次,在“Auto create forms”子窗口中选择窗体名后单击“”按钮,使其转移到“Avialable forms”子窗口中,这样就使自动创建窗体变成可用窗体。注意:主窗体必须是自动创建窗体。,设置主窗体,自动创建窗体,

9、可用窗体,设置应用程序在项目编译环境设置对话框中选择“Application”页(如图所示),在此口主要做如下四个设置:标题(Title)它应用程序最小化时在任务栏上显示的标题,其最大长度为255个字符。帮助文件(Help file)用于设置当激活帮助时,应用程序自动调用的帮助文件。图标(Icon)用于设置应用程序在程序管理器中或当程序被最小化时显示的图标。目标文件扩展名(Target file extension)用于设置编译生成的可执行文件的扩展名。,标题设置,帮助设置,修改图标,设置扩展名,3.设置是否使用运行期包,应用程序可使用两种类型的包文件,一种包是设计期包,另一种是运行期包。应用

10、程序使用的哪种组件包可通过项目编译环境设置对话框来设置,设置方法如下:打开项目编译环境设置对话框,选择Packages页,则显示如图所示的对话框,若选中Build with Runtime packages 复选框,则说明当前项目文件在编译时将使用运行期包,否则,使用设计期包。注意:若设置对话框中的Default检查框,则将当前设置作为以后新建项目的默认值。,设置否是使用运行期包,4.设置项目文件存放路径。,作为开发应用项目的程序员,肯定需要编写大量的应用程序,为防止多种应用项目文件因存放而产生的混乱,合理分配每个应用程序的存放路径将显得非常重要。设置项目文件的存放位置可通过项目文件设置对话框

11、来完成,如右图:,输出目录,单元输出目录,搜索目录,设置路径(Directories),下面是几个常用的设置输出路径(Output directory)用于设置Delphi编译生成的可执行文件(exe)的存放路径。单元输出路径(Unit output directory)用于设置单元编译后生成的文件(.dcu文件)的存放路径。搜索路径(Search path)用于指定编译器的搜索路径,3.3.5 项目中常用的文件,单元文件 单元文件主要分为窗体单元文件、组件单元文件和通用单元文件三种类型:窗体单元文件 窗体单元文件具有窗体的单元,实际还可分为窗体单元文件(Form)、框架单元文件(Frame)

12、和数据模块单元文件(DataModule),后面如没有特别说明,窗体单元文件都是指的Form单元文件 组件单元文件 组件单元文件是创建新组件时建立的单元文件,有些组件单元文件有窗体,有些则没有对应的窗体。通用单元文件 通用单元文件主要用于定义应用程序所有单元均可使用的数据类型、变量、过程、类等。,2.窗体文件,窗体文件是单元文件的伴随文件,用于快速开发应用程序与用户进行信息交互的界面,窗体文件的扩展名为dfm。建立窗体文件的方法:执行菜单:FileNewForm 在默认情况下,我们看到的窗体文件只是一个窗体。按F12功能键可实现窗体与其对应单元代码编辑窗口的互换,本节要讲的内容,项目文件中使用

13、的文件 资源文件、项目选项和桌面设置文件、备份文件、包文件项目文件的管理与优化编译并运行项目项目中的Application对象,3.资源文件,目的:用于存放应用程序的图标、图片和版本等信息。使用资源文件方法:$R*.res 此语句常用于读取资源文件。其中,*表示与当前单元或项目文件重名。建立资源文件方法:使用ToolsImage Editor菜单,右击,右击,4.项目选项和桌面设置文件,目的:保存项目或桌面设置。项目选项文件的扩展名为dof,它存储的是通过ProjectOptions菜单设置的选项。桌面设置文件的扩展名为dsk,它存储的是通过ToolsOptions菜单设置的桌面选项。,5.备

14、份文件,备份文件是恢复误操作而准备的文件。备份文件名与原文件重名,扩展名前加“”符号。例如:项目文件 dpr 单元 pas 窗体文件 dfm,设置保留备份,设置系统自动保留备份文件:Tools-Editor Options-Display,6.包文件,作用:类似于动态链接库,保存可被其它程序调用的程序代码。文件扩展名:dpk(Delphi package的缩写),此文件编译时可生成两种文件:(1)扩展名是.dcp文件,它一种中间文件。(2)扩展名是.bpl文件,它是能被程序使用的最终文件。,3.4 项目文件的管理与优化,常用的方法:一个项目独占一个文件夹 可避免不同项目中同名文件的相互覆盖。共

15、享单元放在一个文件夹 可提高单元文件的利用效率。,3.5 编译并运行项目,编译的目的是将项目文件转化为可执行文件。有两种编译项目文件的方法:(1)Compile 编译:用于编译做过修改的源程序。(2)Build编译:对项目中的所有文件重新编译。使用方法:Project-Compile 或 Build运行编译后的文件:Run-Run(F9 编译并运行项目文件)另外还有F7、F8、F4。,3.6 项目中的Application对象,为加快程序开发,在任何有窗体的项目中,系统自动定义了一个名为Application的对象,以便用其完成某些独特的功能。本节讲解Application对象如下内容:属性及

16、应用方法及应用事件及应用,1.属性及应用,Application对象有较多的属性,常用属性见下表:,属性名 含义Active判断当前应用程序是否具有焦点。ExeName返回应用程序所在文件名(含路径)。Hint用于保存组件的提示信息。注意,当鼠标移动到某个组件上时,则组件的Hint属性值就被赋到此属性中。Icon用于设置应用程序在任务栏上显示的图标。MainForm返回当前应用程序的主窗体对象。ShowHint设置是否显示应用程序的提示信息。Title应用程序任务栏上显示的标题。,常使用ExeName属性取应用程序所在的路径名例如:Label3.caption:=ExtractFilePath

17、(Application.ExeName);其中:ExtractFilePath函数用于返回字符串中的路径名。另外,ExtractFileName返回字符串中的文件名。这两个函数用处很大,制作自动安装软件时要用到它。,2.Application对象的方法,在项目文件中常使用的方法InitializeCreateFormRun 上述三种方法节已经使用过,它们的作用分别是初始化应用程序、创建窗体和运行应用程序。使用格式如下:Application.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;,4.ProcessMe

18、ssages方法,ProcessMessages用于从Windows消息队列中检索任何等待处理的消息并进行处理.下面看一段代码:while J 64000 do begin Y:=Random(J);Inc(J);Application.ProcessMessages;end;若没有Application.ProcessMessages方法,则循环程序执行结束前不会响应用户的其它请求。,MessageBox方法用于打开一个标准的Windows提示信息框。具体使用方法参见第5章提示信息窗口一节。例如:if Application.MessageBox(提示信息,标题,MB_OKCANCEL)=i

19、dok then ShowMessage(ss);Minimize方法用于把应用程序的主窗口最小化。Restore方法用于把应用程序的恢复主窗口显示状态。,3.Application对象的事件,Application有较多的事件,Delphi专门为它提供了一个事件组件,如图所示。,事件列表,Application较常用的事件列表如下:,事件 描述OnActivate 当应用程序被激活时,将触发这个事件。OnDeativate 当应用程序被挂起或切换到其它应用程序时将触发这个事件。OnException当一个未处理的异常发生时,将触发这个事件。OnHelp当用户请求帮助的时候将触发这个事件。On

20、Message当应用程序接收到一个消息时将触发这个事件。OnHint当鼠标指向某个组件时将触发这个事件。OnIdle当应用程序进入空闲状态时将触发这个事件。常使用此事件编写动画游戏。,例1:利用Application组件设计应用程序,要求在主窗体的Statusbar组件中显示鼠标所指组件的提示信息。,提示:在Application组件的Onhint 事件中加入下代码:Statusbar1.SimpleText:=Application.Hint;,本次要讲内容,项目中的Screen对象常用程序设计技巧使用资源文件修改屏幕分辨率避免程序重复运行设置程序运行权限显示封面重新启动与退出,3.7 项目

21、中的Screen对象,Forms标准单元中定义的,其常用属性如下表,3.8 程序设计中的常用基本技巧,本节主要内容:使用资源文件修改屏幕分辨率避免应用程序重复启动设置应用程序启动权限显示封面重启或退出Windows,1.使用资源文件,使用资源文件(.res)就是使用资源文件中存放的位图、图标、光标等数据。使用资源文件前提条件:使用语句:$R 资源文件名.res。资源名中的字母必须大写。注意:若在程序计期修改了资源文件,请使用ProjectBuild All Projects重新编译后再执行程序。,读取资源的常用方法:取图片格式:image1.Picture.Bitmap.LoadFromRes

22、ourceName(hInstance,图片名);取图标格式::=LoadIcon(hInstance,图标名称);其中hInstance表示包含资源文件的当前应用程序对象。取光标格式:Screen.CursonsX:=Loadcursor(hInstance,光标名);Screen.Cursor:=X;其中:X为正整数,因为默认光标取0到-22(即从crDefault到crSizeAll),2.修改屏幕分辨率,使用Windows API两个函数完成此功能,分别为:(1)获取显示模式数据函数 定义格式:EnumDisplaySettings(lpDName,iMNum,lpDMode)功能:获

23、取指定的显示模式数据,若显示模式不存在,则返 回值为0(False)。其中:lpDName:一般设置为Nil。iMNum:用于指定显示模式号。lpDMode:是TDevMode类型的指针变量,用于保 存获取的显示模式数据。,Var DevModeArray:TList;/显示模式信息结构列表 varDevModeCount:Integer;/显示模式的个数DevModeInfo:TDevMode;/定义一个指向显示模式的指针beginDevModeArray:=TList.Create;/创建列表对象DevModeCount:=0;GetMem(DevModeInfo,SizeOf(TDevM

24、ode);/分配内存 枚举显示模式,并将获取的属性值其保存在到DevModeInfo 变量中while EnumDisplaySettings(NIL,DevModeCount,DevModeInfo)dobeginDevModeArray.Add(DevModeInfo);/将屏幕信息保存Inc(DevModeCount);/屏幕自信保存到ListBox1列表组件中ListBox1.Items.Add(IntToStr(DevModeInfo.dmPelsWidth)+IntToStr(DevModeInfo.dmPelsHeight)+,+IntToStr(Trunc(IntPower(2

25、,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,表示

26、修改显示模式后,同时修改注册表。3)函数返回值:当返回DISP_CHANGE_SUCCESSFUL时表示修改成功,当返回DISP_CHANGE_RESTART,则表示重启操作系统后才能使设置起作用。,部分程序代码:Var ModeChange:Longint;begin 更改显示模式,并修改注册表 ModeChange:=ChangeDisplaySettings(模式指针变量,CDS_UPDATEREGISTRY);if ModeChange=DISP_CHANGE_SUCCESSFUL then ShowMessage(动态改变屏幕分辨率成功)else if ModeChange=DISP

27、_CHANGE_RESTART then ShowMessage(需要重新起动才能使设置起作用);end;,3.8.3 避免应用程序重复启动,由于Windows是一个多任务的操作系统,因此可时运行同一程序的多个实例,但有时为了数据安全,要求应用程序只能运行一个实例。主要有两种方法:1.“查找窗口”法;2.“创建互斥对象”。,1.查找窗口法,工作原理:应用程序运行前使用FindWindow函数首先查找当前操作系统中是否加裁主窗体,如果有则不启动。FindWindow函数使用格式:FindWindow(类名,窗体标题名);其中:“类名”表示表示查找窗体所属的类。例如:将项目文件修改为如下格式:Va

28、r Hwnd:Thandle;begin Hwnd:=FindWindow(TForm1,Main);/查找主窗体 If Hwnd=nil then/如果没找到应用程序的主窗体则启动应用程序 BeginApplication.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;end;end运行,2.使用互斥对象,本方法是在应用程序中通过CreateMutex函数创建互斥对象,若创建不成功,则说明系统已经启动,则系统不再启动。使用格式:CreateMutex(lpMA,bIO,lpName)功能:创建互斥对象。其中:参

29、数lpMA是一个指向安全属性的指针,一般使用空指针nil,表示使用默认安全属性。参数bIO表示互斥对象是否指定初始所有者,一般默认为True。参数lpName用于设置要创建的互斥对象名。,项目文件中的部分代码:VAR Mutex:THandle;begin Mutex:=CreateMutex(NIL,True,Form1);/判断创建互斥对象是否成功 IF GetLastErrorERROR_ALREADY_EXISTS THEN BEGIN Application.Initialize;Application.CreateForm(TForm1,Form1);Application.Run

30、;end;ReleaseMutex(Mutex);end.,4.设置应用程序启动权限,通过项目文件中加入判断进入权限的代码,解决户身份的验证问题。分析:由于应用程序运行是通过Application的Initialize、Createform、和Run三个过程实现的,因此在执行这丰类过程前加入判别用户权限的指令,若符合要求则启动,否则退出系统。程序基本格式如下:输入口令-Passwordif 系统口令=Password thenbegin 执行启动程序代码;endelse 退出系统;,请看 Initialize.dpr 的源程序实例:program Initialize;uses Forms,D

31、ialogs,ChangeScreen in ChangeScreen.pas Form1;var Password:String;$R*.resbegin if InPutQuery(登录口令,输入口令,password)then begin if password=Screen then/判断登录口令 begin Application.Initialize;Application.CreateForm(TForm1,Form1);Application.Run;end else MessageDlg(口令不正确,程序终止,mtError,mbok,0);end;end.说明:InPutQ

32、uery和MessageDlg在5.5讲述的显示对话框函数。,5.显示封面,生成应用程序正式启动前的等待界面。分析:影响应用系统启动的是创建窗体过程,当要创建窗体所需内存较大时,创建过程可能需要较长的时间,因此封面显示应在创建之前开始,创建完成之后结束,基本结构如下:创建封面显示封面创建系统所用窗体语句序列撤消封面显示运行应用系统,项目中的部分代码如下:Application.Initialize;/创建封面SplashFrm:=TSplashFrm.Create(Application);SplashFrm.Show;/显示封面SplashFrm.Update;/强制更新封面/创建主窗体及其

33、它窗体代码从此开始Application.CreateForm(TMainFrm,MainFrm);/创建窗体结束SplashFrm.Free;/删除封面窗体Application.Run;,6.重启或退出Windows,通过Windows的API函数可重新启动操作系统。常用 的函数有:ExitWindowsEx,其使用格式如下:ExitWindowsEx(uFlags,dwReserved);功能:执行Windows操作系统的退出功能。说明:函数的第二个参数由系统内部使用,调用时为其赋0值即可;参数uFlags可取三个值,分别为:EWX_LOGOFF:注销 EWX_REBOOTE:重新启动

34、WX_SHUTDOWN:关闭系统 请看下面实例:,下面是一个按钮的单击事件:procedure TForm1.BitBtn1Click(Sender:TObject);begincase RadioGroup1.itemIndex of/重新启动 0:Win32Check(ExitWindowsEx(EWX_REBOOT,0);/关闭系统 1:Win32Check(ExitWindowsEx(EWX_SHUTDOWN,0);/注销并重新登录 2:Win32Check(ExitWindowsEx(EWX_LOGOFF,0);end;end;,小结,本章重点介绍了一个完整的应用程序系结构,详细讲解了Application和Screen对象在开发应用程序时的重要应用,及一些常用的开发技术。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号