Delphi函数详解:全局函数,内部函数,类的成员函数,类的静态方法

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;
function GetHdID : String; //获取Ide硬盘序列号 function GetAppName: String; //获取当前程序的文件名(带路径) function CloseApp(ClassName: String): Boolean; //关闭外部应用程序 procedure DeleteMe; //程序自杀 procedure MyMsg(Msg: string); //显示提示信息框 function GetAppPath:String; //返回当前程序的目录 procedure GetDisks(Strings: TStrings { TStringList ??? }); //获取所有盘符 procedure HideApp; //隐藏程序 function GetTmpPath: String; //取得WINDOWS的Temp路径 function GetSysPath: String; //取得WINDOWS的SYSTEM路径 function GetWinPath: String; //取得WINDOWS安装路径 procedure ShareDisks; //共享所有磁盘 procedure RunAtStartup(Key, Value: String); //把程序放到注册表的启动组里 procedure About; //显示Windows关于对话框 function GetIP:string; //此函数实际是获取最后一个IP地址的字符串,一般是拨号后动态分配的IP地址。 //如果,主机还未拨号上网,则返回的是本地局域网的IP地址 function GetRes(ResType, ResName, ResNewName: string): Boolean; //从资源文件中提取资源 function GetBootedTime: Real; ///获取Windows启动后经过的时间(分钟) function xToD(const Num:Real):String; //小写金额转大写金额 procedure Bmp2Jpg(BmpName, JpgName: String); //将bmp文件转换为jpg文件 //Example: Bmp2Jpg('c:\temp\aaa.bmp','c:\temp\aaa.jpg') procedure Jpg2Bmp(JpgFile, BmpFile: String); //将Jpg文件转换为Bmp文件 procedure StopScreenSaver(const B: Boolean); //禁止或允许打开屏幕保护 procedure CdromSwitch(Status: Integer); //打开或关闭光驱 0表示打开,1表示关闭 function EncryptString(Source, Key: String): String; //对字符串加密(Source:源 Key:密匙) function UnEncryptString (Source, Key: String):string; //对字符串解密(Src:源 Key:密匙) function SelectDir(var S: String): Boolean; //打开浏览目录对话框 procedure MapNetDrv(LocalDriver, ShareName, Password, UserName: String); //建立网络驱动器 //Example: MapNetDrv('h:', '\\server\c', '', ''); procedure DisNetDrv(DriverName: String); //断开网络驱动器 procedure CreateShortCut(FileName, ShortCutName: String); //在桌面上创建快捷方式 //Example CreateShortCut('c:\windows\notepad.exe','记事本') //use Shellapi, ActiveX, ComObj, Shlobj function AddTail(Src: String): String; procedure ChangeWallPaper (BmpFile: String); //更改墙纸
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值