本文转自
原文出处: http://www.cnblogs.com/del/category/168694.html
使用 {$INCLUDE} 或 {$I} 指令管理和调用自定义函数,INC文件:
--------------------------------------------------------------------------------
//这是一个简单、方便而又实用的小技巧. 譬如这段代码中有四个定义函数: MyAdd、MyDec、MyMul、MyDiv
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//譬如下面四个自定义函数 *****************************
function MyAdd(const a,b: Integer): Integer;
begin
Result := a + b;
end;
function MyDec(const a,b: Integer): Integer;
begin
Result := a - b;
end;
function MyMul(const a,b: Integer): Integer;
begin
Result := a * b;
end;
function MyDiv(const a,b: Integer): Integer;
begin
Result := a div b;
end;
//****************************************************
//调用测试
procedure TForm1.FormCreate(Sender: TObject);
const
x = 8;
y = 2;
begin
ShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);
{显示结果: 10,6,16,4}
end;
end.
--------------------------------------------------------------------------------
我们可以把其中的自定义函数(也可以是其他代码)剪切保存在一个文本文件中(譬如是: C:\DelphiFun\MyFun.inc);
然后在原来代码的位置用 {$INCLUDE C:\DelphiFun\MyFun.inc} 或 {$I C:\DelphiFun\MyFun.inc} 再引入即可(可以使用相对路径).
下面是使用后的代码:
--------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$I C:\DelphiFun\MyFun.inc}
//调用测试
procedure TForm1.FormCreate(Sender: TObject);
const
x = 8;
y = 2;
begin
ShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);
{显示结果: 10,6,16,4}
end;
end.
--------------------------------------------------------------------------------
另外: 引入 C 语言的 obj 文件是用 {$L 路径} 指令完成的.
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
编译指令POINTERMATH默认 off; 打开后, 可以像数组一样地读写指针中的系列数据:
--------------------------------------------------------------------------------
//测试整数指针
procedure TForm1.Button1Click(Sender: TObject);
var
p: PInteger;
i: Integer;
begin
{$POINTERMATH ON}
//写入
p := GetMemory(SizeOf(Integer) * 4);
p[0] := 11;
p[1] := 22;
p[2] := 33;
p[3] := 44;
//读取
ShowMessageFmt('%d, %d, %d, %d', [p[0], p[1], p[2], p[3]]);
{$POINTERMATH OFF}
//之前有时会这么麻烦
ShowMessageFmt('%d, %d, %d, %d', [p^, PInteger(Integer(p) + SizeOf(Integer) * 1)^,
PInteger(Integer(p) + SizeOf(Integer) * 2)^,
PInteger(Integer(p) + SizeOf(Integer) * 3)^]);
FreeMemory(p);
end;
//测试结构体指针
procedure TForm1.Button2Click(Sender: TObject);
type
TMyRec = record
Name: string[12];
Age: Word;
end;
var
p: ^TMyRec;
begin
{$POINTERMATH ON}
p := GetMemory(SizeOf(TMyRec) * 2);
//写入
p[0].Name := '张三';
p[0].Age := 11;
p[1].Name := '李四';
p[1].Age := 22;
//读取
ShowMessageFmt('%s, %d', [p[0].Name, p[0].Age]);
ShowMessageFmt('%s, %d', [p[1].Name, p[1].Age]);
FreeMemory(p);
{$POINTERMATH OFF}
end;