最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Delphi基本语法格式和常用函数

来源:动视网 责编:小OO 时间:2025-10-02 00:59:38
文档

Delphi基本语法格式和常用函数

Delphi基本语法格式和常用函数分类:《Delphi中的进制转换(如hex与bin)》  ShowMessage(Format('%d:%d',[pos,length(keys)])+':'+keys);Format('%d:%d:%x',[pos,key_len,byte(pchar(keys)[0])])//其中keys为string类型《delphi快捷键-和vim对应上的快捷键》delphi延时函数代码!Delphi文件操作函数Delphi关于多线程同步的一些方法,信号量,互斥量和临
推荐度:
导读Delphi基本语法格式和常用函数分类:《Delphi中的进制转换(如hex与bin)》  ShowMessage(Format('%d:%d',[pos,length(keys)])+':'+keys);Format('%d:%d:%x',[pos,key_len,byte(pchar(keys)[0])])//其中keys为string类型《delphi快捷键-和vim对应上的快捷键》delphi延时函数代码!Delphi文件操作函数Delphi关于多线程同步的一些方法,信号量,互斥量和临
Delphi基本语法格式和常用函数

分类:

《Delphi中的进制转换(如hex与bin)》  

ShowMessage(Format('%d:%d', [pos, length(keys)])+':'+keys);

Format('%d:%d:%x', [pos, key_len,byte(pchar(keys)[0])]) // 其中keys为string类型

《delphi快捷键-和vim对应上的快捷键》

delphi延时函数代码!

Delphi文件操作函数

Delphi关于多线程同步的一些方法,信号量,互斥量和临界区

delphi轻松实现原子操作-CreateSemaphore

获得Integer和DWord类型的最大值

  ShowMessage(IntToStr(High(Integer)));

  ShowMessage(IntToStr(High(DWord)));

// delphi的sleep()就是一个ms毫秒级延时函数,但是使用sleep会导致程序短暂pending

procedure TForm1.delay(MSecs: Integer);

//延时函数,MSecs单位为毫秒(千分之1秒)

var FirstTickCount, Now: Longint;

begin

  if MSecs <> 0 then begin

    FirstTickCount := GetTickCount();

    repeat

      Application.ProcessMessages;

      Now := GetTickCount();

    until (Now - FirstTickCount >= MSecs) or (Now < FirstTickCount);

  end;

end;

var

write_semaphore:THandle;

write_semaphore:=CreateSemaphore(0, 1, 1, nil);

procedure TForm1.Button1Click(Sender: TObject);

begin

  WaitForSingleObject(com.write_semaphore, INFINITE); // 返回值WAIT_TIMEOUT和WAIT_OBJECT_0

  ReleaseSemaphore(com.write_semaphore, 1, nil);

end;

var file_name:string;

file_name:='c:\\luther.gliethttp.txt';

send_fd:=FileOpen(file_name, fmOpenRead or fmShareDenyWrite);

FileWrite(com.log_fd, PChar(file_name)^, length(file_name));

GetForegroundWindow找到xp操作系统上当前前景窗体句柄.

GetActiveWindow 只是获取当前程序中(严格地说是线程中)被激活的窗口;

GetForegroundWindow 是获取当前系统中被激活的窗口.《Delphi中FindWindow和FindWindowEx的语法和用法》  《delphi获取操作系统已运行的所有窗口程序-如打开的所有记事本的标题》

两个函数的级别不一样, 一个是线程级、一个是系统级.被激活的窗口不一定是顶层窗口(最上面的窗口).

  // 向当前占有焦点的控件发送剪切板粘帖指令

  if Edit1.Focused or Edit3.Focused or Edit4.Focused then

    SendMessage(Form1.ActiveControl.Handle, WM_PASTE, 0, 0);

==================================

char类型数组和string之间的使用以及bin数据转换为hex函数使用

// 这是摘自Classes.pas库中的实现代码

procedure BinToHex(Buffer, Text: PChar; BufSize: Integer); assembler;

const

  Convert: array[0..15] of Char = '01234567ABCDEF';

var

  I: Integer;

begin

  for I := 0 to BufSize - 1 do

  begin

    Text[0] := Convert[Byte(Buffer[I]) shr 4];

    Text[1] := Convert[Byte(Buffer[I]) and $F];

    Inc(Text, 2);

  end;

end;

procedure TForm1.Button3Click(Sender: TObject);

var strs:string;

    p:pchar;

    i,max:Integer;

begin

  strs:='abcd1234';

  max:=length(strs);

  p:=Pointer(strs);

  i:=0;

  while (i <= max) do

  begin

    ShowMessage(p[i]);

    Inc(i);

  end;

end;

procedure TForm1.Button4Click(Sender: TObject);

var strs:string;

    hex:array of char;

    max:integer;

    hex_len:Integer;

begin

  strs:='你cd1234';

  max:=length(strs);

  hex_len:=2*max;//+1;

  SetLength(hex, hex_len);

  BinToHex(pointer(strs), pointer(hex), max);

  ShowMessage(inttostr(length(string(hex))));

  hex_len:=high(hex)+1;

  max:=hex_len shr 1;//div 2;

  ShowMessage(IntToStr(hex_len)+':'+inttostr(max));

  strs:='';

  SetLength(strs, max);

  HexToBin(pointer(hex), pointer(strs), hex_len);

  ShowMessage(strs);

end;

function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer

procedure BinToHex(Buffer, Text: PChar; BufSize: Integer);

function IntToHex(Value: Integer; Digits: Integer): string; overload; 

function StrToInt(const S: string): Integer;

==================================

Format('x=%d',[12]);//'x=12'//最普通

Format('x=%3d',[12]);//'x=12'//指定宽度

Format('x=%f',[12.0]);//'x=12.00'//浮点数

Format('x=%.3f',[12.0]);//'x=12.000'//指定小数

Format('x=%8.2f'[12.0])//'x=12.00';

Format('x=%.*f',[5,12.0]);//'x=12.00000'//动态配置

Format('x=%.5d',[12]);//'x=00012'//前面补充0

Format('x=%.5x',[12]);//'x=0000C'//十六进制

Format('x=%1:d%0:d',[12,13]);//'x=1312'//使用索引

Format('x=%p',[nil]);//'x=00000000'//指针

Format('x=%1.1e',[12.0]);//'x=1.2E+001'//科学记数法

Format('x=%%',[]);//'x=%'//得到"%"

S:=Format('%s%d',[S,I]);//S:=S+StrToInt(I);//连接字符串 

去除字符串中所有空格,字符串替换字符串

str:=StringReplace(str, ' ', '', [rfReplaceAll]);

function StringReplace(const   S,   OldPattern,   NewPattern:   string;   Flags:   TReplaceFlags):   string;

数组和string字符串之间拷贝数据.

var buf:array [0..63] of char;  

    name:string;

......

name:=name+#13+#10+'hello!'+#13+#10+'http://gliethttp.cublog.cn';

strpcopy(pchar(@buf),name);

high(buf)取得数组最大值,此处为63

low(buf)获得数组最小值,此处为0

var

  strs:TStringList;

begin

  strs:=TStringList.Create;

  strs.Delimiter:=' ';

  strs.DelimitedText:='I   am   a   programer';

strs[0]

strs[1]等就是去除了所有空格的一个个单词了

字符串string常用处理函数

uses StrUtils;

LeftStr(str, 3); // 读取最左边的3个字符

RightStr(S, 3); // 读取最右边的3个字符

Delete(str, 16, 1);

Copy(str, 3, 4);还有MidStr用于中文拷贝,如:MidStr('电脑报', 1, 1);

Insert('h', str, 2);

LowerCase(str); // 将str变为小写

UpperCase(str); // 将str变为大写

Pos('Like', 'I Like Reading!'); // 查找Like的位置,此处为3,如果没有返回0

Trim(str); // 删除头尾的所有空格

TrimLeft(str);

TrimRight(str);

===================

var S: String;

    arrText: array of Char; // 定义一个动态数组

SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。

SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char

===================

var arrChar: array[0..255] of Char; // 这里声明了长度为256的Char型数组

StrPCopy(arrChar, 'Come on, baby!');

===================

1.      常量:固定值,不可变数。

1)       const

       常量名 = 常量值(表达式);

2)       resourcestring

       常量名 = 字符串(常量);

2.      变量

1)         定义

    Var 名字1,名字2,…名字n:类型;

2)         命名原则(参考)

  变量名字 = 类型(缩写) + 作用域(简称) + 确切含义名称

3)         三种赋值格式

 变量名:= 值;

 变量名1: = 变量2;

  变量名:= 过程或函数的调用;

3.      类型常量

1)         类型常量是全局变量并不是一个常量,它进行了预初始化值。

2)         定义

Const

  名字:类型 = 值;

3)         种类

       简单的类型常量

       数组类型常量

       记录类型常量

       集合类型常量

       指针类型常量

       过程类型常量

4.      数据类型

   

简单类型(Simple)   
 有序类型(Ordinal)  
  整数(Integer) 
  字符(Character) 
  布尔(Boolean) 
  枚举(Enumerated) 
  子域(SubRange) 
 实数(Real)  
结构类型(Structured)   
 集合(Set)  
 数组(Array)  
 记录(Record)  
 文件(File)  
 类(Class)  
 类指针(Class Reference)  
 界面(Interface)  
字符串类型(String)   
指针类型(Pointer)   
过程类型(Procedural)   
可变类型(Variant)   
 

5.      用户自定义类型

           子域类型

        Type 名称 = 初值…终值;

           枚举类型

        Type 名称 = (值1,值2,值3…值N);

           数组类型

        Type 名称 = Array[下标定义]of类型名

        Type 名称 = [下标定义1,下标定义2…下标定义N] of元素类型

                或名称 = [下标定义1of…Array [下标定义N] of元素类型

           集合类型

        Type 名称 = set of 元素类型

           指针类型

Type 名称 = ^结点类型

           记录类型

        Type 名称 = Record

            域名1:类型;

            域名1:类型;

            ……

            域名N:类型;

        end;

           文件类型

    Type 名称 = file of 元素类型

 

 

语句

 

简单语句 

X := Y + Z;  // assignment

Randomize;   // procedure call

复合语句

begin

  A := B;

  C := A * 2;

end;

end之前的最后一条语句末尾分号不是必需的,你可以写成:

begin

  A := B;

  C := A * 2

end;

赋值语句 

在Pascal 语言中赋值语句用冒号-等号操作符“:=”,

 

条件语句

If语句 

对if-then型语句,仅当条件满足时,语句才执行;

if CheckBox1.Checked then

    ShowMessage ('CheckBox1 is checked')

对if-then-else型,if语句在两条语句中选择一条执行

if CheckBox2.Checked then

    ShowMessage ('CheckBox2 is checked')

  else

    ShowMessage ('CheckBox2 is NOT checked');

要注意的是,不能在第一句之后、else 关键词之前加分号,否则编译器将告知语法错误。实际上,if-then-else 语句是单纯的一

条语句,因此不能在语句中间加分号。

if 语句可以很复杂,句子中的条件部分可以是一系列条件(用and、 or 、 not等布尔操作符联接起来),if语句又可以嵌套另一

个if语句

begin

  // compound if statement

  if CheckBox1.Checked then

    if CheckBox2.Checked then

      ShowMessage ('CheckBox1 and 2 are checked')

    else

      ShowMessage ('Only CheckBox1 is checked')

  else

    ShowMessage (

      'Checkbox1 is not checked, who cares for Checkbox2?')

end;

Case语句

case语句包括用来选值的表达式、可能值序列或一个取值范围。这些值应该是常量,并且它们必须唯一,而且应属于有序类型。

Case语句最后可以带一个else 语句,当没有一个标签与选择器的值一致时,执行else语句。下面是两个简单的例子:

case Number of

  1: Text := 'One';

  2: Text := 'Two';

  3: Text := 'Three';

end;

case MyChar of

  '+' : Text := 'Plus sign';

  '-' : Text := 'Minus sign';

  '*', '/': Text := 'Multiplication or division';

  '0'..'9': Text := 'Number';

  'a'..'z': Text := 'Lowercase character';

  'A'..'Z': Text := 'Uppercase character';

else

  Text := 'Unknown character';

end;

Pascal语言中的循环

其它编程语言中使用的循环语句,Pascal语言中都有,它们包括 for、 while 和 repeat 语句。如果你用过其他编程语言,你会发

现Pascal中的循环语句没什么特别的,因此这里我只作简要的说明。

For循环 

Pascal 中的for循环严格地建立在计数器基础上,循环每执行一次,计数器不是增加一个值就是减小一个值。下面是一个for语句的

简例,用来将前十个数加起来:

var

  K, I: Integer;

begin

  K := 0;

  for I := 1 to 10 do

    K := K + I;

同样的for语句可以用正好相反的计数器来写:

var

  K, I: Integer;

begin

  K := 0;

  for I := 10 downto 1 do

    K := K + I;

Pascal 中的for循环语句其灵活性比其他语言小(它不能指定1之外的步长),不过简单也容易理解。如果需判断的条件比较复杂,

或想自定义计数器,你可以用while语句或 repeat 语句,而不是for循环语句。

注意:for循环计数器不必非是数字,它可以是任何有序类型的值,例如一个字符或一个枚举类型值。

 

while语句和repeat语句 

while-do 循环语句和 repeat-until 语句的不同点在于repeat 循环语句的代码至少要执行一次。从下面的简例很容易理解这一点

while (I <= 100) and (J <= 100) do

begin

  // use I and J to compute something...

  I := I + 1;

  J := J + 1;

end;

repeat

  // use I and J to compute something...

  I := I + 1;

  J := J + 1;

until (I > 100) or (J > 100);

从上可见即使 I 或 J 的初始值大于100,repeat-until循环中的代码也仍会执行一次。

注意:两种循环另一个关键的不同点是,repeat-until 循环的条件是反向的条件,只要不满足这个条件,循环就执行;当条件满足

时,循环终止。这正好与while-do 循环相反,while-do 循环当条件是真值时才执行。为此,我不得不在上面代码中用反向条件来

获得相同的结果。

注意:用 Break 和 Continue 系统过程可以改变循环执行的标准流程。Break 中断循环;Continue直接跳至循环测试句,或使计数

器增加一个步长,然后继续循环(除非条件为空或计数器达到最大值)。还有两个系统过程 Exit 和 Halt,让你立即从函数或过程

中返回,或者终止程序。

With语句

  with BirthDay do

  begin

    Year := 1995;

    Month := 2;

    Day := 14;

  end;

关键字

absolute 指令 (变量)

abstract 指令 (方法)

and 运算符 (布尔)

array 类型

as 运算符 (RTTI)

asm 语句

assembler 向后兼容 (汇编)

at 语句 (异常处理)

automated 访问类别符 (类)

begin 块标记

case 语句

cdecl 函数调用协定

class 类型

const 声明或指令(参数)

constructor 特殊方法

contains 运算符 (集合)

default 指令 (属性)

destructor 特殊方法

dispid dispinterface 界面类别符

dispinterface 类型

div 运算符

do 语句

downto 语句 (for)

dynamic 指令 (方法)

else 语句 (if 或 case)

end 块标记

except 语句 (异常处理)

export 向后兼容 (类)

exports 声明

external 指令 (函数)

far 向后兼容 (类)

file 类型

finalization 单元结构

finally 语句 (异常处理)

for 语句

forward 函数指令

function 声明

goto 语句

if 语句

implementation 单元结构

implements 指令 (属性)

in 运算符 (集合) - 工程结构

index 指令 (dipinterface界面)

inherited 语句

initialization 单元结构

inline 向后兼容 (见 asm)

interface 类型

is 运算符 (RTTI)

label 声明

library 程序结构

message 指令 (方法)

mod 运算符 (数学)

name 指令 (函数)

near 向后兼容 (类)

nil 数值

nodefault 指令 (属性)

not 运算符 (布尔)

object 向后兼容 (类)

of 语句 (case)

on 语句 (异常处理)

or 运算符 (布尔)

out 指令 (参数)

overload 函数指令

override 函数指令

package 程序结构 (控件包)

packed 指令 (记录)

pascal 函数调用协定

private 访问类别符 (class)

procedure 声明

program 程序结构

property 声明

protected 访问类别符 (类)

public 访问类别符 (类)

published 访问类别符 (类)

raise 语句 (异常处理)

read 属性类别符

readonly dispatch 界面类别符

record 类型

register 函数调用协定

reintroduce 函数指令

repeat 语句

requires 程序结构 (控件包)

resident 指令 (函数)

resourcestring 类型

safecall 函数调用协定

set 类型

shl 运算符 (数学)

shr 运算符 (数学)

stdcall 函数调用协定

stored 指令 (属性)

string 类型

then 语句 (if)

threadvar 声明

to 语句 (for)

try 语句 (异常处理)

type 声明

unit 单元结构

until 语句

uses 单元结构

var 声明

virtual 指令 (方法)

while 语句

with 语句

write 属性类别符

writeonly dispatch 界面类别符

xor 运算符 (布尔)

优先法则

单目运算符 (最高优先级)

@ 取变量或函数的地址(返回一个指针)

not 逻辑取反或按位取反

乘除及按位运算符

* 相乘或集合交集

/ 浮点相除

div 整数相除

mod 取模 (整数相除的余数)

as 程序运行阶段类型转换 (RTTI运算符)

and 逻辑或按位求和

shl 按位左移

shr 按位右移

加减运算符

+ 相加、集合并集、字符串连接或指针增加一个偏移量

- 相减、集合差集或指针减少一个偏移量

or 逻辑或按位或运算

xor 逻辑或按位异或运算

关系及比较运算符(最低优先级)

= 判断是否相等

<> 判断是否不相等

< 判断是否小于

> 判断是否大于

<= 判断是否小于或等于,或是否是一个集合的子集

>= 判断是否大于或等于,或是否是一个集合的父集

in 判断是否是集合成员

is 判断对象是否类型兼容 (又一个RTTI运算符)

Boolean (ByteBool WordBool LongBool)

Char

Integer

ShortInt -128~127

Byte 0~255

SmallInt -32768~32767

Word 0~65535

LongInt LongWord

Int

Interger Cardinal

AnsiChar

WidChar

#=Chr(),把数字转化为字符,Ord为相反,把字符转化为数字

#9 Tab键

#10 换行

#13 回车

类型转换

Chr 将一个有序数据转换为一个ANSI字符 

Ord 将一个有序类型值转换为它的序号 

Round 转换一个实型值为四舍五入后的整型值 

Trunc 转换一个实型值为小数截断后的整型值 

Int 返回浮点数的整数部分 

IntToStr 将数值转换为字符串 

IntToHex 将数值转换为十六进制数字符串 

StrToInt 将字符串转换为一个整型数,如字符串不是一个合法的整型将引发异常 

StrToIntDef 将字符串转换为一个整数,如字符串不合法返回一个缺省值 

Val 将字符串转换为一个数字(传统Turbo Pascal例程用于向后兼容) 

Str 将数字转换为格式化字符串(传统Turbo Pascal例程用于向后兼容) 

StrPas 将零终止字符串转换为Pascal类型字符串,在32位Delphi中这种类型转换是自动进行的 

StrPCopy 拷贝一个Pascal类型字符串到一个零终止字符串, 在32位Delphi中这种类型转换是自动进行的 

StrPLCopy 拷贝Pascal类型字符串的一部分到一个零终止字符串 

FloatToDecimal 将一个浮点数转换为包含指数、数字及符号的十进制浮点记录类型 

FloatToStr 将浮点值转换为缺省格式的字符串 

FloatToStrF 将浮点值转换为特定格式的字符串 

FloatToText 使用特定格式,将一个浮点值拷贝到一个字符串缓冲区 

FloatToTextFmt 同上面例程,使用特定格式,将一个浮点值拷贝到一个字符串缓冲区 

StrToFloat 将一个Pascal字符串转换为浮点数 

TextToFloat 将一个零终止字符串转换为浮点数 

Dec 将例程中的参数值递减1或一个特定的值,其中特定值可在第二个可选参数中定义 

Inc 将例程中的参数值增加1或一个特定的值 

Odd 如果参数为奇数返回真 

Pred 根据参数在其数据类型定义中的序列,返回参数值的前驱值 

Succ 返回参数值的后继值 

Ord 返回参数值在其数据类型值集合中的序号 

Low 返回参数对应的有序数据类型的最小取值 

High 返回参数对应的有序数据类型的最大取值 

实数:

Single

Double

Extended

Real {$REALCOMPATIBILITY ON}据说不标准,要兼容旧的格式使用这个宏

Comp

Currency

TDateTime = type Double

为了后续使用或直接用于变量,需要给自定义类型命名。如果自定义一个命名的类型,你必须将代码放在特定的type区,如下所示:

最多的如定义类等。

type

Uppercase = 'A'..'Z';

Temperatures = array [1..24] of Integer;

Date = record

Month: Byte;

Day: Byte;

Year: Integer;

end;

Colors = (Red, Yellow, Green, Cyan, Blue, Violet);

Letters = set of Char;

end;

子界类型

a...b

a~b为有序类型

枚举类型

type

Colors = (Red, Yellow, Green);//园括弧括起来的,在属性列表中最多出现。

end;

只能有一个值

CPP = enum

集合类型

type Letters = set of Char;

var Letters1,Letters2etters;

begin

Letters1 := ['A'.'B'.'C'];

Letters2 := ['K'];

end;

是什么什么的集合,可以有多个属性。

CPP = 多字段与或

Font.style := [fsBold, fsItalic]; // two styles

Font.style :=Oldstyle + [fsBold, fsItalic];

数组类型

type

MonthTemps = array [1..24, 1..31] of Integer;

YearTemps = array [Jan..Dec] of Integer;

记录类型

type

Date = record

Year: Integer;

Month: Byte;

Day: Byte;

end;

类似 structure

指针

type

PointerToInt = ^Integer;

var

P:^Integerl

X:Integer;

begin

P := @X; p = &x;

X :=10; x = 10;

P^ :=20; *p = 20;

end;

除了表示已分配内存的地址外,指针还能通过New 例程在堆中动态分配内存,不过当你不需要这个指针时,你也必须调用Dispose 例程释放你动态分配的内存。

P:=nil;

Pointer 类型,如void *;

实际上,Delphi 中必须使用指针的情况很少,这是Delphi开发环境一个诱人的优点。

文件类型

type

IntFile = file of Integer;

能打开一个与这个结构相应的物理文件、向文件中写入整数、或者从文件中读取当前的值

简单语句:

单行:X:= Y+Z;

调用一个过程

Randomize;

复合语句begin end;

赋值 :=

=表示关系运算符,用于判断是否相等用 c: ==

条件

if 用and、 or 、 not等布尔操作符联接起来的条件 then

statement;

else

statement;

end;

Case语句

case Number of

1: Text:='One';

2: Text:='Two';

else //default;

Text:='Unknow';

end;

循环 循环条件为顺序数

for I:=1 to 10 do

statement;

for I := 10 downto 1 do 递减

statement;

while conditions do

statement;

repeat

statement;

until conditions;

With语句

begin

with BirthDay do

begin

Year:=1999;

Month :=2;

Day :=14;

end;

end;

减少BirthDay.xxx 的代码工作量,但现在的自动完成比他效率高

可以with多个,同样属性的取最后一个的,容易出错。

函数和过程

procedure Hello;

begin

ShowMessage ('Hello world!');

end;

调用:Hello;

function Double (value: Integer) : Integer;

begin

Double := value * 2; //函数名做返回值

end;

function Double2 (value: Integer) : Integer;

begin

Result := value * 2; //Result作返回值

end;

引用参数

同C++中的(&xx)

使用var关键字表示

procedure Produ(var value:Integer);

既做传递参数,又把值返回给调用程序。

procedure Produ(out value:Interger);

用作返回。

常量参数

使用const

开放数组参数

function Sum (const A: array of Integer): Integer;

var

I: Integer;

begin

Result := 0;

for I := Low(A) to High(A) do

Result := Result + A[I];

end;

可以传递大小不定的数组

类型变化的开放数组参数

可以接收多种类型的数组参数

function SumAll (const Args: array of const): Extended;

调用协定

fastcall 只要有可能,传递到CPU寄存器多达3个,操作更快

delphi3+ 缺省标记

win32 API是stdcall,win16 API是原始的Pascal调用和cdecl调用混合体

方法:

是一种特殊的函数或过程

他与类这一数据类型相对应,每个事件都定义一个方法,通常是过程。

forward 申明

欲声明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward 关键字:

procedure Hello; forward;

可用来写递归调用

当你在一个单元(关于单元的更多内容见下一章)的interface 部分声明一个过程或一个函数时,它被认为是一个forward声明,即使没有forward关键字也一样。

过程类型

type

IntProc = procedure (var Num: Integer);

IP: IntProc;

begin

IP := otherProcedure;

函数重载 overload关键字

function Min (A,B: Integer): Integer; overload;

function Min (A,B: Int): Int; overload;

function Min (A,B: Single): Single; overload;

function Min (A,B: Double): Double; overload;

function Min (A,B: Extended): Extended; overload;

确省参数

procedure MessBox (Msg: string;

Caption: string = 'Warning';

Flags: LongInt = mb_OK or mb_IconHand);

字符串

ShortString

AnsiString

WideSting

如果只简单地用String定义字符串,那么该字符串可能是短字符串也可能是ANSI长字符串,这取决于$H 编译指令的值,$H+(确省)代表长字符串(ANSIString 类型)。长字符串是Delphi 库中控件使用的字符串。

SetLength (String1, 200);设置长度分配内存

类型转换,PChar(String)

SetWindowText (Handle, PChar (Label1.Caption));

GetWindowText (Handle, PChar (S1), Length (S1));

格式化字符串

format ('First %d, Second %d', [n1, n2]);//集合

d(decimal) 将整型值转换为十进制数字字符串

x (hexadecimal) 将整型值转换为十六进制数字字符串

p (pointer) 将指针值转换为十六进制数字字符串

s (string) 拷贝字符串、字符、或字符指针值到一个输出字符串

e (exponential) 将浮点值转换为指数表示的字符串

f (floating point) 将浮点值转换为浮点表示的字符串

g (general) 使用浮点或指数将浮点值转换为最短的十进制字符串

n (number) 将浮点值转换为带千位分隔符的浮点值

m (money) 将浮点值转换为现金数量表示的字符串,转换结果取决于地域设置,详见Delphi帮助文件的Currency and date/time formatting variables主题

内存

动态数组

Array1: array of Integer;

SetLength(Array1, 100);

下标从0开始

普通数组下标可以随便写

动态数组不行,Length,Hight,Low函数了解动态数组状况

for I := Low (Array1) to High (Array1) do

Array1 [I] := I;

windows相关

type

THandle = LongWord;

外部声明

// forward declaration

function LineTo (DC: HDC; X, Y: Integer): BOOL; stdcall;

// external declaration (instead of actual code)取代真实代码

function LineTo; external 'gdi32.dll' name 'LineTo';

这段声明表示函数LineTo 的代码同名保存在GDI32.DLL 动态链接库中(最重要的Windows 系统库之一)。实际应用时,外部声明中的函数名与DLL中的函数名可以不同。

与WindowsAPI对应的声明:

BOOL EnumWindows(

WNDENUMPROC lpEnumFunc,LPARAM lParam

);

=》

function EnumWindows (lpEnumFunc: TFNWndEnumProc,lParam: LPARAM): BOOL; stdcall;

回调函数

BOOL CALLBACK EnumWindowsProc (

HWND hwnd, // handle of parent window

LPARAM lParam // application-defined value

);

=>

type

EnumWindowsProc = function (Hwnd: THandle, Param: Pointer): Boolean; stdcall;

直接使用方法

Variant变量没有类型

运算效率低

单元Unit

unit unitName;

interface

// other units we need to refer to

uses

A, B, C;

// exported type definition

type

newType = TypeDefinition;

// exported constants

const

Zero = 0;

// global variables

var

Total: Integer;

// list of exported functions and procedures

procedure MyProc;

implementation

uses

D, E;

// hidden global variable

var

PartialTotal: Integer;

// all the exported functions must be coded

procedure MyProc;

begin

// ... code of procedure MyProc

end;

initialization

// optional initialization part

finalization

// optional clean-up code

end.

单元用作命名空间

Delphi 应用程序源代码文件可分成两类,它们是一个或多个单元文件及一个程序文件,单元文件可以看成是次一级的文件,它被应用程序的主体——程序文件——引用。

program Project1;

uses

forms,

Unit1 in Unit1.PAS?{form1Dateform};

begin

Application.Initialize;

Application.Createform (Tform1, form1);

Application.Run;

end.

面向对象

type

TData = class

A:Integer;

B:Char;

function F(V:Integer):Boolean;

var C:Integer;

begin

A :=1;

C :=A;

end;

procedure P(V:Char);

begin

B:='b';

end;

end.

public

private

protected

self变量

publish

继承

type

MyClass = class(BaseClass);

多继承

type

MyClass = class();

构造器

constructor 代替procedure;自动分配内存

对象方法重载 同函数

多态

type

BaseClass = class

public

function F:String;virtual;

end;

type

MyClass = class(BaseClass)

public

function F:String;override;

end;

类型兼容性

向上兼容

之类兼容父类

类型信息

if MyClass is BaseClass then

继承

inherited; 使用父辈被继承的方法

类引用

MyClassClass = class of MyClass;

Create()

Free()

type里面类声明

implementation

实现

initialization //初始化段

Init();

finalization //反初始化段

UnInit();

constructor Create();

destructor Destroy();

procedure fly(); virtual; abstract;抽象

接口 interface

type

Icanfly = interface

['{10000000-0000-0000-0000-0000000000}']

function Fly:String;

end;

type

TAirplane = class(TomerfaceObject,IcanFly)

function Fly:String virtual;

end;

Flyer1 :=TAirplance.Create as Icanfly;

QueryInterface

异常 错误处理

raise Exceptoion.Create('a error');

try

A();

except

...

finally

...

end;

继承异常类 p54

VCL

TObject

TPresistent

TComponent

TControl可视化控件

Windowsed Controls 基于window的控件(TWinControl)

Nonwindowsed Controls( TGraphicsControl)

Nonvisual Components非可视控件

可视化组件

Window-based controls

有GDI句柄,Windows管理,拥有Windows对象的属性

Graphical controls

无GDI句柄,自行绘图管理,如大量的Laber(比较Static控件) speedbutton,节省GDI资源,但响应事件麻烦。

novisiual compoenets 一些管理组件

可融入编辑环境

published private/public

procedure p:string;

property month:Integer

read FMonth write SetMonth;

读写为变量或者过程。

read GetMonth write SetMonth;

function GetMonth:Integer;读

procedure SetMonth(const value:Integer);写

只读属性的话就不带read 或 write

对象拷贝

Assigned()

事件

private

FonClick : TNotifyEvent;

……

published:

property onClick : TNotifyEvent Read FonClick Write FonClick;

文档

Delphi基本语法格式和常用函数

Delphi基本语法格式和常用函数分类:《Delphi中的进制转换(如hex与bin)》  ShowMessage(Format('%d:%d',[pos,length(keys)])+':'+keys);Format('%d:%d:%x',[pos,key_len,byte(pchar(keys)[0])])//其中keys为string类型《delphi快捷键-和vim对应上的快捷键》delphi延时函数代码!Delphi文件操作函数Delphi关于多线程同步的一些方法,信号量,互斥量和临
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top