能定义成局部变量的不要定义成全局变量
定义 | 自动初始化 | 存放位置 | 效率 | 作用域 | |
---|---|---|---|---|---|
局部变量 | 定义在函数或过程中的变量 | 否 | 栈中 | 读写速度快 | 方法体内 |
全局变量 | 定义在函数或过程外的变量 | 是 | 堆中 | 较慢 | 实现段:定义在implementation下面,作用于定义语句之后的整个实现段 整个程序:定义在Implementation上面,作用范围最大,能作用于引用该单元的其它单元中 |
引用其它单元:关键字--uses + 单元名
uses只能紧跟在Interface关键字或Implementation关键字后,否则会报错。
一般放在Implementation后
Delphi中Integer的范围是 -232 ~ 232 - 1; Extended的范围是 3.6 * 10-4951 ~ 1.1 * 104932
所以可以考虑用Extended类型接收Integer类型运算的结果
Exe文件包含两个部分,一部分是编译后的程序指令,另一部分是程序运行所需的资源库。
const定义的字符串常量保存需要编译,而ResourceString定义的字符串保存在程序资源中,不需要编译,由windows管理。
汉化一般就是汉化ResourseString声明的字符串
如果和UI或语言相关的字符串,都用ResourceString声明
Forward声明:
过程类型:函数式编程的关键,用于向一个方法中传递另一个方法
--例:根据参数计算两个Integer的值
--定义过程类型
type
coculateType = function(Value1, Value2:Integer):Integer; --定义了一个有两个Integer参数并返回Integer结果的函数类型(感觉有点像类和实例的关系)
--定义加法
function AddNum(Num1, Num2: Integer): Integer;
begin
Result := a + b;
end;
--定义乘法
function PlusNum(Num1, Num2: Integer): Integer;
begin
Result := a * b;
end;
--使用过程类型
function ProcTypeTest(Num1, Num2: Integer; ProcTest: coculateType):Integer;
begin
Result := ProcTest(Num1, Num2);
end
--用一个按钮显示结果
procedure TfrmDetail.btn1Click(Sender: TObject);
var
a, b: Integer;
funcName: coculateType;
begin
funcName := AddNum; --函数名
a := 1;
b := 2;
ShowMessage(IntToStr(ProcTypeTest(a, b, funcName)));
end;
now(); 获取本地当前时间
每个对象实际上是一个隐含的指针,传入方法时其实是传入了自己的引用,所以在方法体内能改变对象的属性
带类型声明的全局数组常量:
const
arr: array of string = ('asad', 'bsad', 'csa');
Xe4中Run按钮主要分两步:先编译,再执行生成的EXE
编译时会先判断.pas文件是否有改变,没有改变的话不会编译。
Delphi中常用的字符串函数:
Copy(str: string, index, num: Integer): string; --从str的第index个字符开始,截取num个字符;
Length(str: string): Integer; --返回str的长度
Pos(sourceStr, TargetStr: string): Integer; --返回sourceStr中第一次出现TargetStr的开始位置,没有找到则返回0(string下标从1开始)
Delete(str, index, num); --从index开始,删除str的num个字符