很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开。
delphi单元的变量和函数访问权限问题如下两个单元描述:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
//===============================对象及其成员区域===============================
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
str1:string; //在此区域定义的私有变量和私有函数只能在本单元Unit1使用
public
str2:string; //在此区域定义的公有变量可以在其它单元使用,但必须先引用此单元 uses unit1; 然后使用Unit1.Form1.str2; 成员变量str2是对象Form1的成员,必须通过对象Form1才能得到成员str2
function public1(a:String):String ; //在此区域定义的公有函数可以在其它单元使用,但必须先引用此单元 uses unit1; 然后使用Unit1.Form1.pub1(2); 成员函数pub1是对象Form1的成员,必须通过对象Form1才能得到成员函数pub1
{ Public declarations }
end;
//===============================对象及其成员区域===============================
//=====================================全局区域=================================
//在此区域定义的变量和函数是全局的,对其它单元都是可见的,只要该单元uses unit1 则可可以直接引用该区域的变量和函数
// 全局变量最好统一写到一个文件里面。
TChar3 = array[0..2] of Char;
TString3 = array[0..2] of String;
function all(str:String):string; //全局函数,不属于某个对象
var
Form1: TForm1;
chr:TChar3; //全局变量,不属于某个对象
str3:TString3;
//=====================================全局区域=================================
implementation
uses Unit2;
{$R *.dfm}
//====================================局部区域==================================
//在此区域定义的变量和函数是局部的,只能在本单元Unit1使用,对其它单元是不可见的
var
str4:string;
function local1(a:String):String ;
begin
Result := a;
end;
//====================================局部区域==================================
function TForm1.public1(a:String):String ;
begin
Result := a;
end;
function all(str:String):string;
procedure localfunction; //此处定义的局部函数dudu只能在function all(str:String):string;使用
begin
ShowMessage('函数内部使用');
end;
begin
result:=str;
localfunction;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
str1:='1112';
str2:='3333';
str4:='4433';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.ShowModal;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
chr[0]:='c';
showmessage('全局变量'+chr[0]);
str3[0]:='全局变量';
showmessage(str3[0]);
showmessage('公共变量'+Unit1.Form1.str2);
showmessage(Unit1.Form1.public1('公共函数'));
showmessage(all('全局函数'));
//showmessage('私有变量'+Unit1.Form1.str4); //不可以引用
//showmessage('局部函数'+Unit1.Form1.local1('dd')); //不可以引用
end;
end.
unit文件结构实例: unit Unt1; interface uses Windows, Messages, SysUtils; type Tfrm1 = class(TForm) private {code1} public {code2} end; var {code3} implementation uses untpublic; {code4} end;
作用域: 1.在code3处声明的全局变量可以被Unt1及其所属工程(project1)的其他Unit文件访问(只要其他unit声明了uses unt1) 2.在code2处声明的全局变量和code3处的变量作用域相同 3.在code1处声明的全局变量只能被Unt1内部访问即使其他Unit文件声明了uses unt1 4.在code4处声明的局部变量只能在所属的函数或方法内访问 生命周期: 1.code3处声明的全局变量在Unt1结束时(区别于Tfrm1结束时)销毁,这种情况大多发生在所属工程(project1)结束时 2.code1和code2处的全局变量在Tfrm1结束(比如Tfrm1.free)时销毁 4.code4处的局部变量在所属的方法或函数调用结束时销毁 另外 实例中两处uses语句声明的地方,实际效果是一样的,没有什么差别吧。
以上是个人理解,有错误或不全之处还望大家指出更正之。 |
分享到:
相关推荐
2. **使用System.SysUtils单元**:Delphi的System.SysUtils单元包含了一些函数和过程,如GetEnvironmentVariable和SetEnvironmentVariable,可以直接用于操作环境变量。例如,`var Value: string;` `Value := ...
附加数据库时需要注意数据库文件的权限、版本兼容性和文件路径等问题。 在提供的压缩包文件列表中,只有一个文件名`srcfans.com`,这可能是一个误传或者遗漏,因为在正常情况下,一个关于Delphi 7.0和QuotedStr函数...
在Delphi中,过程可以定义为私有(private)、受保护(protected)、公开(public)或程序集(published),这决定了过程在程序中的可见性和访问权限。 Delphi函数(function)与过程类似,都是封装了代码的代码块...
在Delphi XE8中,通过`System.Posix`单元,我们可以访问到Posix API,从而在Android和iOS平台上实现与硬件的底层交互,比如串口通信。 串口通信是计算机通信的一种基本方式,广泛应用于设备控制、数据传输等场景。...
### Delphi 函数/属性/事件详解 #### 函数篇 1. **Abort**: 此函数用于终止当前的执行流程,通常在发生错误时调用,以停止程序的...理解和掌握这些函数的使用方法,将极大地提升开发者的问题解决能力和程序开发效率。
- 使用 `OpenProcess` 获取目标进程的句柄,需要进程 ID 和访问权限(如 `PROCESS_VM_READ` 和 `PROCESS_VM_WRITE`)。 - `GetModuleHandle` 或 `GetModuleHandleEx` 可用于获取模块(如 DLL)的基地址,这通常是...
Delphi提供了丰富的API来处理日期和时间数据,其中包括`SysUtils`单元中的函数,如`EncodeTime`, `DecodeTime`, `IncDay`, `IncMonth`, `IncYear`, `FormatDateTime`等,以及`Windows`单元中的Windows API函数,如`...
在Delphi中,可以使用`System.SysUtils`单元中的`GetEnvironmentVariable`函数来获取特定的环境变量值。例如,要获取`PATH`变量,代码如下: ```delphi uses System.SysUtils; var PathValue: string; ...
在Delphi中,我们通常会使用`System.DateUtils`和`System.SysUtils`这两个单元,它们提供了许多关于日期和时间的函数和类型。例如,`FormatDateTime`函数用于将日期时间转换为字符串,而`ParseDateTime`函数则相反,...
5. `GetGroupList`: 用于获取网络中的工作组列表,这对于访问控制和权限管理来说是必要的。 6. `GetUsers`: 给定一个工作机组名,此函数可以列出该组内的所有用户,返回结果存储在TStringList中。这对于用户管理、...
在Delphi中,我们可以通过Windows API函数来实现这一功能,这些API提供了对进程内存的低级访问。 在描述提到的示例程序中,关键在于使用`PReadMemory`函数。`PReadMemory`并不是Delphi自带的函数,而是Windows API...
面向对象编程是Delphi的一大特点,类与对象章节讲解了面向对象的基本概念,类和对象的声明、创建、继承、成员访问权限、对象字段与方法、类字段与方法、构造与析构函数、属性以及辅助类等。Delphi支持类的继承,允许...
值得注意的是,反编译行为可能涉及到法律问题,特别是当未经授权访问和使用受版权保护的软件时。因此,在使用IDR之前,确保你有合法的权限去反编译目标程序,遵循当地的版权法律法规。 总而言之,IDR是Delphi社区中...
在实际编程中,你可能需要处理各种异常,比如文件不存在、用户没有安装Excel或权限问题等。此外,如果Excel已经运行,`CreateOleObject`可能会连接到已存在的Excel实例,而不是创建新的。这些因素都需要在编写代码时...
获取文件的最后访问时间同样使用`GetFileTime`函数,但需要将时间戳赋值给`LastAccessTime`变量: ```delphi function GetLastAccessTime(const FileName: string): TDateTime; var Handle: THandle; ...
首先,你需要导入`Windows`和`SysUtils`单元,这两个单元提供了访问Windows API所需的基本类型和函数。然后,创建一个`THANDLE`类型的变量用于存储进程快照句柄,接着调用`CreateToolhelp32Snapshot`函数获取系统...
然而,需要注意的是,使用反编译工具可能涉及到版权和道德问题,因为它可能侵犯到原始软件作者的权益,除非你拥有合法的使用权限。 目前市面上存在多种Delphi反编译工具,如TDump、Jedi反编译库、Reflector for ...
本文将详细介绍如何在Delphi中引用相关的单元来实现这一功能。 首先,我们需要了解在Windows操作系统中,EXE文件的版本信息是通过资源文件(Resource File)来存储的,其中包括产品版本、文件版本、版权信息等。在...
类与对象介绍了面向对象编程的基本概念和Delphi中的具体实现,如类与对象的声明、创建、继承、成员访问权限、字段、方法、抽象方法、类字段、类方法、构造与析构函数、属性以及辅助类等。 接口是Delphi中实现多态的...
在实际应用中,你需要根据项目需求选择合适的方法,并注意处理可能的错误情况,如程序不存在、权限不足等问题。此外,如果外部程序需要交互,比如读写文件或接收命令行参数,那么还需要考虑通信机制,如管道、内存...