delphi自定义函数收集1
Delphi 常用API 函数
1.Delphi 常用API 函数
2.
3.AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小
4.AnyPopup 判断屏幕上是否存在任何弹出式窗口
5.ArrangeIconicWindows 排列一个父窗口的最小化子窗口
6.AttachThreadInput 连接线程输入函数
7.BeginDeferWindowPos 启动构建一系列新窗口位置的过程
8.BringWindowToTop 将指定的窗口带至窗口列表顶部
9.CascadeWindows 以层叠方式排列窗口
10.ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄
11.
12.ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标
13.CloseWindow 最小化指定的窗口
14.CopyRect 矩形内容复制
15.DeferWindowPos 该函数为特定的窗口指定一个新窗口位置
16.DestroyWindow 清除指定的窗口以及它的所有子窗口
17.DrawAnimatedRects 描绘一系列动态矩形
18.EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入
19.EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态
20.EnumChildWindows 为指定的父窗口枚举子窗口
21.
22.EnumThreadWindows 枚举与指定任务相关的窗口
23.EnumWindows 枚举窗口列表中的所有父窗口
Delphi常用字符串函数
一、字符转换函数1、ASCII()返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。2、CHAR()将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。3、LowerCase()和UpperCase()LowerCase()将字符串全部转为小写;UpperCase()将字符串全部转为大写。4、IntToStr()把数值型数据转换为字符型数据。STR ([,length[, ]])length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。当length 或者decimal 为负值时,返回NULL;当length 小于小数点左边(包括符号位)的位数时,返回length 个*;先服从length ,再取decimal ;当返回的字符串位数小于length ,左边补足空格。二、去空格函数1、TRIMLEFT() 把字符串头部的空格去掉。2、TRIMRIGHT() 把字符串尾部的空格去掉。三、取子串函数1、left() LEFT (, )返回character_expression 左起 integer_expression 个字符。2、RIGHT() RIGHT (, )返回character_expression 右起 integer_expression 个字符。3、SUBSTRING()SUBSTRING (, , length)返回从字符串左边第starting_ position 个字符起length个字符的部分。四、字符串比较函数1、CHARINDEX()返回字符串中某个指定的子串出现的开始位置。CHARINDEX (<’substring_expression’>, )其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。此函数不能用于TEXT 和IMAGE 数据类型。2、PATINDEX()返回字符串中某个指定的子串出现的开始位置。PATINDEX (<’%substring _expression%’>, )其中子串表达式前后必须有百分号“%”否则返回值为0。与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。(**** 转载敬请注明-本文出处:南山古桃(nsgtao)的百度空间:/nsgtao/ ****)五、字符串操作函数1、QUOTENAME()返回被特定字符括起来的字符串。QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。南山古桃 NSGTao 网址:/nsgtao2、REPLICATE()返回一个重复character_expression 指定次数的字符串。REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。3、REVERSE()将指定的字符串
delphi 位操作函数
delphi 位操作函数
Delphi 位操作函数
在Delphi编程中,位操作函数是一种非常重要且常用的函数,它们可以帮助我们对二进制数据进行各种位级别的操作。本文将为大家介绍几个常用的Delphi位操作函数及其使用方法。
一、位操作函数简介
位操作函数是一类用于处理位级数据的函数,它们可以对二进制数据的位进行读取、设置、清除和翻转等操作。在Delphi中,位操作函数主要包括以下几个:
1.1 TestBit函数
TestBit函数主要用于检查指定位置上的位是否为1。它的语法如下:
function TestBit(const Value: Integer; Bit: Integer): Boolean;
其中,Value是要检查的整数值,Bit是要检查的位的位置。该函数返回一个Boolean值,如果指定位置上的位为1,则返回True;否则返回False。
1.2 SetBit函数
SetBit函数用于将指定位置上的位设置为1。它的语法如下:
function SetBit(const Value: Integer; Bit: Integer): Integer;
其中,Value是要设置的整数值,Bit是要设置的位的位置。该函数返回一个新的整数值,其中指定位置上的位已被设置为1。
1.3 ClearBit函数
ClearBit函数用于将指定位置上的位清除为0。它的语法如下:
function ClearBit(const Value: Integer; Bit: Integer): Integer;
其中,Value是要清除的整数值,Bit是要清除的位的位置。该函数返回一个新的整数值,其中指定位置上的位已被清除为0。
Delphi自定义类中的“构造函数”与“析构函数”
Delphi⾃定义类中的“构造函数”与“析构函数”
1.重载构造函数overload关键字
eg:
constructor Create(Name:string;Sex:string;Year:integer;Tall:integer;Weight:integer);overload;
constructor Create(Name:string;Sex:string);overload;
ps: 重载构造函数,注意⼀定要使⽤关键字:overload
2.⾃定义类中是否需要显式定义构造函数:
所有类默认继承⾃TObject,即使没有声明class(TObject),Create实际是通知编译器为其分配⼀块堆内存.
在⾃定义类中,即使没有显式的定义构造函数,程序默认调⽤的是TObject的构造函数.
3.TObject.Free的真正作⽤:实际上只是为"堆内存块"解锁,使得其他程序可以使⽤该块堆内存,⽽引⽤并没有被
重置为nil,因此,经常Free之后,仍可以正确访问到对象的成员变量(解锁后,该块内存没有被其他程序使⽤)
4.⾃定义的类,什么时候需要专门定义析构函数?
⾃定义的类中,含有类成员.由于Free操作只是对当前对象的"堆内存块"进⾏了解锁,⽽类成员指向的另⼀块
"堆内存块" 并没有被解锁,如果不在析构函数中对其解锁,则会造成内存泄漏.
5.不需要程序员显⽰调⽤Free的⾃定义类?
对于从Tcomponent继承下来的对象,在Create的时候可以指定⼀个所有者。如果⼀个对象在创建时指
定了所有者,那么该对象的⽣存期将由所有者进⾏管理。所有者在析构时,会同时析构它所拥有的全部对象。
delphi 二元比较函数 -回复
delphi 二元比较函数-回复
Delphi 是一种高级、面向对象的编程语言,常用于构建Windows 平台下的应用程序。在Delphi 中,二元比较函数指的是用于比较两个值的函数,返回一个比较结果。
为了更好地理解和掌握Delphi 中的二元比较函数,本文将详细介绍其用法、常见的比较操作符、自定义的比较函数以及一些在实际开发中的使用案例。
首先,让我们来了解一下Delphi 中的二元比较函数的用法。Delphi 提供了一系列的比较操作符,包括相等(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)和不等于(<>)。这些操作符可以用于比较数值、字符串、日期等不同类型的数据。
比如,我们可以使用以下方式比较两个整数a 和b 的大小:
delphi
if a > b then
ShowMessage('a is greater than b')
else if a < b then
ShowMessage('a is less than b')
else
ShowMessage('a is equal to b');
在上面的例子中,如果a 的值大于b,则会弹出一个消息框显示"a is greater than b"。如果a 小于b,则会显示"a is less than b"。否则,显示"a is equal to b"。
除了使用比较操作符,我们还可以自定义比较函数来实现特定的比较逻辑。Delphi 提供了一个Compare 函数,用于比较两个值的大小。此函数接受两个参数,返回一个整型的比较结果。当第一个参数小于第二个参数时,返回一个负数;当两个参数相等时,返回0;当第一个参数大于第二个参数时,返回一个正数。
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;
Delphi常用字符串函数
Delphi常⽤字符串函数
⼀、字符转换函数
1、ord(input[i])
返回字符表达式 input 左端起第 I 字符的ASCII 码值。
2、CHAR()
将ASCII 码转换为字符。如果没有输⼊0 ~ 255 之间的ASCII 码值,CHAR()返回NULL 。
3、LOWER()和UPPER()
LOWER()将字符串全部转为⼩写;UPPER()将字符串全部转为⼤写。
4、STR()
把数值型数据转换为字符型数据。
STR (<float_expression>[,length[, <decimal>]])
length 指定返回的字符串的长度,decimal 指定返回的⼩数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length ⼩于⼩数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数⼩于length ,左边补⾜空格。
⼆、去空格函数
1、LTRIM() 把字符串头部的空格去掉。
2、RTRIM() 把字符串尾部的空格去掉。
三、取⼦串函数
1、left()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
2、RIGHT()
RIGHT (<character_expression>, <integer_expression>)
个人收集整理的常用DELPHI函数及说明
GetCurrentDir+'\'//返回当前程序的目录GetTickCount//返回系统启动的时间FileExists //判断文件是否存在GetActivewindow://返回当前窗口的句柄Quotedstr(str:string):string;//为传递进去的字符传两边加引号Assigned();//检测一个类是否存在LeadBytes//判断是否为汉字If S[i] IN LeadBytes ThenDebugHook//如果等于1表示当前是在调试,否则表示直接运行length(WideString('周'))//可以返回一个1,如果是直接length,那么汉字就返回2个SetLength(A, 1) 指定不定数组的大小;ExpandFileName('c:\windows\..')//返回上级目录ExtractRelativePath('c:\windows\','c:\windows\temp');//返回tempshl 左移shr 右移x := RoundTo(x,-2)Format('%.2f',[x]) //四舍五入,-2保留两位小数点Format('%.2f',[RoundTo(x,-2)])13 Enter key 20 CapsLock 10 Shift key 9 Tab key 8 Backspace key SameText(astr,bstr) //判断字符串,不区分大小写lowercase()大写转小写UpCase()小写转大写UpperCase()小写转大写[查找文件]FindFirst(文件名,查询的类型,一个保存查找到的变量,为TSearchRec类)下面为一个例子varsr : TSearchRec;begin //此处用faArchive为查找所有的文件 if FindFirst('E:\*.*',faArchive,sr) = 0 thenbeginrepeat //判断,如果为该文件为faArchive,既该文件为所有的文件而不是文件夹,则为真if (sr.Attr and faArchive) = sr.Attr thenlistbox1.Items.Add();until FindNext(sr) <> 0;FindClose(sr);end;end;下面为查询的类型faReadOnly $00000001 只读文件faHidden $00000002 隐藏文件faSysFile $00000004 系统文件faVolumeID $00000008 Volume ID filesfaDirectory $00000010 所有的文件夹faArchive $00000020 所有的文件faAnyFile $0000003F 所有文件,包括文件夹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 ... //隐藏function GetPYIndexChar( hzchar:string):char;//返回汉字的首字母begincase WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of$B0A1..$B0C4 : result := 'A';$B0C5..$B2C0 : result := 'B';$B2C1..$B4ED : result := 'C';$B4EE..$B6E9 : result := 'D';$B6EA..$B7A1 : result := 'E';$B7A2..$B8C0 : result := 'F';$B8C1..$B9FD : result := 'G';$B9FE..$BBF6 : result := 'H';$BBF7..$BFA5 : result := 'J';$BFA6..$C0AB : result := 'K';$C0AC..$C2E7 : result := 'L';$C2E8..$C4C2 : result := 'M';$C4C3..$C5B5 : result := 'N';$C5B6..$C5BD : result := 'O';$C5BE..$C6D9 : result := 'P';$C6DA..$C8BA : result := 'Q';$C8BB..$C8F5 : result := 'R';$C8F6..$CBF9 : result := 'S';$CBFA..$CDD9 : result := 'T';$CDDA..$CEF3 :
Delphi利用多线程进行数据采集详解
Delphi线程类及在数据采集中的应用
(一)Delphi中有一个线程类
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchronize的用法就完了。然而这并不是多线程编程的全部。
线程本质上是进程中一段并发运行的代码。一个进程至少有一个线程,即所谓的主线程。同时还可以有多个子线程。
当一个进程中用到超过一个线程时,就是所谓的“多线程”。
那么这个所谓的“一段代码”是如何定义的呢?其实就是一个函数或过程(对Delphi而言)。
如果用Windows API来创建线程的话,是通过一个叫做CreateThread的API 函数来实现的,它的定义为:
HANDLE CreateThread(
LPSECURITY_A TTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
其各参数如它们的名称所说,分别是:线程属性(用于在NT下进行线程的安全属性设置,在9X下无效),堆栈大小,起始地址,参数,创建标志(用于设置线程创建时的状态),线程ID,最后返回线程Handle。其中的起始地址就是线程函数的入口,直至线程函数结束,线程也就结束了。
Delphi常用字符串函数
Delphi常⽤字符串函数
⼀、字符转换函数
1、ord(input[i])
返回字符表达式 input 左端起第 I 字符的ASCII 码值。
2、CHAR()
将ASCII 码转换为字符。如果没有输⼊0 ~ 255 之间的ASCII 码值,CHAR()返回NULL 。
3、LOWER()和UPPER()
LOWER()将字符串全部转为⼩写;UPPER()将字符串全部转为⼤写。
4、STR()
把数值型数据转换为字符型数据。
STR (<float_expression>[,length[, <decimal>]])
length 指定返回的字符串的长度,decimal 指定返回的⼩数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length ⼩于⼩数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数⼩于length ,左边补⾜空格。
⼆、去空格函数
1、LTRIM() 把字符串头部的空格去掉。
2、RTRIM() 把字符串尾部的空格去掉。
三、取⼦串函数
1、left()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。
2、RIGHT()
RIGHT (<character_expression>, <integer_expression>)
delphi常用函数1
文件 日期,数学1.FileExists 检测指定的文件否存在。如果存在则返回True,反之则为False。 参考实例: var IsExists: Boolean; beginIsExists := FileExists('C:\Test.txt'); if IsExists then ShowMessage('该文件存在!') else ShowMessage('该文件不存在!'); end;DirectoryExists 检测指定的文件夹否存在。如果存在则返回True,反之则为False。 参考实例: var IsExists: Boolean; beginIsExists := DirectoryExists ('C:\Windows'); if IsExists then ShowMessage('Windows文件夹存在!') else ShowMessage('Windows文件夹不存在!'); end;2. MkDir 创建一个新的子目录(文件夹)。 参考实例: MkDir('C:\MyFolder'); // 在C盘根目录中创建了一个名叫MyFolder的文件夹。需要注意的是,如果在本身不存在的目录中创建子目录将会失败。比如C盘根本不存在Flash文件夹,写成MkDir('C:\Flash\MyFolder');这样将不能成功创建MyFolder文件夹。ForceDirectories 创建新的子目录。路径中不存在的目录将一同创建。 参考实例: Forc内存、指针操作函数 在编程中,动态数组为我们处理数据带来了很大的方便。Windows API函数也为增强程序的功能提供了强有力的保障。当我们在使用这些动态数组及API函数时,常常需要动态分配内存空间,这样动态数组才能被我们使用,API函数才能正确的返回结果。因此,这些函数是必不可少的。1.Abs 功能说明:求绝对值。参考实例:var r: Single; i: Integer;begin r := Abs(-2.8); // r等于 2.8 i := Abs(-156); // I 等于 156 end;2.Exp 功能说明:Exp返回e的X次幂的值,其中e是一个自然对数基底。 参考实例: e := Exp(1.0); // e为real型变量 3.Floor 功能说明:取得小于等于X的最大的整数。 参考实例: Floor(-2.8) = -3 Floor(2.8) = 2 Floor(-1.0) = -14.Int功能说明:返回参数中的整数部分。参考实例:var R: Real;begin R := Int(123.456); // R等于 123.0 R := Int(-123.456); // R等于 -123.0 end;5.Max(所在单元:Math)功能说明:比较两个数字,并返回最大的一个数字。参考实例:var k: Integer; begin k := Max(10, 20); // k将为20 end;6.Min(所在单元:Math) 功能说明:比较两个数字,并返回最小的一个数字。参考实例:var k: Integer; begin k := Min(10, 20); // k将为10 end;7.PI 功能说明:精确计算返回圆周率。 参考实例: var x:Extended; begin x := PI; // x等于3.141592653589793238 end;8.Round功能说明:对一个实数进行四舍五入。参考实例:var I, j: Integer;
delphi 参数
delphi 参数
Delphi是一种广泛应用于Windows平台的集成开发环境(IDE),它使用Object Pascal语言编写。作为一种高级编程语言,Delphi具有许多强大的特性和功能,使得开发人员能够快速构建出高质量的应用程序。本文将从不同角度介绍Delphi的参数及其相关内容。一、Delphi的参数类型
Delphi中有多种参数类型,包括值参数、引用参数和常量参数。值参数是一种传递参数的方式,它将参数的值复制给函数或过程的局部变量。引用参数是将参数的地址传递给函数或过程,从而可以在函数或过程中修改参数的值。常量参数是一种特殊类型的值参数,它在函数或过程中不能被修改。
二、Delphi中的参数传递方式
在Delphi中,参数可以通过值传递、引用传递和常量传递的方式进行传递。值传递是指将参数的值复制给函数或过程的局部变量,这样在函数或过程内部对参数的修改不会影响到原始的参数。引用传递是将参数的地址传递给函数或过程,使得函数或过程可以直接修改参数的值。常量传递是指将参数的值传递给函数或过程,但在函数或过程内部不能修改参数的值。
三、Delphi中的参数默认值
Delphi允许为函数或过程的参数设置默认值,这样在调用函数或过程时可以省略相应的参数。当省略参数时,函数或过程将使用参数
的默认值。通过设置参数的默认值,可以使函数或过程在不同的情况下具有不同的行为。
四、Delphi中的参数数组
Delphi中可以使用数组作为函数或过程的参数,称为参数数组。参数数组可以包含任意类型的元素,并且可以指定数组的长度。通过使用参数数组,可以简化函数或过程的调用,提高代码的可读性和可维护性。
delphidll函数调用方法
delphidll函数调用方法
Delphi是一种高级编程语言,用于开发Windows操作系统上的应用程序。它具有强大的功能,可以创建各种类型的应用程序,包括动态链接库(DLL)。
DLL是一个包含可执行代码和数据的文件,它可以由多个应用程序同时使用。通过使用DLL,我们可以将通用的代码保存在一个地方,并在多个应用程序中复用。
在Delphi中调用DLL函数的方法如下:
```
function MyDLLFunction: ReturnType; stdcall; external
'MyDLL.dll';
```
这里,MyDLL.dll是DLL文件的名称,MyDLLFunction是DLL函数的名称,ReturnType是函数的返回类型,stdcall是函数调用约定。
```
function MyDLLFunction: ReturnType; stdcall;
```
在这里,ReturnType是函数的返回类型,stdcall是函数调用约定。
3. 调用DLL函数:一旦导入DLL函数并声明其函数原型,我们就可以在Delphi代码中直接调用该函数。
```
var
returnValue: ReturnType;
begin
returnValue := MyDLLFunction;
// 使用returnValue执行其他操作
end;
```
这里,returnValue是一个变量,用于存储DLL函数的返回值。使用
上述代码,我们可以调用DLL函数并将返回值存储在returnValue变量中,以便进一步处理。
在一些情况下,DLL函数可能需要参数。在这种情况下,我们需要在
delphi 遍历 枚举类型 -回复
delphi 遍历枚举类型-回复
中括号内的主题是"delphi 遍历枚举类型",让我们一步一步回答这个问题。
第一步:了解Delphi 中的枚举类型
Delphi 是一种编程语言,支持枚举类型。枚举类型是一种用户自定义数据类型,用于定义一组常量值。每个枚举值都有一个相关联的整数值,并且可以在代码中使用这些值来代表不同的选项或状态。
在Delphi 中,我们可以通过以下语法来声明一个枚举类型:
type
TMyEnum = (Value1, Value2, Value3);
在上述的代码中,TMyEnum 是枚举类型的名称,而Value1、Value2 和Value3 是枚举值。在默认情况下,这些枚举值分别对应的整数值分别为0、1 和2。如果需要,我们也可以显式地为枚举值指定整数值。
第二步:遍历枚举类型的值
现在我们可以开始遍历枚举类型的值了。在Delphi 中,我们可以使用Ordinal 轮询(Ord) 函数来获取枚举值的整数值。然后,我们可以使用循环结构来遍历这些整数值,并在每次迭代中访问对应的枚举值。
下面是一个演示如何遍历枚举类型的示例代码:
type
TMyEnum = (Value1, Value2, Value3);
var
EnumValue: TMyEnum;
begin
for EnumValue := Low(TMyEnum) to High(TMyEnum) do
begin
访问枚举值
case EnumValue of
Value1: 执行Value1 的逻辑
Value2: 执行Value2 的逻辑
Delphi自定义类
Delphi⾃定义类
类的声明
有两种声明办法
⼀、⾃定义类的⽗类delphi内建类
type 类名 = class(⽗类)
成员表达式
end;
(1)保留字Class说明该类是dephi内建类,将继承⽗类的属性和⽅法
(2)“⽗类”默认是delphi的祖先类Tobject
⼆、完全⾃定义的类
Type 类名 = object(⽗类)
成员表达式
End;
(1)保留字object说明该类是完全⾃定义的类
(2)⾃类也必须是完全⾃义的类
注意:⽤class⾃定义的类必须遵循delphi内建类的Tobject的特定的构造⽅法和析构⽅法,⽽⽤object⾃定义类的⽅法⽆此限制(内存管理⽅式),所以⽤第⼀种⽅法⽣成对象时必须调⽤Create构造函数,
第⼆种就不需要,可直接⽣成对象,它将做为⼀般变量,和记录(Record)变量相同,⽤到
时⽴即分配内存,⽤完时⾃动释放内存
⾃定义Delphi内建类的构造和析构
构造函数
Constructor Create(AOwner :Tcomponent) ;override ;
(1)可以根据实际情况改变参数信息(参数个类,类型,顺序,默认值)
(2)若要继承⽗类的构造函数,可添加inherited create;
析构函数
Destructor destroy ; override ;
(1)若在⾃定类中添加了其它类,⼀定要记得释放这些对象
(2)若要继承⽗类
(3)值得注意的中destroy中删除对象的变量,即对象的参考,未真正删除对象实体,也就没有释放对象所占的内存,另外,若在没有调⽤create 的情况下,该对象参考的值为nil,这种情况下调⽤destroy,会产⽣错误
delphi函数定义及实现
delphi函数定义及实现
Delphi函数定义及实现
Delphi是一种面向对象的编程语言,它的函数定义和实现是非常重要的部分。在Delphi中,函数是一种可重用的代码块,它可以接受参数并返回一个值。在本文中,我们将讨论Delphi函数的定义和实现。
在Delphi中,函数定义由函数名、参数列表和返回类型组成。下面是一个简单的函数定义示例:
function AddNumbers(a, b: Integer): Integer;
在这个函数定义中,函数名是AddNumbers,它接受两个整数参数a和b,并返回一个整数值。在函数定义中,参数列表用括号括起来,参数之间用逗号分隔。返回类型在函数名后面用冒号指定。
函数实现
函数实现是函数定义的具体实现。在Delphi中,函数实现由函数体组成。函数体是一组语句,它们定义了函数的操作。下面是一个简单的函数实现示例:
function AddNumbers(a, b: Integer): Integer;
begin
Result := a + b;
end;
在这个函数实现中,函数体由一个begin和end语句块组成。在begin和end之间,我们定义了一个操作,它将a和b相加,并将结果存储在Result变量中。最后,函数返回Result变量的值。
函数调用
函数调用是使用函数的过程。在Delphi中,函数调用由函数名和参数列表组成。下面是一个简单的函数调用示例:
var
a, b, c: Integer;
begin
a := 1;
b := 2;
c := AddNumbers(a, b);
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文包含以下自定义函数:
1、Base64编码函数。
2、Base64解码函数。
3、截取汉字子串函数,防止出现半个汉字现象。
4、人民币小写转换为大写函数。
1、Base64编码函数。
//Base64编码函数
function Base64Encode(InputData: string): string;
//; Var OutputData: String
const
Base64TableLength = 64;
Base64Table: string[Base64TableLength] =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '=';
var
i: integer;
CurrentB, PrevB: byte;
c: byte;
s: char;
InputLength: integer;
OutputData: string;
FilterDecodeInput: Boolean;
function ValueToCharacter(value: byte; var character: char): Boolean;
//******************************************************************
// 将一个在0..Base64TableLength-1区间内的值,转换为与Base64编码相对应
// 的字符来表示,如果转换成功则返回True
//****************************************************************** begin
result := true;
if (value > Base64TableLength - 1) then
result := false
else
character := Base64Table[value + 1];
end;
begin
FilterDecodeInput := true;
OutputData := '';
InputLength := Length(InputData);
i := 1;
if (InputLength = 0) then begin
// result := BASE64_OK;
Exit;
end;
repeat
// 第一次转换
CurrentB := Ord(InputData[i]);
i := i + 1;
InputLength := InputLength - 1;
c := (CurrentB shr 2);
if not ValueToCharacter(c, s) then begin
// result := BASE64_ERROR;
Exit;
end;
OutputData := OutputData + s;
PrevB := CurrentB;
// 第二次转换
if InputLength = 0 then
CurrentB := 0
else begin
CurrentB := Ord(InputData[i]);
i := i + 1;
end;
InputLength := InputLength - 1;
c := (PrevB an
d $03) shl 4 + (CurrentB shr 4);
//取出XX后4位并将其左移4位与XX右移4位合并成六位if not ValueToCharacter(c, s) then
{//检测取得的字符是否在Base64Table内} begin
// result := BASE64_ERROR;
Exit;
end;
OutputData := OutputData + s;
PrevB := CurrentB;
// 第三次转换
if InputLength < 0 then
s := Pad
else begin
if InputLength = 0 then
CurrentB := 0
else begin
CurrentB := Ord(InputData[i]);
i := i + 1;
end;
InputLength := InputLength - 1;
c := (PrevB an
d $0F) shl 2 + (CurrentB shr 6);
//取出XX后4位并将其左移2位与XX右移6位合并成六位if not ValueToCharacter(c, s) then
{//检测取得的字符是否在Base64Table内} begin
// result := BASE64_ERROR;
Exit;
end;
end;
OutputData := OutputData + s;
// 第四次转换
if InputLength < 0 then
s := Pad
else begin
c := (CurrentB an
d $3F); //取出XX后6位
if not ValueToCharacter(c, s) then
{//检测取得的字符是否在Base64Table内} begin
// result := BASE64_ERROR;
Exit;
end;
end;
OutputData := OutputData + s;
until InputLength <= 0;
result := OutputData;
end;
2、Base64解码函数。
function Base64Decode(InputData: string): string;
const
Base64TableLength = 64;
Base64Table: string[Base64TableLength] =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '=';
var
i: integer;
InputLength: integer;
CurrentB, PrevB: byte;
c: byte;
s: char;