delphi 基础之四 delphi 组织结构
delphi 组织结构
在Delphi中,一个正在开发的应用程序可以被称作项目或者工程。一般地,一个项目主要由dpr(项目)、pas(单元)和dfm(窗体)三种文件组成,另外还有一些附属文件,如res(资源)文件等。在源代码中,项目文件用关键字program标识,单元文件用unit标识。
通常,一个项目只有惟一的dpr文件。一个dfm文件总是有对应的pas文件,但是pas文件可以没有对应的pas文件。
如果打开Delphi,选择菜单File|New|Application,则可以新建一个项目。该项目包括一个项目文件——Project1.dpr、一个窗体文件——Unit1.dfm和一个对应的单元文件——Unit1.pas。
这些文件的内容都必须按照一定的组织结构来编写,编译器按照既定的组织结构来识别这些内容并进行编译。在本节里,我们讨论program和unit两种单元文件的组织结构。
Program的组织结构
一个项目文件被关键字program标识,因此,在这里我将项目文件的源代码称作program。以下是一个简单的program:
program Project1; {文件定义:一个名为Project1的项目文件}
uses {在program中需要使用到哪些单元}
Forms,
Unit1 in 'Unit1.pas' {Form1},
Dialogs;
Var {在这里可以定义一些变量和常量}
AppMsg: String;
{$R *.res} {$R是一个编译指令,此处表示要编译资源文件Project1.res}
{这个部分可以实现一个函数和过程}
procedure AppStart(AppMsg: String);
begin
ShowMessage(AppMsg);
end;
{begin…end部分是program的主体,这里面的代码是可以运行的}
begin
Application.Initialize; {应用程序初始化}
Application.Title := 'lxpbuaa';
Application.CreateForm(TForm1, Form1); {创建主窗体}
AppMsg := '应用程序马上开始运行。';
AppStart(AppMsg);
Application.Run;
end.
Unit的组织结构
一个单元文件被关键字unit标识,因此,在这里我将单元文件的源代码称作unit。以下是一个完整的unit:
unit Unit1; {文件定义:一个名为Unit1的单元文件}
interface {在这个部分声明可供其他单元使用的变量、常量、类型、函数和过程}
uses {interface部分的uses内容对整个单元都有效}
Windows, Messages, Classes, Controls, Forms, Dialogs, Contnrs;
type {声明类型}
TForm1 = class(TForm)
private
procedure ShowInfo(Info: String);
public
{ Public declarations }
end;
{声明函数和过程}
procedure ShowInfo(Info: String);
var {声明变量}
Form1: TForm1;
implementation {在这个部分完成单元的私有声明,并实现interface声明的类、函数和
过程}
uses {implementation部分的uses内容只对implementation有效。
interface不需要而implementation需要的单元应该在这里引用}
SysUtils, Variants;
var {implementation部分可以和interface部分一样进行声明}
ObjList: TObjectList;
{$R *.dfm} {编译对应的dfm文件}
{实现interface部分声明的函数和过程}
procedure ShowInfo(Info: String);
begin
ShowMessage(Info);
end;
{实现interface部分声明的类}
{ TForm1 }
procedure TForm1.ShowInfo(Info: String);
begin
ShowMessage(Info);
end;
{单元初始化部分}
initialization
ObjList := TObjectList.Create;
{单元终止部分}
finalization
FreeAndNil(ObjList);
end.
从上面的Unit1单元可以看到,一个unit可以包含五个部分:
(1)unit关键字部分,指定单元的名字。
(2)interface部分。从关键字interface到implementation为止的内容,都是属于这个部分。该部分可以声明变量、常量、类型、函数和过程,而且它们对于其他单元都是可见的。
(3)implementation部分。在这个部分也可以完成interface具有的声明功能,但是它们对于其他单元是不可见的,属本单元私有;同时完成类、函数和过程的实现。
以上三个部分是一个unit必须的。接下来的两个部分是可选的。
(4)initialization。在这个部分可以完成单元的初始化工作。如果将一个单元比作一个类,我们知道类的初始化是在构造函数Create中完成的,所以initialization部分就相当于单元的构造函数。
(5)finalization。在这个部分可以完成单元的终止,完成类似于类的析构函数Destroy的功能。
需要注意的是:如果几个单元都有initialization/finalization部分,则它们的执行顺序与这些单元在program的uses字句中的出现顺序一致。所以应该避免initialization/finalization部分的代码执行时依赖于它们的执行顺序。
delphi 基础之四 delphi 组织结构的更多相关文章
- delphi基础篇之数据类型概论
delphi基础篇之数据类型概论 Object Pascal 语言提供了非常丰富的数据类型,即简单类型(Simple).字符串类型(String).结构类型(Struct).指针类型(Pointer) ...
- delphi基础篇之项目文件
delphi基础篇之项目文件 program Teacher2018; uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pa ...
- zw版【转发·台湾nvp系列Delphi例程】Delphi 使用 HALCON库件COM控件数据格式转换
zw版[转发·台湾nvp系列Delphi例程]Delphi 使用 HALCON库件COM控件数据格式转换 Delphi 使用 HALCON库件COM控件数据格式转换,与IHObjectX接口有关 va ...
- 选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由
选择 Delphi 2007 ( CodeGear Delphi 2007 for Win32 Version 11.0.2837.9583 ) 的理由 我不喜欢用InstallRite的全自动安装包 ...
- Delphi XE8中Delphi和JAVA数据类型对应关系!
Delphi XE8中Delphi和JAVA数据类型对应关系所在单元文件:Androidapi.JNI.JavaTypes 对应关系: JObject = interface;//java.lang. ...
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- delphi 基础书籍推荐
本文所推荐的书,我均仔细读过,受益良多. 1. Pascal 精要.下载Pascal精要 本书讲Pascal 语言基本知识. 2. Object Pascal 参考(中英文对照版).下载Object ...
- Delphi基础语法的学习笔记和注意事项总结
以下是我在自学Delphi的时候,对一些注意点的简单总结,并没有什么系统性可言,只是一个学习时顺手记下的笔记,主要为了当时加深对知识的印象,并没有希望能在以后的复习和使用Delphi中有什么多大的参考 ...
- delphi 基础之三 编写和调用dll文件
delphi 编写和调用dll文件 Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几 ...
随机推荐
- ListView设置setFooterDividersEnabled无效的原因
参考文章:http://gundumw100.iteye.com/blog/1169065 我的情况: 高度设置为了wrap_content, 且外边有一个FrameLayout(只包含了listvi ...
- hive数据文件简单合并
MR代码: package merge; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop ...
- 如何制作prezi swf格式字体(prezi 中文字体)
如何制作prezi swf格式字体(prezi 中文字体) 文/玄魂 前言 Prezi软件虽然没有正式进入中国,但是中国的Prezi爱好者却在不遗余力的推广着Prezi.我接触这款软件比较晚,但是从接 ...
- 洛谷P1466 集合 Subset Sums
P1466 集合 Subset Sums 162通过 308提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 对于从1到N (1 ...
- TCP/IP详解学习笔记(8)-- UDP:用户数据报协议
1.UDP概述 UDP是一种无连接的, 即发送数据前不需要建立连接,因此减小的开销和发送数据的延迟. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表. UDP是面向报文 ...
- mac下的一些常识
1,环境变量 EddydeMacBook-Pro:~ eddy$ vi ~/.bash_profile EddydeMacBook-Pro:~ eddy$ vim /etc/profile Eddyd ...
- 获取AX的窗口所有控件的lableID及内容
思路,穷举Forms\TargetFormName 在AOT上面的路径得到TreeNode, 遍历各控件的属性. a1,先读Label属性,没有就读Caption属性及Text属性. a2,若a1取不 ...
- jQ复制按钮的插件zclip
zclip官网:http://www.steamdev.com/zclip/ swf文件国内下载:ZeroClipboard.swf jQuery-zclip是一个复制内容到剪贴板的jQuery插件, ...
- dedecms手机站要同步pc站的图片
首先在dede目录下面找到 /include/extend.func.php 文件 //添加自定义函数 function replaceurl($newurl){ $newurl=str_repl ...
- 【MVC】关于Action返回结果类型的事儿(上)
一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1. ...