首页 [新版]delphi(pascal)的函数手册_编程必备

[新版]delphi(pascal)的函数手册_编程必备

举报
开通vip

[新版]delphi(pascal)的函数手册_编程必备[新版]delphi(pascal)的函数手册_编程必备 delphi(pascal)的函数手册 名称 类型 说明 ---------------------------------------------------------------------------------- Abort 函数 引起放弃的意外处理 Abs 函数 绝对值函数 AddExitProc 函数 将一过程添加到运行时库的结束过程表中 Addr 函数 返回指定对象的地址 AdjustLineBreaks 函数 将给定字符串的...

[新版]delphi(pascal)的函数手册_编程必备
[新版]delphi(pascal)的函数手册_编程必备 delphi(pascal)的函数手册 名称 类型 说明 ---------------------------------------------------------------------------------- Abort 函数 引起放弃的意外处理 Abs 函数 绝对值函数 AddExitProc 函数 将一过程添加到运行时库的结束过程表中 Addr 函数 返回指定对象的地址 AdjustLineBreaks 函数 将给定字符串的行分隔符调整为CR/LF序列 Align 属性 使控件位于窗口某部分 Alignment 属性 控件标签的文字位置 AllocMem 函数 在堆栈上分配给定大小的块 AllowGrayed 属性 允许一个灰度选择 AnsiCompareStr 函数 比较字符串(区分大小写) AnsiCompareText 函数 比较字符串(不区分大小写) AnsiLowerCase 函数 将字符转换为小写 AnsiUpperCase 函数 将字符转换为大写 Append 函数 以附加的方式打开已有的文件 ArcTan 函数 余切函数 AssignFile 函数 给文件变量赋一外部文件名 Assigned 函数 测试函数或过程变量是否为空 AutoSize 属性 自动控制标签的大小 BackgroundColor 属性 背景色 BeginThread 函数 以适当的方式建立用于内存管理的线程 BevelInner 属性 控件方框的内框方式 BevelOuter 属性 控件方框的外框方式 BevelWidth 属性 控件方框的外框宽度 BlockRead 函数 读一个或多个 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 到变量中 BlockWrite 函数 从变量中写一个或多个记录 BorderStyle 属性 边界类型 BorderWidth 属性 边界宽度 Break 命令 终止for、while、repeat循环语句 Brush 属性 画刷 Caption 属性 标签文字的内容 ChangeFileExt 函数 改变文件的后缀 ChDir 函数 改变当前目录 Checked 属性 确定复选框选中状态 Chr 函数 返回指定序数的字符 CloseFile 命令 关闭打开的文件 Color 属性 标签的颜色 Columns 属性 显示的列数 CompareStr 函数 比较字符串(区分大小写) Concat 函数 合并字符串 Continue 命令 继续for、while、repeat的下一个循环 Copy 函数 返回一字符串的子串 Cos 函数 余弦函数 Ctl3D 属性 是否具有3D效果 Cursor 属性 鼠标指针移入后的形状 Date 函数 返回当前的日期 DateTimeToFileDate 函数 将DELPHI的日期格式转换为DOS的日期格式 DateTimeToStr 函数 将日期时间格式转换为字符串 DateTimeToString 函数 将日期时间格式转换为字符串 DateToStr 函数 将日期格式转换为字符串 DayOfWeek 函数 返回星期的数值 Dec 函数 递减变量值 DecodeDate 函数 将日期格式分解为年月日 DecodeTime 函数 将时间格式分解为时、分、秒、毫秒 Delete 函数 从字符串中删除子串 DeleteFile 命令 删除文件 DiskFree 函数 返回剩余磁盘空间的大小 DiskSize 函数 返回指定磁盘的容量 Dispose 函数 释放动态变量所占的空间 DisposeStr 函数 释放字符串在堆栈中的内存空间 DitherBackground 属性 使背景色的色彩加重或减少50% DragCursor 属性 当鼠标按下时光标的形状 DragMode 属性 按动的作用方式 DropDownCount 属性 容许的显示数据项的数目 EditMask 属性 编辑模式 Enabled 属性 是否使标签呈现打开状态 EncodeDate 函数 将年月日合成为日期格式 EncodeTime 函数 将时、分、秒、毫秒合成为时间格式 EndMargin 属性 末尾边缘 Eof 函数 对有类型或无类型文件测试是否到文件尾 Eoln 函数 返回文本文件的行结束状态 Erase 命令 删除外部文件 ExceptAddr 函数 返回引起当前意外的地址 Exclude 函数 从集合中删除一些元素 ExceptObject 函数 返回当前意外的索引 Exit 命令 立即从当前的语句块中退出 Exp 函数 指数函数 ExpandFileName 函数 返回包含绝对路径的字符串 ExtendedSelect 属性 是否允许存在选择模式,True时,MultiSelect才有意义 ExtractFileDir 函数 返回驱动器和路径 ExtractFileExt 函数 返回文件的后缀 ExtractFileName 函数 返回文件名 ExtractFilePath 函数 返回指定文件的路径 FileAge 函数 返回文件已存在的时间 FileClose 命令 关闭指定的文件 FileCreate 命令 用指定的文件名建立新文件 FileDateToDateTime 函数 将DOS的日期格式转换为DELPHI的日期格式 FileExists 函数 检查文件是否存在 FileGatAttr 函数 返回文件的属性 FileGetDate 函数 返回文件的DOS日期时间标记 FileOpen 命令 用指定的存取模式打开指定的文件 FilePos 函数 返回文件的当前指针位置 FileRead 命令 从指定的文件读取 FileSearch 命令 在目录中搜索指定的文件 FileSeek 函数 改变文件的指针 FileSetAttr 函数 设置文件属性 FileSetDate 函数 设置文件的DOS日期时间标记 FileSize 函数 返回当前文件的大小 FileWrite 函数 对指定的文件做写操作 FillChar 函数 用指定的值填充连续字节的数 {e.g GetMem(R, SizeOf(TMyRecord)); FillChar(R^, SizeOf(TMyRecord), #0); SetLength(R.S, $FFFF); FreeMem(R); // 不会释放 R.S 内存空间 !! } FindClose 命令 终止FindFirst/FindNext序列 FindFirst 命令 对指定的文件名及属性搜索目录 FindNext 命令 返回与文件名及属性匹配的下一入口 FloatToDecimal 函数 将浮点数转换为十进制数 FloatToStrF 函数 将浮点数转换为字符串 FloatToStr 函数 将浮点数转换为字符串 FloatToText 函数 将给定的浮点数转换为十进制数 FloatToTextFmt 函数 将给定的浮点数转换为十进制数 Flush 函数 将缓冲区的内容刷新到输出的文本文件中 FmtLoadStr 函数 从程序的资源字符串表中装载字符串 FmtStr 函数 格式化一系列的参数,其结果以参数Result返回 Font 属性 设置字体 Format 函数 格式化一系列的参数并返回Pascal字符串 FormatBuf 函数 格式化一系列的参数 FormatDateTime 函数 用指定的格式来格式化日期和时间 FormatFloat 函数 指定浮点数格式 Frac 函数 返回参数的小数部分 FreeMem 函数 按给定大小释放动态变量所占的空间 GetDir 返回指定驱动器的当前目录 GetHeapStatus 返回内存管理器的当前状态 GetMem (var P: Pointer; Size: Integer);{(建立一指定大小的动态变量)分配一个指定大小的内 存块(连续),并将指针指向该处} GetMemoryManager 返回内存管理器的入口点 Glyph 函数 按钮上的图象 Halt 停止程序的执行并返回到操作系统 Hi 返回参数的高地址位 High 返回参数的上限值 Hint 属性 提示信息 Int 返回参数的整数部分 Include 添加元素到集合中 Insert 在字符串中插入子串 IntToHex(,) 将整型数转换为十六进制数。两个参数,第二个是返回十六进制数的最小长度 IntToStr 将整型数转换为字符串 IOResult 返回最新的I/O操作完成状态 IsValidIdent 测试字符串是否为有效的标识符 Items 属性 默认显示的节点 Kind 属性 摆放样式 LargeChange 属性 最大改变值 Layout 属性 图象布局 Length 函数 返回字符串的动态长度 Lines 属性 缺省显示内容 Ln 函数 自然对数函数 Lo 函数 返回参数的低地址位 LoadStr 函数 从应用程序的可执行文件中装载字符资源 LowerCase 函数 将给定的字符串变为小写 Low 函数 返回参数的下限值 Max 属性 最大值 MaxLength 属性 最大长度 Min 属性 最小值 MkDir 命令 建立一子目录 Move 函数 从源到目标复制字节 MultiSelect 属性 允许同时选择几个数据项 Name 属性 控件的名字 New (var P: Pointer); {为一个指针变量分配内存,会自动计算指针所指数据结构需要空的空 间大小(建立新的动态变量并设置一指针变量指向它)}NewStr 函数 在堆栈上分配新的字符串 Now 函数 返回当前的日期和时间 Odd 测试参数是否为奇数 OnActivate 事件 焦点移到窗体上时触发 OnClick 事件 单击窗体空白区域触发 OnDblClick 事件 双击窗体空白区域触发 OnCloseQuery 事件 使用者试图关闭窗体触发 OnClose 事件 窗体关闭后才触发 OnCreate 事件 窗体第一次创建时触发 OnDeactivate 事件 用户切换到另一应用程序触发 OnDragDrop 事件 鼠标拖放操作结束时触发 OnDragOver 事件 有其他控件从他上面移过触发 OnMouseDown 事件 按下鼠标键时触发 OnMouseUp 事件 释放鼠标键时触发 OnMouseMove 事件 移动鼠标时触发 OnHide 事件 隐藏窗体时触发 OnKeyDown 事件 按下键盘某键时触发 OnKeyPress 事件 按下键盘上的单个字符键时触发 OnKeyUp 事件 释放键盘上的某键时触发 OnPaint 事件 窗体上有新部分暴露出来触发 OnResize 事件 重新调整窗体大小触发 OnShow 事件 在窗体实际显示之前瞬间触发 Ord 返回序数类的序数 OutlineStyle 属性 类型 OutOfMemoryError 引起OutOfMemory意外 PageIndex 属性 页索引 Pages 属性 页 ParamCount 函数 返回在命令行上传递给程序的参数数量 ParamStr 函数 返回指定的命令行参数 Pen 属性 画刷设置 Pi 函数 返回圆周率Pi Picture 属性 显示图象 PictureClosed 属性 设置Closed位图 PictureLeaf 属性 设置Leaf位图 PictureMinus 属性 设置Minus位图 PictureOpen 属性 设置Open位图 PicturePlus 属性 设置Plus位图 Pos 函数 在字符串中搜索子串 Pred 函数 返回先前的参数 Random 函数 返回一随机函数 Randomize 函数 用一随机数初始化内置的随机数生成器 Read 函数 对有格式的文件,读一文件组件到变量中;对文本文件,读一个或多个值到一个 或多个变量中 Readln 函数 执行Read过程,然后跳到文件下一行 ReadOnly 属性 只读属性 ReAllocMem (var P: Pointer; Size: Integer); {重新分配指定大小内存块,参数P必须是nil或 者指向一个由GetMem, AllocMem, 或 ReallocMem分配的内存变量,其分配的内存是连续 的,会把前面已有的数据移到新分配的内存中去} Rename 函数 重命名外部文件 RenameFile 函数 对文件重命名 Reset 函数 打开已有的文件 Rewrite 函数 建立并打开一新的文件 RmDir 函数 删除空的子目录 Round 函数 将实数值舍入为整型值 RunError 函数 停止程序的执行 ScrollBars 属性 滚动条状态 Seek 函数 将文件的当前指针移动到指定的组件上 SeekEof 函数 返回文件的文件结束状态 SeekEoln 函数 返回文件的行结束状态 SelectedColor 属性 选中颜色 SetMemoryManager 函数 设置内存管理器的入口点 SetLength函数 为一个字符串变量分配空间 SetTextBuf 函数 给文本文件指定I/O缓冲区 Shape 属性 显示的形状 ShowException 函数 显示意外消息与地址 Sin 函数 正弦函数 SizeOf 函数 返回参数所占的字节数 SmallChange 属性 最小改变值 Sorted 属性 是否允许排序 Sqr 函数 平方函数 Sqrt 函数 平方根函数 StartMargin 属性 开始边缘 State 属性 控件当前状态 Str 函数 将数值转换为字符串 StrAlloc 函数 给以NULL结束的字符串分配最大长度-1的缓冲区 StrBufSize 函数 返回存储在由StrAlloc分配的字符缓冲区的最大字符数 StrCat 函数 将一字符串附加到另一字符串尾并返回合并的字符串 StrComp 函数 比较两个字符串 StrCopy 函数 将一个字符串复制到另一个字符串中 StrDispose 函数 释放堆栈上的字符串 StrECopy 函数 将一字符串复制到另一个字符串并返回结果字符串尾部的指针 StrEnd 函数 返回指向字符串尾部的指针 Stretch 属性 自动适应控件的大小 StrFmt 函数 格式化一系列的参数 StrIComp 函数 比较两个字符串(不区分大小写) StringToWideChar 函数 将ANSI字符串转换为UNICODE字符串 StrLCat 函数 将一字符串中的字符附加到另一字符串尾并返回合并的字符串 StrLComp 函数 以最大长度比较两个字符串 StrLCopy 函数 将一个字符串中的字符复制到另一个字符串中 StrLen 函数 返回字符串中的字符数 StrLFmt 函数 格式化一系列的参数,其结果中包含有指向目标缓冲区的指针 StrLIComp 函数 以最大长度比较两个字符串(不区分大小写) StrLower 函数 将字符串中的字符转换为小写 StrMove 函数 将一个字符串中的字符复制到另一个字符串中 StrNew 函数 在堆栈上分配一个字符串 StrPas 函数 将以NULL结束的字符串转换为PASCAL类的字符串 StrPCopy 函数 将PASCAL类的字符串复制为以NULL结束的字符串 StrPLCopy 函数 从PASCAL类的最大长度字符串复制为以NULL结束的字符串 StrPos 函数 返回一个字符串在另一个字符串中首次出现指针 StrRScan 函数 返回字符串中最后出现字符的指针 StrScan 函数 返回字符串中出现首字符的指针 StrToDate 函数 将字符串转换为日期格式 StrToDateTime 函数 将字符串转换为日期/时间格式 StrToFloat 函数 将给定的字符串转换为浮点数 StrToInt 函数 将字符串转换为整型 StrToIntDef 函数 将字符串转换为整型或默认值 StrToTime 函数 将字符串转换为时间格式 StrUpper 函数 将字符串中的字符转换为大写 Style 属性 类型选择 Suce 函数 返回后继的参数 Swap 函数 交换参数的高低地址位 Tabs 属性 标记每一项的内容 TabIndex 属性 标记索引 Text 属性 显示的文本 TextToFloat 函数 将字符串(以NULL结束的格式)转换为浮点数 Time 函数 返回当前的时间 TimeToStr 函数 将时间格式转换为字符串 Trim 函数 从给定的字符串中删除前导和尾部的空格及控制字符 TrimLeft 函数 从给定的字符串中删除首部的空格及控制字符 TrimRight 函数 从给定的字符串中删除尾部的空格及控制字符 Trunc 函数 将实型值截取为整型值 Truncate 函数 截去当前文件位置后的内容 UnSelectedColor 属性 未选中颜色 UpCase 将字符转换为大写 UpperCase 将给定的字符串变为大写 Val 函数 将字符串转换为整型值 VarArrayCreate 函数 以给定的界限和维数建立变体数组 VarArrayDimCount 函数 返回给定变体的维数 VarArrayHighBound 函数 返回给定变体数组维数的上界 VarArrayLock 函数 锁定给定的变体数组 VarArrayLowBound 函数 返回给定变体数组维数的下界 VarArrayOf 函数 返回指定变体的数组元素 VarArrayRedim 函数 通过改变上限来调整变体的大小 VarArrayUnlock 函数 解锁指定的变体数组 VarAsType 函数 将变体转换为指定的类型 VarCase 函数 将变体转换为指定的类型并保存他 VarClear 函数 清除指定的变体 VarCopy 函数 将指定的变体复制为指定的变体 VarFormDateTime 函数 返回包含日期时间的变体 VarIsArray 函数 测试变体是否为数组 VarIsEmpty 函数 测试变体是否为UNASSIGNED VarIsNull 函数 测试变体是否为NULL VarToDateTime 函数 将给定的变体转换为日期时间 VarType 函数 将变体转换为指定的类型并保存他 Visible 属性 控件的可见性 WantReturns 属性 为True时,按回车键产生一个回车符;为False时,按下Ctrl+Enter才产生回车符 Write 命令 对有格式的文件,写一变量到文件组件中;对文本文件,写一个或多个值到文件中 Writeln 命令 执行WRITE过程,然后输出一行结束标志 WideCharLenToString 函数 将ANSI字符串转换为UNICODE字符串 WideCharLenToStrWar 函数 将UNICODE字符串转换为ANSI字符串变量 WideCharToString 函数 将UNICODE字符串转换为ANSI字符串 WideCharToStrVar 函数 将UNICODE字符串转换为ANSI字符串变量 absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: string[32]; StrLen: Byte absolute Str; //这个声明指定了变量StrLen起始地址与Str相同. //由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度. begin Str := 'abc'; Edit1.Text := IntToStr(StrLen); end; abstract //它允许你创建抽象的方法, 包括有抽象方法的类称为抽象类. //Abstract关键字必须与Virtual或Dynamic关键字同时使用, 因为抽象方法必须被覆盖式实现. //抽象类不能实例化, 抽象方法不能包含方法体. type TDemo = class private protected procedure X; virtual; abstract; public constructor Create; destructor Destroy; override; published end; and //一、表示逻辑与 if (a>0) and (b>0) then //二、表示位运算 学习视频网 var a,b,c: Integer; begin c := (a and b); end; //使用And表示逻辑时, And左右的表达式必须用小括号括起, 以避免以生条件的冲突. //例如: if a>0 and b>0 then //编译器可能会理解为: if a>(0 and b)>0 then //或: if (a>0) and (b>0) then //但是实际编译时, 编译器会产生一个冲突, 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 错误. //并且第一种可能包含了a>b>c的形式, 这在Delphi中不被支持. //所以使用And运算符时必须使用括号, 以区分左右的条件. //表示位运算时也必须加上括号, 将And以及左右参数括起. array //Array用于表示数组, 任何的对象都能被声明成数组.数组分为静态和动态的,种. //静态数组 var Arr1: array [1..10] of Integer; //动态数组, 由于声明时不知其元素个数, 所以必须在后期用SetLength方法设置数组的大小 var Arr2: array of Integer; //数组作为参数时, 不能传入数组的大小, 只能传入数组名, 然后用Length方法获取数组的元素个数 function X(A: array of Integer): Integer; var i: Integer; begin Result := 0; for i := 0 to Length(A)-1 do Result := Result + A[i]; end; as //As用于将一个对象转换为另一个对象 procedure BtnClick(Sender:TObject); begin (Sender as TButton).Caption := 'Clicked'; end; //对于对象填充接口的转换, 必须用As进行 (HTTPRIO as IExp).GetConnection; //As不能用于数据类型的转换, 下面的代码是错误的: var i: Integer; s: string; begin s := (i as string); end; //正确写法是: s := string(i); asm //Asm关键字用于插入汇编代码, 使用汇编代码时, 必须使用asm...end;的结 构, 而非begin...end; function IntToHex(Value: Integer; Digits: Integer): string; asm CMP EDX, 32 JBE @A1 xor EDX, EDX @A1: PUSH ESI MOV ESI, ESP SUB ESP, 32 PUSH ECX MOV ECX, 16 CALL CvtInt MOV EDX, ESI POP EAX CALL System.@LStrFromPCharLen ADD ESP, 32 POP ESI end; assembler //Assembler关键字用于支持早期的汇编, 如80386等. //它和Asm的区别:Asm允许使用Win32汇编, 而Assembler只允许80x86汇编, 它不允许Invoke语句的出现. function IntToHex(AValue: Int64): string; assembler; automated //Automated访问区分符用于描述一个自动类型的成员, 它能够使程序的版本向下兼容. //ComObj单元内的成员及其实例不能使用Automated访问区分符. type TDemo = class automated Str:WideString; end; //在程序的下一个版本中, 将Str做了修改, 变成 type TDemo = class automated Str: AnsiString; end //则新版本的Str变量能够接受旧版本的WideString型数据, 并自动转换成AnsiString. //在实际开发中, 如果没有特殊的需要, 一般不用automated访问区分符. begin //begin关键字用于表示一段程序或一个结构的开始, 必须用end关键字来结束. procedure X; begin ShowMessage('A Demo'); end; //一般的结构, 如If, For, While等也需要用begin关键字来标出结构起始点 for i:=1 to 100 do begin sum := sum + i; if sum > 1000 then Break; end; case //Case语句用于完成条件选择, Case语句的的被选择对象必须是有序类型, 包括整型, 枚举类型, 字符型等. //Case语句必须由end结束,如果没有相符合的选择项, 可以加入else来作出通用选择. function GetDays(AYear,AMonth: Integer): Integer; begin case AMonth of 1,3,5,7,8,10,12: Result := 31; 4,6,9,11: Result := 30; 2: begin if IsLeapYear(AYear) then Result:=29 else Result:=28; end; else Result:=0; end; cdecl //Cdecl是函数调用协定的一种, 它规定了从C或C++编写的DLL中调用函数所 必须遵守的规则. //它可以将C或C++中的数据类型转换为Delphi的. //例如C++中的代码: int X(int i) { return i*2; } //这个函数被编译在Demo.dll中, 用Delphi调用时必须使用: function X(i: Integer): Integer; Cdecl; external 'Demo.dll'; class //Class关键字用于声明或继承一个类, 也可以使类和接口同时继承. //另外, Class关键字也能用于声明类通用方法, 使得父类可以从类内访问子类 的方法. type ClassDemo = class(TObject) private public constructor Create; end; //如果用class声明方法, 则该方法在类与相关类中都可以使用, 譬如: type ClassA = class private public procedure Y; end; type ClassB = class(ClassA) private public class procedure X; end; //则在使用时ClassA能够直接访问ClassB的X方法 procedure ClassA.Y; begin Self.X; end; //此时父类将子类的class方法作为自身的方法进行调用. const //Const关键字用于声明常量, 使用const声明的数据将不能在程序中被改变. //也可以用来声明函数参数, 用const指定的参数不允许在函数中改变. const MyFileName = 'Delphi'; const MyInteger = 100; //用Const声明常量不需要指出其数据类型, 系统会自动判断类型, 并作自动调整. //函数中可以用const声明不可更改的参数 function X(const i: Integer): string; //此时在函数操作过程中, i的值不可改变. constructor //constructor关键字用来声明一个类的构造函数, 当类被实例化时, 首先调用此函数 //构造函数一般用Create表示, Create方法能够连带类中存在的CreateWnd方法. type ClassDemo = class(TObject) private fValue: Integer; public constructor Create; end; constructor ClassDemo.Create;begin fValue := 0; end; contains //Contains关键字指出了某个包(Package)是否包含某个文件. //用Contains引入的文件必须被添加到包文件中, 它可以避免关键文件的引用丢失. package DATAX; requires rtl, clx; contains Db, DBLocal, DBXpress; end. default //Default关键字用于指出一个属性的默认值 //只有有序类型的属性才允许默认值的存在, 否则必须在构造函数中初始化属性值. type ClassDemo = class private fValue: Integer; published property Value: Integer read fValue write fValue default 0; end; //它也可以指出一个类的默认属性 property strings[Index: Integer]: string read GetString write PutString; Default; destructor //Destructor用于标识析构函数, 析构函数在类被释放时自动调用. //析构函数只允许覆盖, 再不允许重载.析构函数通常用Destroy作为函数名. type ClassDemo = class(TComponent) public destructor Destroy;override; end; //由于TComponent类中也有Destroy方法, 所以要将其重写 //但是若要重载析构函数, 则不允许, 下面代码是错误的: destructor Destroy; overload; dispid //DispId关键字被用在DispInterface接口中, 用于指定特定的适配序号. //在DispInterface接口中, 适配序号必须是唯一的, //如果不指定DispId, 则系统会自动分配适配序号给接口内每一个方法. //可以通过适配序号访问DispInterface接口中的方法. type IStringsDisp = dispinterface ['{EE05DFE2-5549-11D0-9EA9-0020AF3D82DA}'] property ControlDefault[Index: Integer]: Olevariant dispid 0; default; function Count: Integer; dispid 1; property Item[Index: Integer]: Olevariant dispid 2; procedure Remove(Index: Integer); dispid 3; procedure Clear; dispid 4; function Add(Item: Olevariant): Integer; dispid 5; function _NewEnum: IUnknown; dispid -4; end; dispinterface //DispInterface用于声明一个特定的适配器接口, 这个适配器能够接受标准系统接口中传入传出的数据. //用DispInterface声明的接口不能被继承, 只能够被引用. //DispInterface中方法只能调用, 并且必须被动态绑定. //可以通过DispId为接口内方汉分配适配序号. //DispInterface仅能用于Windows平台, 如果在Linux下进行开发, 则此关键字会自动被系统屏蔽. //通常情况下, 不使用DispInterface. //实例请参见DispId div //Div用于求两数之整数商.用于Div运算的两个数值必须均为整型, 其运算结果也为整型. var a,b,c:Integer; begin a := 20; b := 3; c := a div b; {6} end; do //Do关键字用于For, While, On, With语句, 构成特定的结构 //For语句: for i := 1 to 100 do sum:=sum+i; //While语句: while i < 100 do begin sum := sum + i; Inc(i); end; //On语句(异常处理): try i := StrToInt(s); except on exception do ShowMessage('Error!'); end; //With语句: with Memo1.Lines do begin Clear; Append('abc'); Append('123'); end; downto //DownTo关键字用于For语句, 指明循环变量是递减的. for i := 100 downto 1 do ListBox1.Items.Add(IntToStr(i)); //在For语句中, 循环变量递增用To关键字, 递减用DownTo关键字. dynamic //Dynamic用于声明一个动态的方法, //动态方法可以被覆盖, 并且可以使代码大小尽可能的减少(区别于Virtual). procedure X(i: Integer); dynamic; else //else用于引导程序的运行方向, 它可以与If, Case和On语句联用, 当条件 不满足时, 转到else下运行 //If语句(在If语句中, else前不允许有分号): if a > b then c := a else c:=b; //Case语句: case Tag Of 1:Result:=1; 2:Result:=2; 3:Result:=3; else Result:=0; end; //On语句(异常处理): try i := StrToInt(s); Excpet on EZeroDivide do Result := 1; on EOverflow do Result := 2; else Result := 0; end; end //End用于结束一个语句块或是一个单元. //它可以与begin, Case, Class, Interface, Asm, Unit, Package等相匹配. //对于语句块(局部结束), End后必须添加分号. //而对于单元或包(全局结束), end后必须添加句号. //在If语句中else关键字前的End后不允许添加符号. procedure X; begin with Button1 do begin if Button1.ShowHint then Button1.Caption := 'Hinted' else Button1.Caption := 'Not Hinted'; end; end; //在包内使用End来结束: package DATAX; requires rtl, clx; contains Db, DBLocal, DBXpress; end. except //except关键字用于异常处理, 必须用在try语句内, 如果发生异常, 则执行except后的语句 try i := StrToInt(s); except ShowMessage('Error!'); end; export //Export标明了函数调用协定, 指出函数可以被输出, 输出的函数能被本地或远程调用. //其他程序可以用dll的形式调用程序内的函数.它是向下兼容的. function Add(a,b: Integer): Integer; export; //如果这个程序被编译为Demo.exe, 并且另一个程序需要调用这个函数, 可以使用以下语句 function Add(a,b: Integer): Integer; stdcall; external 'Demo.exe'; exports //exports用于输出对象, 它必须被用在接口和实现之间, 可以同时输出多个项, 项与项之间用逗号分开. library Demo; function X(i: Integer): string; stdcall; begin Result:=IntToStr(i); end; exports X; begin end. //如果输出的对象被重载(重载对象必须保证参数类型或个数不同), 则必须给对象起个别名, 并注明参数. library Demo; function X(i: Integer): string; overload; stdcall; begin Result := IntToStr(i); end; function X(s: string): Integer; overload; stdcall; begin Result := StrToInt(s); end; exports X(i: Integer) name 'x1', X(s: string) name 'x2'; begin end. external //External关键字用于引用一个外部的或是OBJ内的方法. {$L Demo.OBJ} procedure X(i:Integer);external; //如果是从dll或外部程序中引用, 则可以使用以下代码: function A(FileName: string): string; external 'Demo.dll'; //如果被引用的函数被重载, 则必须另外指出引用的名称. function A(Name: string): string; overload; stdcall; external 'Demo.dll' name 'A1'; function A(Code: Integer): string; overload; stdcall; external 'Demo.dll' name 'A2'; //使用External关键字时, 必须注意大小写, 否则将出现错误. far //Far标明了函数调用协定, 指出函数可以被远程调用. //其他程序可以用dll的形式调用程序内的函数.它是向下兼容的. function Add(a,b: Integer): Integer; Far; //如果这个程序被编译为Demo.exe, 并且另一个处于其他计算机的程序需要调用这个函数, 可以使用以下语句: function Add(a,b: Integer): Integer; stdcall; external 'Demo.exe'; file //File关键字指出了文件操作类型, 文件必须被声明为File, //如果在File后追加Of和文件类型, 则文件可以被定义为读写指定类型数据. type TPerson = record PName: string[32]; PAge: Integer; end; var PFile: file of TPerson; finalization //finalization关键字标识了单元被释放时所要调用的方法, //通常是释放掉单元中不能自动释放的对象, 也可以不用. //finalization最常用的情况是对OLE对象做反初始化. initialization ActiveX.OleInitialize(nil); finalization ActiveX.OleUninitialize; finally //finally关键字指出了异常处理中最后必须要调用的方法, //不论是否发生异常, finally后的语句总是在try语句结束时执行. try Node := Node.GetNext; Edit1.Text := Node.Text; finally Node := nil; end; for //For关键字引出For循环结构, 用于做指定次数的循环. for i := 1 to 100 do sum := sum + i; //如果循环变量是递减的, 则可以用DownTo关键字 for i := 100 downto 1 do Inc(sum); forward //Forward关键字用于方法的前置定义.只定义方法声明, 然后在程序的后面对方法进行实现. //这么做有利于代码的可读性, 可以将所有的声明放在一起, 然后将所有的实现也放在一起. function X(i: Integer): Integer; forward; procedure Y(s: string); forward; ... function X; begin Result := i * 2; end; procedure Y; begin WriteLn(s); end; //用Forward前置声明的方法在实现时不需要再输入方法的参数和返回值, 直接使用方法名即可. function //Function用于声明函数 function X(i: Integer): Integer; //它也可以用于动态函数的声明 type TFun = function(i: Integer): Integer of object; //动态声明时, 不需要指出函数名, 只需要指出参数和返回类型就可以, 具体的函数名可以在后期绑定. goto //Goto语句用在跳转行号, 可以跳转到当前结构层内任意位置. //必须在声明处用label关键字声明行号. //由于Goto语句会破坏程序的结构, 不推荐使用.var a,b: Integer; label X,Y; begin if a > b then goto X else goto Y; X: WriteLn('a > b'); Y: WriteLn('b > a'); end; if //If关键字引出If条件语句, 用于对条件进行判断. var a,b: Integer; begin a := 2; b := 3; if a>b then WriteLn('a=' + IntToStr(a)) else WriteLn('b=' + IntToStr(b)); end; //If语句的通常结构是If...Then...else, else语句也可以不要. //在If语句内如果有多个子语句, 则必须用begin...End结构进行区分. if a > b then begin WriteLn('a>b'); WriteLn('a=' + IntToStr(a)); WriteLn('b=' + IntToStr(b)); End else WriteLn('b>a'); implementation //Implementation标识了单元中的实现部分, 单元的基本结构为: //Unit...Interface...implementation...end. //函数体, 过程体等必须写在implementation关键字后. //如果在implementation后引用对象, 则对象是非公开的, 仅能供单元自身使用. implementation uses frmAbout; begin FormAbout.Show; end; //一个完整的单元必须拥有implementation部分. implements //Implements指出了一个属性从接口继承, 此时属性被转换成接口对象. //通过接口动态绑定属性, 并动态的设定属性值. type IMyInterface = interface procedure P1; procedure P2; end; TMyImplclass = class procedure P1; procedure P2; end; TMyclass = class(TInterfacedObject, IMyInterface) FMyImplClass: TMyImplClass; property MyImplClass: TMyImplclass read FMyImplclass implements IMyInterface; procedure IMyInterface.P1 = MyP1; procedure MyP1; end; //通过implements声明后, 可以在类声明时指出接口中方法的实体, 如上例中的: procedure IMyInterface.P1 = MyP1; in //In用于判断一个集合中是否包含某个元素.被判断的内容必须是单个集合元素和一个集合的实例. type TCol = (cA,cB,cC); TCols = set of TCol; var Cols: TCols; begin Cols := [cA,cB]; if cA in Cols then ShowMessage('cA in Cols') else ShowMessage('cA not in Cols'); end; //In也用于工程文件中, 用于标识某个文件是否被工程所引用. Uses Unit1 in 'Unit1.pas'; //In可以被用在For语句中, 用于循环取出一个集合中的元素. var s: string; sl: TStringList; begin ... for s In sl do begin ShowMessage(s); end; end; index //Index用于在属性中标识序号, 以便用相同的属性方法(Get,Set)对不同的属性进行操作. type TForm1 = class(TForm) private function GetInfo(const Index: Integer): Longint; procedure SetInfo(const Index: Integer; const Value: Longint); public property iLeft:Longint index 0 read GetInfo write SetInfo; property iTop:Longint index 1 read GetInfo write SetInfo; property iWidth:Longint index 2 read GetInfo write SetInfo; property iHeight:Longint index 3 read GetInfo write SetInfo; end; function TForm1.GetInfo(const Index: Integer): Longint; begin case Index of 0: result := self.Left; 1: Result := self.Top; 2: result := self.Width; 3: result := self.Height; end; end; //Index关键字也用于在属性中指出多个元素, 例如: property Selected[Index: Integer]: Boolean read GetSelected write SetSelected; inherited //Inherited用于调用父类的方法. type TDemo = class(TComponent) public constructor Create(AOwner: TComponent); override; end; constructor TDemo.Create(AOwner: TComponent); begin inherited Create(AOwner); end; //如果调用的是与自身同名的方法, 则也可以省去方法名和参数.如上例中的 inherited Create(AOwner); //可以改成: Inherited; initialization //initialization关键字标识了单元被载入时所要调用的方法, //通常是初始化一些不能自动初始化的对象, 也可以不用. //initialization最常用的情况是对OLE对象做初始化. initialization ActiveX.OleInitialize(nil); finalization ActiveX.OleUninitialize; inline //InLine关键字用于Asm或assembler结构中, //用于指出该汇编语句是向下兼容的.它对于程序的编译没有任何影响. function IntToStr(Value: Integer): string; asm InLine; PUSH ESI MOV ESI, ESP SUB ESP, 16 xor ECX, ECX PUSH EDX xor EDX, EDX CALL CvtInt MOV EDX, ESI POP EAX CALL System.@LStrFromPCharLen ADD ESP, 16 POP ESI end; interface //Interface标识了单元中的接口部分, 单元的基本结构为: //Unit...Interface...implementation...end. //函数, 过程等的声明必须写在Interface关键字后. //如果在Interface后引用对象, 则对象是没有实例的, 使用时必须被实例化. Interface uses frmAbout; var FAbout: TFormAbout; begin FAbout :, TFormAbout.Create(Self); FAbout.Show; end; //一个完整的单元必须拥有Interface部分. //Interface也可以用作接口的声明. type IMalloc = interface(IInterface) ['{00000002-0000-0000-C0046}'] function Alloc(Size: Integer): Pointer; stdcall; function Realloc(P: Pointer; Size: Integer): Pointer; stdcall; procedure Free(P: Pointer); stdcall; function GetSize(P: Pointer): Integer; stdcall; function DidAlloc(P: Pointer): Integer; stdcall; procedure HeapMinimize; stdcall; end; is //Is关键字用于对象的判断, 有某些情况下, 也可以作"As"使用. var Comp: TComponent; begin ... if Comp Is TEdit then (Comp as TEdit).Text := 'Edit'; end; label //label关键字用于声明行号标签, 以便用Goto进行转向, 不推荐使用. var a,b: Integer; label X,Y; begin if a > b then goto X else goto Y; X: WriteLn('a>b'); Y: WriteLn('b>a'); end; library //Library关键字用于指出一个工程为类库.类库编译后生成DLL文件, 可被其他程序调用. library Editors; uses EdInit, EdInOut, EdFormat, EdPrint; exports InitEditors, doneEditors name done, InsertText name Insert, DeleteSelection name Delete, FormatSelection, PrintSelection name Print, SetErrorHandler; begin InitLibrary; end. message //Message关键字用于声明消息方法, //带有Message的方法必须指出接收的消息类型, 并通过引用将消息传入方法中, 以便进行处理. procedure Refresh(var Msg: TMessageRecordtype); message ID_REFRESH; procedure Refresh(var Msg: TMessageRecordtype); begin if Chr(Msg.Code) = #13 then ... else inherited; end; //用户可以自定义消息, 自定义消息也能够被Message接收, 并引发事件. mod //Mod用于求两数之整数模, 即余数.用于Mod运算的两个数值必须均为整型, 其运算结果也为整型. var a,b,c: Integer; begin a := 20; b := 3; c := a mod b; {2} end; name //Name关键字用于指出方法的别名, //对于一个要被外部引用的方法, 建议用Name申请方法别名, 以避免外部程序改动方法的实体内容. //从外部引用一个方法时, 如果该方法有别名, 则必须用Name进行标识. function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer): Integer; stdcall; external 'user32.dll' name 'MessageBoxA'; near //Near标明了函数调用协定, 指出函数可以被本地调用. //其他程序可以用dll的形式调用程序内的函数.它是向下兼容的. function Add(a,b: Integer): Integer; near; //如果这个程序被编译为Demo.exe, 并且另一个处于本地的程序需要调用这个函数, 可以使用以下语句: function Add(a,b: Integer): Integer; stdcall; external 'Demo.exe'; nil //Nil用于表示一个空指针, 或是没有实例的对象. while Node <> nil do begin ListBox1.Items.Add(Node.Text); Node := Node.GetNext; end; nodefault //NoDefault关键字指出了一个属性不允许有默认值, 这通常用在继承中. type TClassA = class private fValue: Integer; published property Value: Integer read fValue write fValue default 0; end; TClassB = class(TClassA) published property Value:Integer read fValue write fValue nodefault; end; //由上例可知, TClassA中的Value有默认值0, //TClassB继承了TClassA, 所以也继承了其默认值, 在此用NoDefault去掉默认值 not //Not用于取反, 它否定了原先的结果.例如: if a > b then //可以写成: if not(a < b) then //Not关键字通常用于切换Boolean型的属性 procedure Button1Click(Sender: TObject); begin StatusBar1.Visible := not StatusBar1.Visible; end; object //Object用于声明一个对象, 这个对象可以是任意的, 并且向下兼容.Object只能被Object所继承. //声明对象的方法与声明类的方法是相同的. type ODemoA = object end; ODemoB = object(ODemoA) end; //Object关键字还用于声明动态函数或过程, 例如: type TMyFun = function(i: Integer): Integer of Object; TMyProc = procedure(s: string) of object; //经过object声明的函数或过程可以被动态的绑定到指定的函数体, 或是绑定到控件是事件中. of //Of关键用于和其他关键字构成指定的结构.Of可以与Case, Class, Array, File, Set, Object连用. //Case语句: case Tag Of 0: Result := 'a'; 1: Result := 'b'; end; //Class语句: type TDemo = class of TComponent; //Array结构: var MyInt: array of Integer; //File结构: var MyFile: file of Byte; //Set语句: type TCol = (cA,cB,cC); TCols = set of TCol; //Object结构: type MyFun = function(I: Integer): Integer of Object; on //On关键字用于异常处理, 指出发生的异常, 并获取异常信息. try i := StrToInt(s); except on E: exception do ShowMessage(E.Message); end; or //一、表示逻辑或 if (a>0) or (b>0) then //二、表示位运算 var a,b,c: Integer; begin c := (a or b); end; //使用Or表示逻辑时, Or左右的表达式必须用小括号括起, 以避免以生条件的 冲突 //如果在条件语句中使用 Or, 则编辑器不知道用户使用Or做什么 例如: if a>0 or b>0 then //编译器可能会理解为: if a>(0 or b)>0 then //或者 if (a>0) or (b>0) then //但是实际编译时, 编译器会产生一个冲突, 报告错误 //并且第一种可能包含了a>b>c的形式, 这在Delphi中不被支持 //所以使用Or运算符时必须使用括号, 以区分左右的条件. //表示位运算时也必须加上括号, 将Or以及左右参数括起. out //Out关键字说明了方法参数的输出方式, 一般的函数只能有一个返回值, //使用Out可以在一个函数中返回多个结果. //Out和var不同, Out是以返回值的形式进行参数返回, 而var是直接输入一个参数的地址. procedure X(out i: Integer; out s: string); begin i := i * 2; s := s + 'abc'; end; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; s: string; begin i := 20; s := 'xxx'; X(i,s); end; overload //Overload关键字指出了用于重载的方法, 重载即方法名相同, //但是参数数量, 类型或顺序不同, 满足此条件的构成重载. function X(i: Integer): string; overload; function X(s: string): string; overload; //从父类继承时, 如果子类拥有和父类相同的方法, 则也必须用overload构成重载, //但是此类重载也必须满足重载的要求. type TDemo = class(TComponent) public procedure CreateWnd(AOwner: TWinControl); overload; end; //如上例, 子类拥有的方法为: procedure CreateWnd; {继承自父类} procedure CreateWnd(AOwner: TWinControl); {子类声明} //共两个CreateWnd方法. //如果不使用重载, 则在子类中可以覆盖父类的方法. override //Override用于覆盖一个Virtual或是Dynamic形式的方法. //覆盖时必须沿用被覆盖方法的声明, 并且不允许修改原方法的参数和返回类型. procedure Create(AOwner: TComponent); override; //Override多用于继承, 用子类覆盖掉父类的方法. type TClassA = class procedure X; virtual; //父类的方法 end; TClassB = class(TClassA) procedure X; override; //子类的方法 end; //如上例, 子类拥有的方法为: procedure X; {从父类覆盖} //父类拥有的方法为: procedure X; {父类自身方法, 未被覆盖} //如果父类的方法未用Virtual或Dynamic声明, //或是有修改参数的需要, 则必须用Reintroduce关键字进行覆盖. package //Package关键字用于指出一个工程为控件库. //控件库编译后生成BPL文件, 可被安装到Delphi的控件库中, 从而在以后的开发中使用控件. package DATAX; requires rtl, clx; contains MyUnit in 'C:\MyProject\MyUnit.pas'; end. packed //Packed关键字用于对结构体记录或数组进行打包, 打包后被打包对象的体积能显著减小. type TPerson = packed Record PName: string[32]; PAge: Integer; end; MyArray: packed array of PChar; pascal //Pascal标明了函数调用协定, //指出函数在调用时遵循Pascal原因, 即先对所有的变量进行初始化, //避免因异步线程调用而产生的错误.它是向下兼容的. function X(i: Integer): Integer; Pascal; begin Result := i * 2; end; private //Private标明了类内元素的访问区分权限, 被Private区分的元素只能被本类内部访问. procedure //Procedure用于声明过程 procedure X(i: Integer); //它也可以用于动态函数的声明 type TProc = procedure(i: Integer) of object; //动态声明时, 不需要指出过程名, 只需要指出参数就可以, 具体的过程名可以在后期绑定. program //Program关键字用于指出一个工程为应用程序.控件库编译后生成exe文件, 可以直接执行 program Project1; uses Forms, Unit1 in 'Unit1.pas' ; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. property //Property关键字用于声明属性, 属性分为显式属性和隐式属性两种, //只有声明在published访问区分符下的属性才是显式属性, 可以直接在对象查看器中查看. type TDemo = class Private fValue: Integr; Published property Value: Integer read fValue write fValue; end; //事件也是属性的一种, 可以在published区分符下用Property进行声明 type TOnTextChange=procedure (Sender: TObject) of object; TDemo = class private fEvent: TOnTexChange; published property OntextChange: TOnTextChange read fEvent write fEvent; end; protected //Protected标明了类内元素的访问区分权限, 被Protected区分的元素只能被本类内部和其子类访问. public //Public标明了类内元素的访问区分权限, 被Public区分的元素能够被类内和类外任何对象访问. published //Published标明了类内元素的访问区分权限. //被Published区分的元素能够被类内和类外任何RTTI对象访问 //只在声明在Published区分符下的属性才能够成为显式属性并在对象查看器中显示. raise //Raise语句用于抛出异常, //如果希望通过外部程序处理异常, 或是在异常发生时重新将异常抛出, 可以使用Raise语句. function GetString(i: Integer): string; begin if i < 0 then raise exception.Create('Integer Cannot smaller than 0'); Result := IntToStr(i); end; //在异常处理中, 可以重新抛出异常 try i := StrToInt(s); except on E: exception do raise exception.Create(E.Message); end; read //Read用于标识属性中读取所使用的成员或方法. private fValue: Integer; published property Value: Integer read fValue; //上例中即表明Value属性的值从fValue成员上读取. readonly //ReadOnly关键字用于标识一个对象是否只读. property ReadOnly; //当ReadOnly设为True时, 不允许用户手动修改属性, 只能通过其他对象来操作. record //Record关键字用于声明一个结构体记录, //一个结构体可以视为一个不需要实例化的对象, 拥有自己的成员. type TPerson = record PName: string[32]; PAge: Integer; end; register //Register标明了函数调用协定, 指出函数在被调用时可以在注册表内留下记录.它是向下兼容的. function Add(a,b: Integer): Integer; Register; Register //关键字还用于向控件库或是IDE注册控件或是专家工具. procedure Register; begin RegisterComponents('Sample', [TDemo]); end; reintroduce //Reintroduce用于重新发布方法, 通常用于继承时, //如果要覆盖的方法是静态方法, 或是需要修改方法的参数等, 必须用Reintroduce进行重发布. //对于Virtual或Dynamic方法, 可以直接用Override进行覆盖. type TClassA = class procedure X; end; TClassB = class(TClassA) procedure X; reintroduce; end; TClassC = class(TClassB) procedure X(i: Integer); reintroduce; end; repeat //repeat关键字用于引出repeat循环结构, //该循环必须先执行一次循环体, 然后再对循环条件进行判断.repeat必须与Until关键字联合使用. i := 0; repeat sum := sum + i; Inc(i); until(i >= 100); requires //Requires关键字指出了编译Package时的必备条件.若Requires的条件未满足, 则不允许编译包. package DATAX; requires rtl, clx; end. resourcestring //ResourceString用于声明资源字符串, 资源字符串可以在被声明的结构内使用. ResourceString CreateError = 'Cannot create file %s'; OpenError = 'Cannot open file %s'; LineTooLong = 'Line too long'; ProductName = 'Borland Rocks'; SomeResourceString = SomeTrueConstant; safecall //Safecall是函数调用协定的一种, 它规定了被COM调用的函数所必须遵守和规则. //在编译时, Safecall声明的函数被编译成COM接口兼容的. procedure X(s: WideString); safecall; //在编译后成为: procedure X(s: PAnsiString); set //Set关键字用于声明集合类, 集合类允许用集合运算符, 如in等进行操作. type TCol = (cA,cB,cC); TCols = set of TCol; //操作时允许使用加减符号来添加或删除某个集合元素 var Cols: Tcols; begin Cols := Cols + [cA,cB]; end; shl //SHL表示向左移位, 左移的位数即乘以2的幂数 var x: Integer; begin X := 2 shl 3; {16} end; shr //SHR表示向右移位, 右移的位数即除以2的幂数 var x: Integer; begin X := 16 shr 2; {4} end; stdcall //Stdcall是函数调用协定的一种, 它规定了能让程序调用的函数所应遵守的规 则. //Stdcall关键字必须在主调方和被调方之间形成配对. //例如, 被调方函数: Library Demo; function X(i: Integer): Integer; stdcall; begin Result := i * 2; end; exports X; begin end. //主调方函数: function X(i: Integer): Integer; stdcall; external 'Demo.dll'; //同时需要注意, 使用Stdcall关键字时, 被调函数是大小写敏感的, 此处极容易出错. stored //Stored用于指出一个属性的值是否能被保留, 若指定了True, 则允许对属性值进行赋值撤销的操作. property Value: string read fValue write fValue stored True; string //String是一个数据类型, 它代表了字符串. var Str: string; then //Then关键字用于If语句中, 当If条件成立时, 执行Then后的语句. var a,b: Integer; begin if a > b then WriteLn('a') else WriteLn('b'); end; threadvar //Threadvar标识了一个随线程启动而创建的变量, //如果用Threadvar声明变量, 则在程序结束前必须手动释放其占用的空间. threadvar S: AnsiString; S := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; S := ''; //S := ''; 即释放变量S所占用的内存. to //To关键字用于For语句, 指明循环变量是递增的. for i := 10 to 100 do ListBox1.Items.Add(IntToStr(i)); //在For语句中, 循环变量递增用To关键字, 递减用DownTo关键字. try //try语句用于异常处理, 对于有可能发生异常的语句, 可以放在try结构下, 以便对其进行异常保护. try i := StrToInt(s); except ShowMessage('Error'); end; type //Type关键字用于声明各种对象, 用Type关键字声明的对象, 在传递时按引用传递. type TDemo = class end; //type也用来声明枚举类型或是按引用传递的变量. type TCol = (cA,cB,cC); TInt = Integer; unit //Unit标识了单元的开头, 单元的基本结构为 Unit...Interface...implementation...end. Unit Unit1; Interface uses Classes; implementation end. //一个完整的单元必须拥有Unit作为开头. until //Until关键字用于判断repeat循环结构的循环条件, //如果循环条件为真, 则退出循环.Until必须与repeat关键字联合使用. i := 0; repeat sum := sum + i; Inc(i); until(i >= 100); uses //Uses用于引用一个外部的单元, 并且能够使用该单元中的公共部分. //Uses语句通常放在一个单元的接口或是实现部分. 学习视频网 Interface uses Classes; Implemention uses frmAbout; var //var关键字用于声明一个变量或是对象, 用var声明的变量接值传递. var i: Integer; s: string; //var也可以用于标识按引用传递的方法参数 function X(var i: Integer): Integer; //上述函数中的参数i即按引用传递, 它的值可以在函数执行时被改变, 并返回主调函数. varargs //varArgs标识了引用参数, 它必须和Cdecl关键字联用, 表明允许调用的函数使用引用传递. 好购物网:(Format: PChar): Integer; cdecl; varargs; //上述代码从C++的类库中引用了Printf函数, 并允许按引用的方式传入参数. virtual //Virtual用于声明一个虚方法, //虚方法可以被覆盖, 并且可以使程序运行速度尽可能的快(区别于Dynamic). procedure X(i: Integer); virtual; while //While关键字用于引出While循环语句, 循环前先进行循环条件的判断, 如果条件为真则执行循环. i := 0; while i < 100 do begin sum := sum + i; Inc(i); end; with //With关键字用于将相同的对象集合起来处理, 它可以省去输入大量重复的代码, 使代码看上去比较精简. 淘宝网金冠店铺大全: with Form1.Memo1.Lines do begin Clear; Append('abc'); Append('def'); SaveToFile('C:\demo.txt'); end; //上面这段代码如果不使用With语句, 则显得非常冗余复制内容到剪贴板代码: Form1.Memo1.Lines.Clear; Form1.Memo1.Lines.Append('abc'); Form1.Memo1.Lines.Append('def'); Form1.Memo1.Lines.SaveToFile('C:\demo.txt'); write //Write用于标识属性中写入所使用的成员或方法. private fValue: Integer; published property Value: Integer write fValue; //上例中即表明Value属性的值写入到fValue成员上. 旅游门票预定网: writeonly //writeonly关键字用于标识一个对象是否只写. property writeonly; //当writeonly设为True时, 不允许用户读取属性, 只能通过其他对象来操作. xor //Xor用于取异或, 当两个操作数相等时, 返回False, 不等时返回True. var a,b: Integer; begin a := 2; b := 3; if a xor b then WriteLn('a xor b') else WriteLn('a not xor b'); end; //Xor也用于计算异或值 学习视频网 WriteLn(IntToStr(3 xor 5)); {6} Delphi常用代码汇总2008-06-16 11:33 ?[DELPHI]产生鼠标拖动效果 通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL: var xpanel,ypanel,xlabel,ylabel:integer; PANEL的MouseMove事件:xpanel:=x;ypanel:=y; PANEL的DragOver事件:xpanel:=x;ypanel:=y; LABEL的MouseMove事件:xlabel:=x;ylabel:=y; LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel; ?[DELPHI]取得WINDOWS目录 uses shellapi; getwindowsdirectory(windir,sizeof(windir)); 或者从注册表中读取,位置: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion SystemRoot键,取得如:C:\WINDOWS trunc() ?[DELPHI]关于文件、目录操作 Chdir('c:\abcdir');转到目录 Mkdir('dirname');建立目录 Rmdir('dirname');删除目录 GetCurrentDir;//取当前目录名,无'\' Getdir(0,s);//取工作目录名s:='c:\abcdir'; Deletfile('abc.txt');//删除文件 Renamefile('old.txt','new.txt');//文件更名 ExtractFilename(filelistbox1.filename);//取文件名 ExtractFileExt(filelistbox1.filename);//取文件后缀 ?[DELPHI]处理文件属性 attr:=filegetattr(filelistbox1.filename); if (attr and faReadonly)=faReadonly then ... //只读 if (attr and faSysfile)=faSysfile then ... //系统 if (attr and faArchive)=faArchive then ... //存档 if (attr and faHidden)=faHidden then ... //隐藏 ?[DELPHI]执行程序外文件 WINEXEC//调用可执行文件 winexec('command.com /c copy *.* c:\',SW_Normal); winexec('start abc.txt'); ShellExecute或ShellExecuteEx//启动文件关联程序 function executefile(const filename,params,defaultDir:string;showCmd:integer):THandle; ExecuteFile('C:\abc\a.txt','x.abc','c:\abc\',0); ExecuteFile('','','',0); ExecuteFile('mailto:tingweb@wx88.net','','',0); ?[DELPHI]取得系统运行的进程名 var hCurrentWindow:HWnd;szText:array[0..254] of char; begin hCurrentWindow:=Getwindow(handle,GW_HWndFrist); while hCurrentWindow <> 0 do begin if Getwindowtext(hcurrnetwindow,@sztext,255)>0 then listbox1.items.add(strpas(@sztext)); hCurrentWindow:=Getwindow(hCurrentwindow,GW_HWndNext); end; end; ?[DELPHI]关于汇编的嵌入 Asm End; 可以任意修改EAX、ECX、EDX;不能修改ESI、EDI、ESP、EBP、EBX。 ?[DELPHI]关于类型转换函数 FloatToStr//浮点转字符串 FloatToStrF//带格式的浮点转字符串 IntToHex//整数转16进制 TimeToStr DateToStr DateTimeToStr FmtStr//按指定格式输出字符串 formatDateTime('YYYY-MM-DD,hh-mm-ss',DATE); ?[DELPHI]字符串的过程和函数 Insert(obj,target,pos); //字符串target插入在pos的位置。如插入结果大于target最大长度,多出字符将被截掉。如Pos在255以外,会产生运行错。例如,st:='Brian',则Insert('OK',st,2)会使st变为'BrOKian'。 Delete(st,pos,Num); //从st串中的pos(整型)位置开始删去个数为Num(整型)个字符的子字串。例如,st:='Brian',则Delete(st,3,2)将变为Brn。 Str(value,st); //将数值value(整型或实型)转换成字符串放在st中。例如,a=2.5E4时,则str(a:10,st)将使st的值为' 25000'。 Val(st,var,code); //把字符串表达式st转换为对应整型或实型数值,存放在var中。St必须是一个表示数值的字符串,并符合数值常数的规则。在转换过程中,如果没有检测出错误,变量code置为0,否则置为第一个出错字符的位置。例如,st:=25.4E3,x是一个实型变量,则val(st,x,code)将使X值为25400,code值为0。 Copy(st,pos,num); //返回st串中一个位置pos(整型)处开始的,含有num(整型)个字符的子串。如果pos大于st字符串的长度,那就会返回一个空串,如果pos在255以外,会引起运行错误。例如,st:='Brian',则Copy(st,2,2)返回'ri'。 Concat(st1,st2,st3„„,stn); //把所有自变量表示出的字符串按所给出的顺序连接起来,并返回连接后的值。如果结果的长度255,将产生运行错误。例如,st1:='Brian',st2:=' ',st3:='Wilfred',则Concat(st1,st2,st3)返回'Brian Wilfred'。 Length(st); //返回字符串表达式st的长度。例如,st:='Brian',则Length(st)返回值为5。 Pos(obj,target); //返回字符串obj在目标字符串target的第一次出现的位置,如果target没有匹配的串,Pos函数的返回值为0。例如,target:='Brian Wilfred',则Pos('Wil',target)的返回值是7,Pos('hurbet',target)的返回值是0。 ?[DELPHI]关于处理注册表 uses Registry; var reg:Tregistry; reg:=Tregistry.create; reg.rootkey:='HKey_Current_User'; reg.openkey('Control Panel\Desktop',false); reg.WriteString('Title Wallpaper','0'); reg.writeString('Wallpaper',filelistbox1.filename); reg.closereg; reg.free; ?[DELPHI]关于键盘常量名 VK_BACK/VK_TAB/VK_RETURN/VK_SHIFT/VK_CONTROL/VK_MENU/VK_PAUSE/VK _ESCAPE /VK_SPACE/VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN F1--F12:$70(112)--$7B(123) A-Z:$41(65)--$5A(90) 0-9:$30(48)--$39(57) ?[DELPHI]初步判断程序母语 DELPHI软件的DOS提示:This Program Must Be Run Under Win32. VC++软件的DOS提示:This Program Cannot Be Run In DOS Mode. ?[DELPHI]操作Cookie response.cookies("name").domain:=''; with response.cookies.add do begin name:='username'; value:='username'; end ?[DELPHI]增加到文档菜单连接 uses shellapi,shlOBJ; shAddToRecentDocs(shArd_path,pchar(filepath));//增加连接 shAddToRecentDocs(shArd_path,nil);//清空 ?[DELPHI]判断鼠标按键 if GetAsyncKeyState(VK_L(M,R)Button)<>0 then ... //左键 ?[DELPHI]设置窗体的最大显示 onformCreate事件 self.width:=screen.width; self.height:=screen.height; ?[DELPHI]按键接受消息 OnCreate事件中处理:Application.OnMessage:=MyOnMessage; procedure Tform1.MyOnMessage(var MSG:TMSG;var Handle:Boolean); begin if msg.message=256 then ... //ANY键 if msg.message=112 then ... //F1 if msg.message=113 then ... //F2 end; ?[杂类]隐藏共享文件夹 共享效果:可访问,但不可见(在资源管理、网络邻居中) 取共享名为:direction$ 访问://computer/dirction/ ?[Java Script]Java Script网页常用效果 网页60秒定时关闭 关闭窗口 关闭 定时转URL 设为首页 设为首页 收藏本站 收藏本站 加入频道 加入频道 ?[DELPHI]随机产生文本色 randomize;//随机种子 memo1.font.color:=rgb(random(255),random(255),random(255)); ?[DELPHI]文件名的非法字符过滤 for i:=1 to length(s) do if s[i] in ['\','/',':','*','?','<','>','|'] then ?[DELPHI]转换函数的定义及说明 datetimetofiledate (datetime:Tdatetime):longint; 将Tdatetime格式的日期时间值转换成DOS格式的日期时间值 datetimetostr (datetime:Tdatetime):string; 将Tdatatime格式变量转换成字符串,如果datetime参数不包含日期值,返回字符串日期显示成为00/00/00,如果datetime参数中没有时间值,返回字符串中的时间部分显示成为00:00:00 AM datetimetostring (var result string; const format:string; datetime:Tdatetime); 根据给定的格式字符串转换时间和日期值,result为结果字符串,format为转换格式字符串,datetime为日期时间值 datetostr (date:Tdatetime) 使用shortdateformat全局变量定义的格式字符串将date参数转换成对应的字符串 floattodecimal (var result:Tfloatrec;value: extended;precision,decimals: integer); 将浮点数转换成十进制表示 floattostr (value:extended):string 将浮点数value转换成字符串格式,该转换使用普通数字格式,转换的有效位数为15位。 floattotext (buffer:pchar;value:extended; format:Tfloatformat;precision, digits:integer):integer; 用给定的格式、精度和小数将浮点值value转换成十进制表示形式,转换结果存放于buffer参数中,函数返回值为存储到buffer中的字符位数,buffer是非0结果的字符串缓冲区。 floattotextfmt (buffer:pchar;value:extended; format:pchar):integer 用给定的格式将浮点值value转换成十进制表示形式,转换结果存放于buffer参数中,函数返回值为存储到buffer中的字符位数。 inttohex (value:longint;digits:integer): string; 将给定的数值value转换成十六进制的字符串。参数digits给出转换结果字符串包含的数字位数。 inttostr (value:longint):string 将整数转换成十进制形式字符串 strtodate (const S:string):Tdatetime 将字符串转换成日期值,S必须包含一个合法的格式日期的字符串。 strtodatetime (const S:string):Tdatetime 将字符串S转换成日期时间格式,S必须具有MM/DD/YY HH:MM:SS[AM|PM]格式,其中日期和时间分隔符与系统时期时间常量设置相关。如果没有指定AM或PM信息,表示使用24小时制。 strtofloat (const S:string):extended; 将给定的字符串转换成浮点数,字符串具有如下格式: [+|-]nnn…[.]nnn…[<+|-><+|->nnnn] strtoint (const S:string):longint 将数字字符串转换成整数,字符串可以是十进制或十六进制格式,如果字符串不是一个合法的数字字符串,系统发生ECONVERTERROR异常 strtointdef (const S:string;default: longint):longint; 将字符串S转换成数字,如果不能将S转换成数字,strtointdef函数返回参数default的值。 strtotime (const S:string):Tdatetime 将字符串S转换成TDATETIME值,S具有HH:MM:SS[AM|PM]格式,实际的格式与系统的时间相关的全局变量有关。 timetostr (time:Tdatetime):string; 将参数TIME转换成字符串。转换结果字符串的格式与系统的时间相关常量的设置有关。 ?[DELPHI]程序不出现在ALT+CTRL+DEL 在implementation后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 RegisterServiceProcess(GetCurrentProcessID, 0);//显示 用ALT+DEL+CTRL看不见 ?[DELPHI]程序不出现在任务栏 uses windows var Extendedstyle : Integer; begin Application.Initialize; //============================================================== Extendedstyle := GetWindowLong (Application.Handle, GWL_EXstyle); SetWindowLong(Application.Handle, GWL_EXstyle, Extendedstyle OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW); //=============================================================== Application.Createform(Tform1, form1); Application.Run; end. ?[DELPHI]如何判断拨号网络是开还是关 if GetSystemMetrics(SM_NETWORK) AND $01 = $01 then showmessage('在线!') else showmessage('不在线!'); ?[DELPHI]实现IP到域名的转换 function GetDomainName(Ip:string):string; var pH:PHostent; data:twsadata; ii:dword; begin WSAStartup($101, Data); ii:=inet_addr(pchar(ip)); pH:=gethostbyaddr(@ii,sizeof(ii),PF_INET); if (ph<>nil) then result:=pH.h_name else result:=''; WSACleanup; end; ?[DELPHI]处理“右键菜单”方法 var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey:=HKEY_CLASSES_ROOT; reg.OpenKey('*\shell\check\command', true); reg.WriteString('', '"' + application.ExeName + '" "%1"'); reg.CloseKey; reg.OpenKey('*\shell\diary', false); reg.WriteString('', '操作(&C)'); reg.CloseKey; reg.Free; showmessage('DONE!'); end; ?[DELPHI]发送虚拟键值ctrl V procedure sendpaste; begin keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), 0, 0); keybd_event(ord('V'), MapVirtualKey(ord('V'), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); end; ?[DELPHI]当前的光驱的盘符 procedure getcdrom(var cd:char); var str:string; drivers:integer; driver:char; i,temp:integer; begin drivers:=getlogicaldrives; temp:=(1 and drivers); for i:=0 to 26 do begin if temp=1 then begin driver:=char(i+integer('a')); str:=driver+':'; if getdrivetype(pchar(str))=drive_cdrom then begin cd:=driver; exit; end; end; drivers:=(drivers shr 1); temp:=(1 and drivers); end; end; ?[DELPHI]字符的加密与解密 function cryptstr(const s:string; stype: dword):string; var i: integer; fkey: integer; begin result:=''; case stype of 0: setpass; begin randomize; fkey := random($ff); for i:=1 to length(s) do result := result+chr( ord(s[i]) xor i xor fkey); result := result + char(fkey); end; 1: getpass begin fkey := ord(s[length(s)]); for i:=1 to length(s) - 1 do result := result+chr( ord(s[i]) xor i xor fkey); end; end; ??[DELPHI]向其他应用程序发送模拟键 var h: THandle; begin h := FindWindow(nil, '应用程序标题'); PostMessage(h, WM_KEYDOWN, VK_F9, 0);//发送F9键 end; ??[DELPHI]DELPHI 支持的DAO数据格式 td.Fields.Append(td.CreateField ('dbBoolean',dbBoolean,0)); td.Fields.Append(td.CreateField ('dbByte',dbByte,0)); td.Fields.Append(td.CreateField ('dbInteger',dbInteger,0)); td.Fields.Append(td.CreateField ('dbLong',dbLong,0)); td.Fields.Append(td.CreateField ('dbCurrency',dbCurrency,0)); td.Fields.Append(td.CreateField ('dbSingle',dbSingle,0)); td.Fields.Append(td.CreateField ('dbDouble',dbDouble,0)); td.Fields.Append(td.CreateField ('dbDate',dbDate,0)); td.Fields.Append(td.CreateField ('dbBinary',dbBinary,0)); td.Fields.Append(td.CreateField ('dbText',dbText,0)); td.Fields.Append(td.CreateField ('dbLongBinary',dbLongBinary,0)); td.Fields.Append(td.CreateField ('dbMemo',dbMemo,0)); td.Fields['ID'].Set_Attributes(dbAutoIncrField);//自增字段 ??[DELPHI]DELPHI配置MS SQL 7和BDE步骤 第一步,配置ODBC: 先在ODBC 中设数据源,安装过SQL Server7.0 后,ODBC中有一项"系统DSN"应该有两项 数据源,一个是MQIS,一个是LocalSever,任选一个选后点击配置按钮,不知你的SQL7.0 是不是安装在本地机器上,如果是的话直接进行下一步,如果不是,在服务器一栏中填上 Server,然后进行下一步,填写登录ID 和密码(登录ID,和密码是在SQL7.0中的用户选项 中设的)。 第二步,配置BDE: 打开Delphi的BDE,然后点击MQIS 或 LocalServer,就会提示用户名和密码,这和 ODBC的用户名和密码是一样的,填上就行了。 第三步,配置程序: 如果用的是TTable,就在TTable的DatabaseName中选择MQIS 或LocalServer,然后在 TableName中选择Sale就行了,然后将Active改为True,Delphi弹出提示对话,填入用户 名和密码。 如果用的是TQuery,在TQuery上点击右键,再击"SQL Builder",这是以界面方式配置 SQL语句,或者在TQuery的SQL中填入SQL语句。最后,别忘了将Active改为True。 在运行也可能配置TQuery,具体见Delphi帮助。 ??[DELPHI]得到图像上某一点的RGB值 procedure Tform1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var red,green,blue:byte ; i:integer; begin i:= image1.Canvas.Pixels[x,y]; Blue:= GetBvalue(i); Green:= GetGvalue(i): Red:= GetRvalue(i); Label1.Caption:=inttostr(Red); Label2.Caption:=inttostr(Green); Label3.Caption:=inttostr(Blue);end; ??[DELPHI]关于日期格式分解转换 var year,month,day:word;now2:Tdatatime; now2:=date(); decodedate(now2,year,month,day); lable1.Text :=inttostr(year)+'年'+inttostr(month)+'月'+inttostr(day)+'日'; ?[DELPHI]如何判断当前网络连接方式 判断结果是MODEM、局域网或是代理服务器方式。 uses wininet; Function ConnectionKind :boolean; var flags: dword; begin Result := InternetGetConnectedState(@flags, 0); if Result then begin if (flags and INTERNET_CONNECTION_MODEM) = INTERNET_CONNECTION_MODEM then begin showmessage('Modem'); end; if (flags and INTERNET_CONNECTION_LAN) = INTERNET_CONNECTION_LAN then begin showmessage('LAN'); end; if (flags and INTERNET_CONNECTION_PROXY) = INTERNET_CONNECTION_PROXY then begin showmessage('Proxy'); end; if (flags and INTERNET_CONNECTION_MODEM_BUSY)=INTERNET_CONNECTION_MODEM_BUS Y then begin showmessage('Modem Busy'); end; end; end; ?[DELPHI]如何判断字符串是否是有效EMAIL地址 function IsEMail(EMail: String): Boolean; var s: String;ETpos: Integer; begin ETpos:= pos('@', EMail); if ETpos > 1 then begin s:= copy(EMail,ETpos+1,Length(EMail)); if (pos('.', s) > 1) and (pos('.', s) < length(s)) then Result:= true else Result:= false; end else Result:= false; end; ?[DELPHI]判断系统是否连接INTERNET 需要引入URL.DLL中的InetIsOffline函数。 函数申明为: function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL'; 然后就可以调用函数判断系统是否连接到INTERNET if InetIsOffline(0) then ShowMessage('not connected!') else ShowMessage('connected!'); 该函数返回TRUE如果本地系统没有连接到INTERNET。 附: 大多数装有IE或OFFICE97的系统都有此DLL可供调用。 InetIsOffline BOOL InetIsOffline( DWORD dwFlags, ); ?[DELPHI]简单地播放和暂停WAV文件 uses mmsystem; function PlayWav(const FileName: string): Boolean; begin Result := PlaySound(PChar(FileName), 0, SND_ASYNC); end; procedure StopWav; var buffer: array[0..2] of char; begin buffer[0] := #0; PlaySound(Buffer, 0, SND_PURGE); end; ?[DELPHI]取机器BIOS信息 with Memo1.Lines do begin Add('MainBoardBiosName:'+^I+string(Pchar(Ptr($FE061)))); Add('MainBoardBiosCopyRight:'+^I+string(Pchar(Ptr($FE091)))); Add('MainBoardBiosDate:'+^I+string(Pchar(Ptr($FFFF5)))); Add('MainBoardBiosSerialNo:'+^I+string(Pchar(Ptr($FEC71)))); end; ?[DELPHI]网络下载文件 uses UrlMon; function DownloadFile(Source, Dest: string): Boolean; begin try Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0; except Result := False; end; end; if DownloadFile(', 'c:\kylix.zip') then ShowMessage('Download succesful') else ShowMessage('Download unsuccesful') ?[DELPHI]解析服务器IP地址 uses winsock function IPAddrToName(IPAddr : String): String; var SockAddrIn: TSockAddrIn; HostEnt: PHostEnt; WSAData: TWSAData; begin WSAStartup($101, WSAData); SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr)); HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET); if HostEnt<>nil then result:=StrPas(Hostent^.h_name) else result:=''; end; ?[DELPHI]取得快捷方式中的连接 function ExeFromLink(const linkname: string): string; var FDir, FName, ExeName: PChar; z: integer; begin ExeName:= StrAlloc(MAX_PATH); FName:= StrAlloc(MAX_PATH); FDir:= StrAlloc(MAX_PATH); StrPCopy(FName, ExtractFileName(linkname)); StrPCopy(FDir, ExtractFilePath(linkname)); z:= FindExecutable(FName, FDir, ExeName); if z > 32 then Result:= StrPas(ExeName) else Result:= ''; StrDispose(FDir); StrDispose(FName); StrDispose(ExeName); end; ?[DELPHI]控制TCombobox的自动完成 {'Sorted' property of the TCombobox to true } var lastKey: Word; //全局变量 //TCombobox的OnChange事件 procedure Tform1.AutoCompleteChange(Sender: TObject); var SearchStr: string; retVal: integer; begin SearchStr := (Sender as TCombobox).Text; if lastKey <> VK_BACK then // backspace: VK_BACK or $08 begin retVal := (Sender as TCombobox).Perform(CB_FINDSTRING, -1, LongInt(PChar(SearchStr))); if retVal > CB_Err then begin (Sender as TCombobox).ItemIndex := retVal; (Sender as TCombobox).SelStart := Length(SearchStr); (Sender as TCombobox).SelLength := (Length((Sender as TCombobox).Text) - Length(SearchStr)); end; // retVal > CB_Err end; // lastKey <> VK_BACK lastKey := 0; // reset lastKey end; //TCombobox的onKeyDown事件 procedure Tform1.AutoCompleteKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin lastKey := Key; end; ?[DELPHI]如何清空一个目录 function EmptyDirectory(TheDirectory :String ; Recursive : Boolean) : Boolean; var SearchRec : TSearchRec; Res : Integer; begin Result := False; TheDirectory := NormalDir(TheDirectory); Res := FindFirst(TheDirectory + '*.*', faAnyFile, SearchRec); try while Res = 0 do begin if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin if ((SearchRec.Attr and faDirectory) > 0) and Recursive then begin EmptyDirectory(TheDirectory + SearchRec.Name, True); RemoveDirectory(PChar(TheDirectory + SearchRec.Name)); end else begin DeleteFile(PChar(TheDirectory + SearchRec.Name)) end; end; Res := FindNext(SearchRec); end; Result := True; finally FindClose(SearchRec.FindHandle); end; end; ?[DELPHI]安装程序如何添加到Uninstall列表 操作注册表,如下: 1.在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall键 下建立一个主键,名称任意。 例 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyUni nstall 2.在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyUnis tall下键两个串值, 这两个串值的名称是特定的:DisplayName和UninstallString。 3.给串DisplayName赋值为显示在“删除应用程序列表”中的名称,如'Aiming Uninstall one'; 给串UninstallString赋值为执行的删除命令,如 C:\WIN97\uninst.exe -f"C:\TestPro\aimTest.isu" ?[DELPHI]截获WM_QUERYENDSESSION关机消息 type Tform1 = class(Tform) procedure WMQueryEndSession(var Message: TWMQueryEndSession); message WM_QUERYENDSESSION; procedure CMEraseBkgnd(var Message:TWMEraseBkgnd);Message WM_ERASEBKGND; private { Private declarations } public { Public declarations } end; procedure Tform1.WMQueryEndSession(var Message: TWMQueryEndSession); begin Showmessage('computer is about to shut down'); end; ?[DELPHI]获取网上邻居 procedure getnethood();//NT做服务器,WIN98上调试通过。 var a,i:integer; errcode:integer; netres:array[0..1023] of netresource; enumhandle:thandle; enumentries:dword; buffersize:dword; s:string; mylistitems:tlistitems; mylistitem:tlistitem; alldomain:tstrings; begin //listcomputer is a listview to list all computers;controlcenter is a form. alldomain:=tstringlist.Create ;with netres[0] do begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_ANY; dwdisplaytype :=RESOURCEDISPLAYTYPE_DOMAIN; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil; lpremotename :=nil; lpcomment :=nil; lpprovider :=nil; end; // 获取所有的域 errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUS AGE_CONTAINER,@netres[0],enumhandle); if errcode=NO_ERROR then begin enumentries:=1024; buffersize:=sizeof(netres); errcode:=wnetenumresource(enumhandle,enumentries,@netres[0],buffersize); end; a:=0; mylistitems :=controlcenter.lstcomputer.Items ; mylistitems.Clear ; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do begin alldomain.Add (netres[a].lpremotename); a:=a+1; end; wnetcloseenum(enumhandle); // 获取所有的计算机 mylistitems :=controlcenter.lstcomputer.Items ; mylistitems.Clear ; for i:=0 to alldomain.Count-1 do begin with netres[0] do begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_ANY; dwdisplaytype :=RESOURCEDISPLAYTYPE_SERVER; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil; lpremotename :=pchar(alldomain[i]); lpcomment :=nil; lpprovider :=nil; end; ErrCode:=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCE USAGE_CONTAINER,@netres[0],EnumHandle); if errcode=NO_ERROR then begin EnumEntries:=1024; BufferSize:=SizeOf(NetRes); ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize); end; a:=0; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do begin mylistitem :=mylistitems.Add ; mylistitem.ImageIndex :=0; mylistitem.Caption :=uppercase(stringreplace(string(NetRes[a].lpremotename),'\\','',[rfReplaceAll] )); a:=a+1; end; wnetcloseenum(enumhandle); end; end; ?[DELPHI]获取某一计算机上的共享目录 procedure getsharefolder(const computername:string); var errcode,a:integer; netres:array[0..1023] of netresource; enumhandle:thandle; enumentries,buffersize:dword; s:string; mylistitems:tlistitems; mylistitem:tlistitem; mystrings:tstringlist; begin with netres[0] do begin dwscope :=RESOURCE_GLOBALNET; dwtype :=RESOURCETYPE_DISK; dwdisplaytype :=RESOURCEDISPLAYTYPE_SHARE; dwusage :=RESOURCEUSAGE_CONTAINER; lplocalname :=nil; lpremotename :=pchar(computername); lpcomment :=nil; lpprovider :=nil; end; // 获取根结点 errcode:=wnetopenenum(RESOURCE_GLOBALNET,RESOURCETYPE_DISK,RESOURCEUS AGE_CONTAINER,@netres[0],enumhandle);if errcode=NO_ERROR then begin EnumEntries:=1024; BufferSize:=SizeOf(NetRes); ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize); end; wnetcloseenum(enumhandle); a:=0; mylistitems:=controlcenter.lstfile.Items ; mylistitems.Clear ; while (string(netres[a].lpprovider)<>'') and (errcode=NO_ERROR) do begin with mylistitems do begin mylistitem:=add; mylistitem.ImageIndex :=4; mylistitem.Caption :=extractfilename(netres[a].lpremotename); end; a:=a+1; end; end; ?[DELPHI]得到硬盘序列号 var SerialNum : pdword; a, b : dword; Buffer : array [0..255] of char; begin if GetVolumeInformation('c:\', Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then Label1.Caption := IntToStr(SerialNum^); end;
本文档为【[新版]delphi&#40;pascal&#41;的函数手册_编程必备】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_686908
暂无简介~
格式:doc
大小:174KB
软件:Word
页数:0
分类:生活休闲
上传时间:2018-09-28
浏览量:6