很多初學者對delphi單元的變數和函式訪問許可權不理解,在此我舉例說明,希望初學者看此文後能茅塞頓開。
delphi單元的變數和函式訪問許可權問題如下兩個單元描述:
unit unit1;
inte***ce
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
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
end;
//******************************=物件及其成員區域******************************=
//***********************************==全域性區域******************************===
//在此區域定義的變數和函式是全域性的,對其它單元都是可見的,只要該單元uses unit1 則可可以直接引用該區域的變數和函式
// 全域性變數最好統一寫到乙個檔案裡面。
tchar3 = array[0..2] of char;
tstring3 = array[0..2] of string;
function all(str:string):string; //全域性函式,不屬於某個物件
varform1: tform1;
chr:tchar3; //全域性變數,不屬於某個物件
str3:tstring3;
//***********************************==全域性區域******************************===
implementation
uses unit2;
//***********************************=區域性區域******************************====
//在此區域定義的變數和函式是區域性的,只能在本單元unit1使用,對其它單元是不可見的
varstr4: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;
inte***ce
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs, stdctrls ;
type
tform2 = class(tform)
button1: tbutton;
procedure button1click(sender: tobject);
private
public
end;
varform2: tform2;
implementation
uses unit1;
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;
inte***ce
uses windows, messages, sysutils;
type
tfrm1 = class(tform)
private
public
end;
varimplementation
uses untpublic;
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語句宣告的地方,實際效果是一樣的,沒有什麼差別吧。
以上是個人理解,有錯誤或不全之處還望大家指出更正之。
Delphi常用系統函式 System單元
1.轉換函式 transfer routines unit system chr 傳回ascii 碼所對應的字元。function chr x byte char 例如 hex 十六進製制 chr 02 代表 正文開始 chr 03 代表正文結束 chr 20 代表空格 round 四捨六入五留雙 ...
Delphi函式和過程
過程無返回值,函式有返回值。procedure myproc m,n integer o string p single 2.5 q string delphi 如上例所示,過程宣告和定義中,多個引數是用分號隔開的,但在呼叫時是用逗號隔開的 eg myproc 3,4,me 3.14 上例中省略了最...
系統環境變數的設定Delphi函式
uses tregistry function setglobalenvironment const name,value string const user boolean true boolean resourcestring reg machine location system curren...