1. Delphi中的全局函數
//要點: 須要給其餘單元調用, 必須在 interface 聲明, 但必須在 uses 區後面
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;
{須要給其餘單元調用, 必須在 interface 聲明, 但必須在 uses 區後面} function MyFun(x,y: Integer): Integer; {函數聲明}
var Form1: TForm1;
implementation
{$R *.dfm}
function MyFun(x,y: Integer): Integer; {函數實現} begin Result := x + y; end;
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := MyFun(1,2); //注意此時MyFun()是個全局函數 ShowMessage(IntToStr(i)); {3} end;
end.
2. Delphi中的內部函數---- unit中implementation區中的內部函數
//要點: implementation 區中的過程或函數, 只能在本單元調用
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end;
var Form1: TForm1;
implementation
{$R *.dfm}
{implementation 區中的過程或函數, 只能在本單元調用} function MyFun(x,y: Integer): Integer; //此時這個函數僅供本unit調用 begin Result := x + y; end;
procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin i := MyFun(1,2); //注意此時MyFun()是個全局函數 end;
end.
3. Delphi中的內部函數---- Procedure/Function中的內部函數
//Delphi 支持過程當中的方法
procedure TForm1.Button1Click(Sender: TObject);
procedure alert(s: string);
begin
ShowMessage(s);
end;
begin
alert('Hello');
end;
4. Delphi類的成員函數
//要點: 若是聲明在 TForm1 類內, 那它就是 TForm1 類的一個方法了
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); function MyFun(x,y: Integer): Integer; {函數聲明在 TForm1 類的體內} {如今這個函數 MyFun 已是 TForm1 類的一個方法了} end;
var Form1: TForm1;
implementation
{$R *.dfm}
{函數在實現區必須有 TForm1. 做爲前綴} function TForm1.MyFun(x,y: Integer): Integer; begin Result := x + y; end;
{調用} procedure TForm1.Button1Click(Sender: TObject); //至關於C++中TForm1::Button1Click();
var i: Integer; begin i := MyFun(1,2);//類的實現內部固然能夠調用類的方法MyFun()了 ShowMessage(IntToStr(i)); {3} end;
end.
5. Delphi的類方法---相似於C++中類的靜態方法
//類方法就是經過類名就能夠訪問的方法
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end;
{類方法示例:} TMyClass = class(TObject) class procedure alert(s: string); {類方法只是比靜態方法多了一個 class 指示字} end; { 類方法不能在 private 和 protected 區; 類方法不能是虛方法; 類方法只能使用類中的、在對象實例化之前的數據. }
var Form1: TForm1;
implementation
{$R *.dfm}
{ TMyClass } class procedure TMyClass.alert(s: string); begin ShowMessage(s); end;
{類方法能夠直接使用} procedure TForm1.Button1Click(Sender: TObject); begin TMyClass.alert('Hello world');
end;
{類的對象固然也能使用} procedure TForm1.Button2Click(Sender: TObject); var MyClass: TMyClass; begin MyClass := TMyClass.Create; MyClass.alert('Hello World');
MyClass.Free; end;
end. --------------------------------------------------------------------------------
//靜態類方法
{如今的 Delphi 不單單有類方法, 同時有: 類變量: class var 類常量: class const 類類型: class type 類屬性: class property
靜態類方法就是給類屬性來調用的, 它能夠存在與私有區(private), 譬以下面的 SetName 就是一個靜態類方法: } TMyClass = class(TObject) private class var FName: string; class procedure SetName(const Value: string); static; {靜態類方法又多了一個 static 指示字} published class property Name: string read FName write SetName; end;
6. Delphi中指針函數參數
{如今這個函數並無 var 前綴, 也就是說參數應該不會被修改的}
function MyFun(p: PInteger): Integer; {PInteger 是 Integer 的指針類型}
begin
p^ := p^ * 2;
Result := p^;
end;函數
{測試} procedure TForm1.Button1Click(Sender: TObject); var i,x: Integer; begin i := 8;
x := MyFun(@i); {調用函數} ShowMessage(IntToStr(x)); {16}
{如今 i 的值應該不會被修改, 但...} ShowMessage(IntToStr(i)); {16}
{ 沒有 var 或 out 前綴的參數, 應該是傳值的; 有 var 或 out 的參數是傳地址的; 指針就是一個地址, 儘管沒有指定傳地址, 但事實上就是給了一個地址, 因此參數值也會改變! } end;