能定义成局部变量的不要定义成全局变量

定义 自动初始化 存放位置 效率 作用域
局部变量 定义在函数或过程中的变量 栈中 读写速度快 方法体内
全局变量 定义在函数或过程外的变量 堆中 较慢 实现段:定义在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个字符