Delphi的一些重要语法

来源:互联网 发布:公司网络搭建方案 编辑:程序博客网 时间:2024/05/21 01:57

一.        流程控制语句

1.1          Case Statements

case用法1

case I of

1..5: Caption := 'Low';

6..9: Caption := 'High';

0, 10..99: Caption := 'Out of range';

else

Caption := '';

end;

case用法2   

type

  Tperson = record

  FirstName, LastName: String[40];

  BirthDate: Tdate;

  Case Citizen: Boolean of

True: (Birthplace: String[40]);

False: (Country: String[20];

         EntryPort: String[20];

         EntryDate, ExitDate: TDate);

  End;

 

二.      类型

2.1          过程类型

 

过程类型用法1

type

  TIntegerFunction = function: Integer;

  TProcedure = procedure;

TStrProc = procedure(const S: String);

TMathFunc = function(x: Double): Double;

var

  F: TIntegerFunction;

  Proc: TProcedure;

  SP: TStrProc;

  M: TMathFunc;

过程类型用法2(过程函数作为参数)

procedure FuncProc(P: TIntegerFunction);

过程类型用法3(引用一个实例对象的方法)

type

  TMethod = procedure of object;

  TNotifyEvent = procedure(Sender: TObject) of object;

var

  MainForm: TMainForm;

  OnClick: TNotifyEvent;

...

  OnClick := MainForm.ButtonClick;

用法3的类型表示方法指针。方法指针实际上是一对指针:第一个存储方法的地址,第二个存储方法所属的对象的引用。

Ø         过程指针和方法指针是不兼容的

Ø         nil 可以赋给任何过程类型

Ø         嵌套的过程和函数(在其它例程中声明的例程)不能被用作过程类型值,内置的过程和函数也不可以。
若想使用内置的过程作为过程类型值,比如
Length,你可以给它加一个包装:
function FLength(S: String): Integer;
begin
  Result := Length(S);
end;

注意1(在赋值语句中):

左边变量的类型决定右边的过程(或方法)指针的解释,比如

var

F, G: function: Integer;

I: Integer;

function SomeFunction: Integer;

...

F := SomeFunction; // SomeFunction 赋给F

G := F; // 拷贝F G

I := G; // 调用函数,把结果赋给I

1 个赋值语句把一个过程类型值赋给F,第2 个语句把这个值拷贝给另一个变量,第3 个语句调用引

用的函数并把结果赋给I。因为I 是一个整数变量,而不是过程类型,所以最后的赋值实际上是调用函数

(它返回一个整数值)。

注意2(在boolean判断中):

在一些情况下,如何解释过程变量并不是很清楚,看下面的语句

if F = MyFunction then ...;

在此情况下,F 导致函数调用:编译器调用F 指向的函数,然后调用函数MyFunction,然后比较结果。

规则是,只要过程变量出现在表达式中,它就表示是调用引用的过程或函数在上面的例子中,若F 引用一个过程(没有返回值),或F 引用的函数需要参数,则引发编译错误。要比较F MyFunction 的过程值,使用

if @F = @MyFunction then ...;

@F F 转换为无类型指针变量,它包含的是地址,@MyFunction 返回的是MyFunction 的地址。

注意3

过程变量可以是nil 值,但此时调用它会引发错误。

要测试一个过程变量是否被赋值,使用标准函数

Assigned

if Assigned(OnClick) then OnClick(X);

 

 

 

 

 

三.     

 

 

 

四.      接口

 

 
原创粉丝点击