文档库 最新最全的文档下载
当前位置:文档库 › Delphi中 TStringList 的详细用法

Delphi中 TStringList 的详细用法

Delphi中 TStringList 的详细用法
Delphi中 TStringList 的详细用法

Delphi中TStringList 的详细用法

TStringList 类是在Delphi使用最厂的一个对像,我们这里一起来看看 TStringList 的详细用法.

先把要讨论的几个属性列出来:

1、CommaText

2、Delimiter & DelimitedText

3、Names & Values & ValueFromIndex

TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的。

TStringList 常用方法与属性:

var

List: TStringList;

i: Integer;

begin

List := TStringList.Create;

List.Add('Strings1'); {添加}

List.Add('Strings2');

List.Exchange(0,1); {置换}

List.Insert(0,'Strings3'); {插入}

i := List.IndexOf('Strings1'); {第一次出现的位置}

List.Sort; {排序}

List.Sorted := True; {指定排序}

List.Count; {总数}

List.Text; {文本集合}

List.Delete(0); {删除, 0是第一个数据}

List.LoadFromFile('c:\tmp.txt');{打开}

List.SaveToFile('c:\tmp.txt'); {保存}

List.Clear; {清空}

List.Free; {释放}

end;

//读入字符串

var

List: TStringList;

begin

List := TStringList.Create;

https://www.wendangku.net/doc/006064106.html,maText := 'aaa,bbb,ccc,ddd';

//相当于: List.Text := 'aaa' + #13#10 + 'bbb' + #13#10' + 'ccc' + '#13#10' + 'ddd';

var

List: TStringList;

begin

List := TStringList.Create;

List.Add('aaa');

List.Sorted := True; //需要先指定排序

List.Duplicates := dupIgnore; //如有重复值则放弃

List.Add('aaa');

ShowMessage(List.Text); //aaa

//Duplicates 有3个可选值:

//dupIgnore: 放弃;

//dupAccept: 结束;

//dupError: 提示错误.

List.Free;

end;

//排序与倒排序

{排序函数}

function DescCompareStrings(List: TStringList; Index1, Index2: Integer): Integer; begin

Result := -AnsiCompareText(List[Index1], List[Index2]);

end;

procedure TForm1.Button1Click(Sender: TObject);

var

List: TStringList;

begin

List := TStringList.Create;

List.Add('bbb');

List.Add('ccc');

List.Add('aaa');

//未排序

ShowMessage(List.Text); //bbb ccc aaa

//排序

List.Sort;

ShowMessage(List.Text); //aaa bbb ccc

//倒排序

List.CustomSort(DescCompareStrings); //调用排序函数

ShowMessage(List.Text); //ccc bbb aaa

//假如

List.Sorted := True;

List.Add('999');

List.Add('000');

List.Add('zzz');

ShowMessage(List.Text); //000 999 aaa bbb ccc zzz

end;

现在来讨论它的一些高级的用法。

先把要讨论的几个属性列出来:

1、CommaText

2、Delimiter & DelimitedText

3、Names & Values & ValueFromIndex

先看第一个:CommaText。怎么用呢?用代码说话:

const

constr :String = 'aaa,bbb,ccc,ddd';

var

strs :TStrings;

i :Integer;

begin

strs := TStringList.Create;

https://www.wendangku.net/doc/006064106.html,maText := constr;

for i := 0 to Strs.Count-1 do

ShowMessage(Strs);

end;

执行了这段代码后,可以看到ShowMessage显示出来的分别是:aaa bbb ccc ddd。

也就是说,https://www.wendangku.net/doc/006064106.html,maText := constr这一句的作用,就是把一个字符串以','为分割符,分段添加到TStrings中。

那么如果不是以','来分割,又该怎么做呢?现在看第二个例子。使用Delimiter和DelimitedText。

const

constr :String = 'aaa\bbb\ccc\ddd';

var

strs :TStrings;

i :Integer;

begin

strs := TStringList.Create;

strs.Delimiter := '\';

strs.DelimitedText := constr;

for i := 0 to Strs.Count-1 do

ShowMessage(Strs);

可以看到,显示的效果和第一个例子是一模一样的。解释一下:

Delimiter为分隔符,默认为:','。DelimitedText就是按Delimiter为分隔符的一个串,得到赋值后回把这个字符串按Delimiter的字符添加到TStrings中。

说到这里,有想起一个属性,QuoteChar。其默认值为:'"'(不包括单引号)

有何用呢?看例子:

const

constr :String = '"aaa"\"bbb"\"ccc"\"ddd"';

var

strs :TStrings;

i :Integer;

begin

strs := TStringList.Create;

strs.Delimiter := '\';

strs.DelimitedText := constr;

for i := 0 to Strs.Count-1 do

ShowMessage(Strs);

end;

显示出来的仍然是aaa bbb ccc ddd。为什么不是:"aaa" "bbb" "ccc" "ddd"呢?

再来看一个例子:

const

constr :String = '|aaa|\|bbb|\|ccc|\|ddd|';

var

strs :TStrings;

i :Integer;

begin

strs := TStringList.Create;

strs.Delimiter := '\';

strs.QuoteChar := '|';

strs.DelimitedText := constr;

for i := 0 to Strs.Count-1 do

ShowMessage(Strs);

end;

显示出来的又是aaa bbb ccc ddd。对比一下,应该不难明白吧?这个就不多说了,用得也不多。

但是还要多说一句,当Delimiter为:','而QuoteChar为:'"'时,DelimitedText和CommaText 是同等的。

最后要说的三个是:Names & Values & ValueFromIndex。

看看下面的代码:

const

constr :String = '0=aaa,1=bbb,2=ccc,3=ddd';

strs :TStrings;

i :Integer;

begin

strs := TStringList.Create;

https://www.wendangku.net/doc/006064106.html,maText := constr;

for i := 0 to strs.Count-1 do

begin

ShowMessage(https://www.wendangku.net/doc/006064106.html,s);

ShowMessage(strs.Values[https://www.wendangku.net/doc/006064106.html,s]);

ShowMessage(strs.ValueFromIndex);

end;

end;

通过这个例子不难看出:

这个时候strs中的内容是:

0=aaa

1=bbb

2=ccc

3=ddd

而Names中则是:

1

2

3

在Values中则是:

aaa

bbb

ccc

ddd

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

TStringList 和 TList

在本章中,我们只讨论TStringList,而将TList放在下一章中再详细讨论

第一章、TStringList

在这里我们要讲解TStringList,但同时有一个相关类是不能忽略的,那就是TStrings类 TStringList是由TStrings派生而来,而Tstrings是一个抽象类,他继承于Tpersistent 类。

因此,我们将TStrings类和 TStringList类一同讲解,并做比较

1、TStrings、TStringList不是可视组件,只是两个通用类,因此他们与可视组件TMemo、TRichEdit没有可比性。

2、TStrings、TStringList都是管理“字符串-附属对象”这样一个列表,前者是抽象类,不能被实例化,只是定义了一些通用的属性、方法,而后者是从TStringList继承而来,可以实例化使用。如:

var

S1, S2: TStrings;

S3: TStringList;

begin

S1 := TStrings.Create; //这样就不可以(因为TStrings是抽象类,不能直接创建对象)S3 := TStringList.Create; //这样是可以的

S2 := TStringList.Create; //这样也是可以的(多态的典型使用)

end;

注意:

上面S2的声明是TStrings类型,他是将一个TStringList类创建了对象之后,赋值给声明的TStrings变量。这是典型的多态的使用。(什么?你不知道什么是多态?乖乖隆咚,这可是大腕啊,这都不认识,赶紧饿补一下再回来找小飞龙~~~~)

我说过TStrings类是TStringList类的父类,多态使用中,子类对象赋值给父类变量后,变量的使用范围(属性、方法)是要注意的,子类没有的属性或方法,变量是不能使用的,而需要类型转换TStringList(S2)之后才能调用。如下面的代码段

var

S:TStrings;

begin

S := TStringList.Create;//TStringList实现了TStrings中的抽象方法。

S.Add('123456789ABC'); //所以这样调用Add方法,是正确的;

//因为TStrings类中是有Add方法的抽象声明的;

//它实际调用的是子类TStringList实现的Add。

S.Sort //而这样调用Sort排序方法就会出错;

//因为TStrings类中没有Sort方法的声明;

//而变量S被声明为TStrings类,所以他看不到子类中继承后新增加的方法和属性。

S.Free;

end;

上面代码中TStringList类中有一个方法,叫做Sort(这是一个排序的方法),但是在TStrings类里面却没有,他是TStringList子类新增加的方法。那么好了,在上面的程序代码段中,如果这样调用代码S2.Sort,哈哈,马上你就会看到编译器报错,具体为什么,大家可以好好地想一想,或者参考李维大师的著作阅读相关章节。

var

S1, S2: TStrings;

S3: TStringList;

begin

S1 := TStrings.Create; //这样就不可以(因为TStrings是抽象类,不能直接创建对象)S3 := TStringList.Create; //这样是可以的

S2 := TStringList.Create; //这样也是可以的(多态的典型使用)

S1.Add('123456789ABC'); //报错了,因为S1中Add是抽象方法,只有声明

S.Free;

end;

我们再来看看上面代码中的S1变量,你可以声明TStrings的对象,但是,如果你像上面那样创建他,那么编译器编译的时候会发出警告信息,列出TStrings类中的抽象方法,提醒你,这是一个抽象类,你不应该直接创建他的对象,当然,如果你不怕死,非要编译运行程序的话,也没问题,编译器对警告信息一般是放过的,所以,你的程序(如上面所示)仍然可以运行!

但是,嘿嘿,看见了吗?我说但是了,如果你在后面的代码中使用了你所创建的TStrings 对象的那些 add,delete等方法的话,那你就死定了,因为这些是抽象方法,是不能用的,是Abstract 方法。

为什么第二段代码中的S.Add('123456789ABC')不会有问题,可以很好地执行;但是第三段代码中的S1.Add('123456789ABC')就会报错呢?,他们的S和S1变量不都是TStrings类型吗?

关于这个问题,本小飞龙已经点的很清楚了,这是面向对象程序设计语言中非常重要的一个环节“多态性”,如果读者对这个概念不清楚,那么很多东西都会稀里糊涂,会走很多弯路,所以,赶紧看看相关的资料。在这里我们就不说了,我只说一句:这非常重要!!!!

3、TMemo是我们常见的一个可视化VCL组件,通常用于显示多行的纯文本内容。

Delphi 5中其Items属性类型是TStrings(实际上是继承自TStrings的TMemoStrings),因此可以直接从TStrings兼容类型的变量导入数据。

Delphi 7中组件有变化,没有了Items属性,取而代之的是Lines属性,类型是TStrings。

4.TRichEdit是另一个我们常见的一个可视化VCL组件,通常用于显示格式化的文本内容。

Delphi 5中其Items属性类型也是TStrings(实际上是继承自TStrings的TRichEditStrings),因此可以直接从TStrings兼容类型的变量导入数据。

Delphi 7中组件有变化,没有了Items属性,取而代之的是Lines属性,类型是TStrings。

5、TStrings的派生类主要用于管理字符串集合和对象集合。例如Delphi5中TStringList 在内部分别为字符串和对象各声明了一个数组来存储数据,而在Delphi7中TStringList在内部是以一个记录类型来实现,因此他们能同时保存字符串和对象(注意:一般我们用TStringList来处理数组列表,而用下一章将要讲到的TList类来处理对象列表;但事实上TStringList类也是可以处理对象的,关于这一点,只要读者仔细看看Delpgi7中的TStringList类VCL的源代码就明白了,注意源代码中私有变量是一个记录类型)。

6、一般我们直接使用TStringList类而不是TStrings类,因为TStrings类是一个抽象类,不能直接使用,所以下面我们列出TStringList类的方法,并重点讲解其作用

方法描述

Add 在末尾添加一个字符串 TStringList.Add('123456789ABC ')

AddObject 在末尾添加一个对象 TStringList.AddObject('btn', Button1);

Insert 在指定位置插入一个字符串 TStringList.Insert(0, '123456789ABC ')

InsertObject 在指定位置插入一个字符串,并给他分配一个相应的对象

举例:将窗体中的所有组件的组件名称放入ListBox的Item属性中

Item属性是一个TStrings类型 procedure TForm1.Button1Click(Sender: TObject);

var

I: Integer;

begin

for I := 0 to https://www.wendangku.net/doc/006064106.html,ponentCount-1 do

ListBox1.Items.InsertObject(0, https://www.wendangku.net/doc/006064106.html,ponents[I].Name,https://www.wendangku.net/doc/006064106.html,ponents[I] as TObject);

end;

Delete 在指定位置删除一个字符串,如果字符串配有对象,那么对象也删除

TStringList.Delete('0')

Clear 清空列表字符串,如果字符串配有对象,那么对象也被移出,但是对象不会被释放Exchange 交换两个字符串的位置,如果字符串配有对象,那么对象也被交换

TStringList.Exchange(0,1)

Find 查找一个已知字符串在列表中的位置,注意方法声明中的Index的声明是 var Index TStringList.Find(const S: string; var Index: Integer): Boolean;

IndexOf 与Find不同,IndexOf用来查找某一字符串指定的位置

TStringList.IndexOf(const S: string): Integer;

Sort 排序,Sorted属性设置为False的时候,调用Sort排序;

Sorted属性

Sorted属性设置为False的时候,调用Sort排序;

Sorted属性设置为True的时候,列表自动排序,这时,就不要使用Insert了,而应使用Add来添加,系统会自动排序的;

CustomSort 客户自定义排序,这个我们不作介绍,有兴趣看Delphi帮助

CaseSensitive 设定字符串比较、取位置时,大小写是否敏感,这个我们不作介绍,有兴趣看Delphi 帮助

Duplicates 添加字符串的时候,是否允许重复字段Add,这个我们不作介绍,有兴趣看Delphi帮助

//TStringList 常用方法与属性:

var

List: TStringList;

i: Integer;

begin

List := TStringList.Create;

List.Add('Strings1'); {添加}

List.Add('Strings2');

List.Exchange(0,1); {置换}

List.Insert(0,'Strings3'); {插入}

i := List.IndexOf('Strings1'); {第一次出现的位置}

List.Sort; {排序}

List.Sorted := True; {指定排序}

List.Count; {总数}

List.Text; {文本集合}

List.Delete(0); {删除, 0是第一个数据}

List.LoadFromFile('c:\tmp.txt');{打开}

List.SaveToFile('c:\tmp.txt'); {保存}

List.Clear; {清空}

List.Free; {释放}

end;

--------------------------------------------------------------------------------

另:

TStringList 有一个小Bug Delimiter将空格也作为分隔符的问题

它会将空格当做分隔符!

List.Delimiter := '|';

List.DelimitedText := 'aaa|bb b|ccc|ddd';

//bbb若有空格,那么它的Count就是5而不是4

而SplitColumns是IdStrings.pas里的函数,

它修正了TStrings.DelimitedText和TStrings.Delimiter将空格也作为分隔符的问题SplitColumns

WebEx Recorder使用说明

WebEx Recorder:性能最好的录屏软件 你在寻找好用的录屏软件吗?商用级品质的WebEx Recorder就是一款优秀的录屏软件。WebEx Recorder可以录制全屏或指定窗口,可以设定是否包含声音,生成的文件体积极小且极清晰,录制过程占用资源很少。WebEx的最大优点是性能出众。WebEx 软件并不是个人开发或面向个人的小软件,而是完整的商业解决方案中包括的一款小工具。因此,它在效率和稳定性方面非常出色,称得上是善用佳软见过的录屏软件(包括几款共享软件)中性能最好的一款。例如,用WebEx Recorder全屏带声音录制1小时,生成的文件约25MB,且计算机仍工作流畅,无任何延缓。再如,包括微软、SAP在内的很多大公司,网络讲座经常采用WebEx平台。再如,有些录屏软件,时间太长的话会占用资源太大而失去响应,但WebEx不存在此情况。 1. WebEx Recorder 版权说明 WebEx Recorder不是免费软件,也不是共享软件,而是商业套件中的一个小工具。尽管从技术来讲,可以到主页下载,可以无限期应用,无任何注册提示或限制。但软件许可协议中规定:3.1 You may not: …… iii) utilize the Software for any purpose other than participation in a WebEx meeting or use of the WebEx services。 2. 下载安装WebEx Recorder 在官方下载 WebEx recorder v2.4,体积约 4271KB,安装后约 7MB。WebEx 安装后有三个快捷方式,包括 player、recorder、editor。但这并不意味着有3个独立程序:所谓的播放、录制、编辑其实对应同一个主程序,只是运行参数不同: ”D:\program files\WebEx\atauthor.exe” -PLAYER ”D:\program files\WebEx\atauthor.exe” ”D:\program files\WebEx\atauthor.exe”–EDITOR

Delphi如何使用基本的绘图函数绘制统计图

一个windows自带的画图工具是无论如何也不能满足我们的画图需要的,很多效果都需要我们在另外的工具中来实现。这些高级的功能是如何实现的呢,如何操纵一些基本的属性和函数,让它们最终能作出我们想要的效果呢?这里我们以绘制统计图来说明这些问题。 解决思路―― 这里,我们暂且先撇开具体的问题,综合地一下讨论画图的问题。 画图工具是基本元素的具体实现,对于我们初学者来说,还是有很好的参考价值的,在delphi 5中有一个自带的工程例子“……Borland\Delphi5\Demos\Doc\Graphex”,这个例子可以实现一些基本的绘图功能。对这个例子多加修改,一定会有所收获的。这里就不列出它的详细代码了,有心的读者可以自己找到这个例子。我这里只是想综合地讨论这方面的问题。使用DELPHI编写绘图软件的灵魂就在于操作画布,画笔和刷子,尽可能地挖掘它们的属性和相关参数的设置。 (一)画布 画布,画笔和刷子之间的关系很明了.其实,画笔和刷子都是画布的一个属性.而画布也只是TForm,TImage,TShape等组件对象的一个属性,专门负责与图象相关的信息打交道.它的主要作用可以概括如下几点: 1.指定使用画笔,刷子和字体的使用类型; 2.绘制和填充指定形状的线或图形; 3.修饰和改变图象; 画布的主要属性有: Brush--指定填充图形和背景的样式 CanvasOrientation--指定画布的定位类型,有coLeftToRight, coRightToLeft两个属性; ClipRect--指定剪切矩形的边界; CopyMode--指定图形图象的复制模式; Font--指定画布上使用的字体; Handle--为画布指定窗口GDI对象的设备描述表; LockCount--指定画布被别的线程锁定的次数; Pen--指定画布上使用的画笔,具体见下面描述; PenPos--指定画笔当前的位置; Pixels--指定当前剪切矩形的象素颜色; TextFlags--指定字体在画布上的显示方式,有ETO_CLIPPED,ETO_OPAQUE,ETO_RTLREADING,ETO_GL YPH_INDEX,ETO_IGNORELANGUAGE,ETO_NUMERICSLOCALETO_NUMERIC SLATIN等值可选; 画布相关的API函数及其注释如下: Arc--按指定方式画一条弧; BrushCopy--把位图复制到指定的画布的矩形中,用画布刷子颜色替换位图的颜色; Chord--按指定方式画弦; CopyRect--从一个矩形区域复制部分图象到另一个矩形区域; Draw--用指定参数在指定位置画图; DrawFocusRect--按指定焦点风格,通过异或操作来绘制一焦点矩形; Ellipse--按指定参数画一椭圆; FillRect--按指定的刷子填充一矩形; FloodFill--使用当前选定的刷子填充指定设备描述表中的一块区域;

delphi数学模块函数、过程大全

function ArcCos(const X : Extended) : Extended; overload; function ArcCos(const X : Double) : Double; overload; function ArcCos(const X : Single) : Single; overload; function ArcSin(const X : Extended) : Extended; overload; function ArcSin(const X : Double) : Double; overload; function ArcSin(const X : Single) : Single; overload; function ArcTan2(const Y, X: Extended): Extended; procedure SinCos(const Theta: Extended; var Sin, Cos: Extended) register; function Tan(const X: Extended): Extended; function Cotan(const X: Extended): Extended; { 1 / tan(X), X <> 0 } function Secant(const X: Extended): Extended; { 1 / cos(X) } function Cosecant(const X: Extended): Extended; { 1 / sin(X) } function Hypot(const X, Y: Extended): Extended; { Sqrt(X**2 + Y**2) } function RadToDeg(const Radians: Extended): Extended; inline; { Degrees := Radians * 180 / PI } function RadToGrad(const Radians: Extended): Extended; inline; { Grads := Radians * 200 / PI } function RadToCycle(const Radians: Extended): Extended; inline; { Cycles := Radians / 2PI } function DegToRad(const Degrees: Extended): Extended; inline; { Radians := Degrees * PI / 180} function DegToGrad(const Degrees: Extended): Extended; function DegToCycle(const Degrees: Extended): Extended; function GradToRad(const Grads: Extended): Extended; inline; { Radians := Grads * PI / 200 } function GradToDeg(const Grads: Extended): Extended; function GradToCycle(const Grads: Extended): Extended; function CycleToRad(const Cycles: Extended): Extended; inline; { Radians := Cycles * 2PI } function CycleToDeg(const Cycles: Extended): Extended; function CycleToGrad(const Cycles: Extended): Extended; { Hyperbolic functions and inverses } function Cot(const X: Extended): Extended; inline; { alias for Cotan } function Sec(const X: Extended): Extended; inline; { alias for Secant } function Csc(const X: Extended): Extended; inline; { alias for Cosecant } function Cosh(const X: Extended): Extended; function Sinh(const X: Extended): Extended; function Tanh(const X: Extended): Extended; function CotH(const X: Extended): Extended; inline; function SecH(const X: Extended): Extended; inline; function CscH(const X: Extended): Extended; inline; function ArcCot(const X: Extended): Extended; { IN: X <> 0 } function ArcSec(const X: Extended): Extended; { IN: X <> 0 } function ArcCsc(const X: Extended): Extended; { IN: X <> 0 } function ArcCosh(const X: Extended): Extended; { IN: X >= 1 } function ArcSinh(const X: Extended): Extended;

DELPHI中如何调用API,可举例说明

DELPHI中如何调用API,可举例说明 第一部分Delphi知识1. 如果一个元件希望放到IDE的元件面板上,它必须从________类派生,如果一个元件能作为其它元件的容器,它必须从_____________类派生,如果一个元件在运行时可见,它必须从___________________类派生(A)TGraphicControl (B)TWinContr 1、rtl70.bpl是什么?有什么用? 2、delphi的Package相对dll有什么优点? 3、以下的记录(结构)变量在内存占多少字节?type a = packed record v1: Byte; v2: Word; v3: string[16]; v4: Double; v5: string; v6: TForm; end; 4、以下的写法是否正确?type a 1.您为什么选择软件开发这个行业?(30字左右简写); 2.如果有您解决不了的软件问题您会采取什么样的解决措施; 3.a.请您写出Object Pascal所支持的数据类型;b.请您写出Shl、Shr、Xor、Not 的数学表示法; 4.请您写出VCL结构层次(以TObject开始,最少五层);5 二.是非题(共20道)1.从主菜单上选择Project|Syntax Check 菜单选项,Delphi将编译从上次编译后有改动的任何单元,并报出遇到的错误。()2.Delphi的VCL对象有些是指针,从堆栈中分配空间,有些则不是。()3.粘贴时,如果作为容器的组件已被选择,

剪贴 一.选择题(共40道)1.用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()。A、F12和F11 B、F12和F13 C、F12和Ctrl+F12 D、F12和Alt+F12 E、F12和Shift+F12 2.某函数如下:Function check(n,k:Integer):Integer; Var m:Integer; Beg 编程语言:delphi7.0或Vc++6.0 时间:4小时内环境:可参考帮助文档,但不能上网查资料1、编程查找指定目录下所有EXE 文件,并将其全路径存入Result.txt中,要求用递归。2、采用SOCKET(可用SOCKET API或delphi Socket控件)实现点对点传输大文件,要求不能掉

DELPHI常用函数说明

一、数据类型转换函数1 在我们编写程序当中,根据不同情况,会使用到多种数据类型。当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。 1.FloatToStr 功能说明:该函数用于将“浮点型”转换成“字符型”。 参考实例: Edit1.Text := FloatToStr(1.981); 2.IntToStr 功能说明:该函数用于将“整数型”转换成“字符型”。 参考实例: S := IntToStr(10);(注:S为String类型变量。) 3.IntToHex 功能说明:该函数用于将“十进制”转换成“十进制”。该函数有二个参数1。第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。 参考实例: Edit1.Text := IntToHex('100', 2);

执行结果,Edit1.Text等于64。 注意:Delphi没有提供专门的“十六进制”转换为“十进制”的函数。使用StrToInt函数可以实现这个功能。具体代码是:I := StrToInt('S\' + '64'); 这时I等于100。加上一个'S\'即可将“十六进制”转换为“十进制”。 4.StrToInt 功能说明:该函数用于将“字符型”转换成“整数型”。 参考实例: I := StrToInt('100'); 注意:不能转换如StrToInt('ab')或StrToInt('好')这样的类型,因为他们并不存在数字型。 5.StrToFloat 功能说明:该函数用于将“字符型”转换成“浮点型”。 参考实例: N := StrToFloat(Edit1.Text); 注意:Edit1.Text中的内容为1.981(凡在Edit 控件中显示的文本均为字符串)。N为Double类型,用于保存转换后的浮点型数据。

DELPHI Variant变量的使用技巧

DELPHI Variant变量的使用技巧。。。。。。 delphi 为了完全支持OLE,32位Delphi 增加了Variant 数据类型,本节将从宏观角度来分析这种数据类型。实际上,Variant类型对Pascal语言有普遍而深入的影响,Delphi 控件库中与OLE 无关的地方也使用到这种类型。 Variant变量没有类型 一般说来,你可以用Variant 变量存储任何数据类型,对它执行各种操作和类型转换。需要注意的是:这违反了Pascal 语言的一贯原则,有悖于良好的编程习惯。variant 变量的类型检查和计算在运行期间才进行,编译器不会提示代码中的潜在错误,这些错误在进一步测试中才能发现。总之,你可以认为包含variant变量的代码是解释性代码,正如解释性代码一样,许多操作直到执行时才能知道,这对代码运行速度会有很大的影响。 上面对Variant 类型的使用提出了警告,现在来看看Variant 类型究竟能干什么。基本上说,如果声明了一个variant 变量: var V: Variant; 你就可以把各种不同类型的值赋给它: V := 10; V := 'Hello, World'; V := 45.55; 一旦得到一个variant 值,你可以把它拷贝给任何兼容或不兼容的数据类型。如果你把值赋给不兼容的数据类型,Delphi 会力尽所能进行转换,无法转换则颁布一个运行时间错误。实际上,variant变量中不仅包含了数据还包含有类型信息,并允许一系列运行时间操作,这些操作很方便,但运行速度慢且安全性差。 见例VariTest,它是上面代码的扩展。窗体上有三个编辑框,一对按钮,第一个按钮的OnClick 事件代码如下: procedure TForm1.Button1Click(Sender: TObject); var V: Variant; begin V := 10; Edit1.Text := V; V := 'Hello, World';

Delphi函数大全

Delphi函数大全 首部function Languages: TLanguages; $[ 功能返回系统语言对象 说明通过此函数可以得到系统的语言环境 参考type 例子 12a12c12a12c. 参考 例子:= IsValidIdent; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToStr(Value: Integer): string; overload; $[ 首部function IntToStr(Value: Int64): string; overload; $[ 功能返回整数Value转换成字符串 说明Format('%d', [Value]) 参考function 例子:= IntToStr; ━━━━━━━━━━━━━━━━━━━━━ 首部function IntToHex(V alue: Integer; Digits: Integer): string; overload; $[ 首部function IntToHex(V alue: Int64; Digits: Integer): string; overload; $[ 功能返回整数Value转换成十六进制表现结果;Format('%.*x', [Digits, Value]) 说明参数Digits指定字符最小宽度;最小宽度不足时将用0填充 参考function 例子:= IntToHex, ; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToInt(const S: string): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时将引起异常 参考procedure 例子:= StrToInt; ━━━━━━━━━━━━━━━━━━━━━ 首部function StrToIntDef(const S: string; Default: Integer): Integer; $[ 功能返回字符串S转换成整数 说明字符串非整数表达时则返回默认值Default 参考procedure 例子:= StrToIntDef, 0); ━━━━━━━━━━━━━━━━━━━━━ 首部function TryStrToInt(const S: string; out Value: Integer): Boolean; $[ 功能返回字符串S转换成整数V alue是否成功 说明字符串非整数表达时返回False并且Value将输出为0 参考procedure 例子 ..);打开失败则返回负数 参考function

delphi海康

type //HCNetSDK头文件类型声明Delphi改写 //基本数据类型声明 DWORD=LongWord; //WORD:Word; USHORT=Word; LONG=Longint; //BYTE=char ; //#define BOOL int UINT=Longword; LPVOID=Pointer; HANDLE=Pointer; LPDWORD=^LongWord; //typedef unsigned long long UINT64; //NET_DVR_Login_V30()参数结构 type LPNET_DVR_DEVICEINFO_V30=^NET_DVR_DEVICEINFO_V30; NET_DVR_DEVICEINFO_V30=Record sSerialNumber:array [0..SERIALNO_LEN-1] of BYTE ; //序列号 byAlarmInPortNum:BYTE ; //报警输入个数 byAlarmOutPortNum:BYTE ; //报警输出个数 byDiskNum:BYTE ; //硬盘个数 byDVRType:BYTE ; //设备类型, 1:DVR 2:ATM DVR 3:DVS ...... byChanNum:BYTE ; //模拟通道个数 byStartChan:BYTE ; //起始通道号,例如DVS-1,DVR - 1 byAudioChanNum:BYTE ; //语音通道数 byIPChanNum:BYTE ; //最大数字通道个数 byZeroChanNum:BYTE ; //零通道编码个数 //2010-01-16 byMainProto:BYTE ; //主码流传输协议类型 0-private, 1-rtsp bySubProto:BYTE ; //子码流传输协议类型0-private, 1-rtsp bySupport:BYTE ; //能力,位与结果为0表示不支持,1表示支持, //bySupport & 0x1, 表示是否支持智能搜索 //bySupport & 0x2, 表示是否支持备份 //bySupport & 0x4, 表示是否支持压缩参数能力获取 //bySupport & 0x8, 表示是否支持多网卡 //bySupport & 0x10, 表示支持远程SADP //bySupport & 0x20, 表示支持Raid卡功能 //bySupport & 0x40, 表示支持IPSAN 目录查找 //bySupport & 0x80, 表示支持rtp over rtsp bySupport1:BYTE ; // 能力集扩充,位与结果为0表示不支持,1表示支持 //bySupport1 & 0x1, 表示是否支持snmp v30 //bySupport1 & 0x2, 支持区分回放和下载 byRes1:BYTE ;

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

Delphi文件操作

Delphi文件操作 变量的数据保存于内存中,随程序运行的结束而结束,若要使程序下次运行时能重复使用或给其他程序员使用,必须保存在文件中,Delphi存取文件的方式有4种,即传统的PASCAL方式、windows API文件句柄方式、VCL文件流方式、使用类方法方式。使用类方法方式比较简单,其他三种方式一般的步骤为: (1) 声明文件类型变量; (2) 给文件类型变量指定文件名; (3) 通过文件类型变量打开并且读写文件,必要时进行文件定位; (4) 关闭文件。 1、PASCAL方式访问文件 文件是由相同数据类型的数据元素组成的序列,文件可以分为三种类型:文本文件,类型文件,无类型文件。文本文件中每个数据元素就是一个字符,占有一个字节,并以回车换行符(#13#10)表示每行的结束;类型文件中每个数据元素的数据类型可以是整数、实型记录型等;无类型文件中每个数据元素是一个字节的二进制数。 文件和数组在形式上有些类似,但实质上有诸多不同,主要表现为以下三个方面:(1)数组的元素个数一般是固定的,而文件的长度一般是不定的、随即的; (2)数组元素总是放于内存中,而文件往往存于外存中; (3)数组以“数组名[下标]”的形式访问数组中的任意一个元素,而文件则需要通过文件变量来访问。 1)类型文件 例一、Button1按钮将记录数组XS[0..1]写入文件…Stu.dat?,Button2将…Stu.dat?读到记录变量X1,X2,然后用消息框输出。 TYPE Stu = Record Xh:integer; Xm:string[20]; END; Procedure TForm1.Buttonclick(Sender:TObject);//记录数组写入文件 Const xs:array[0..1] of Stu=((Xh:=405;xm:='张三'),(xh:=406,xm:='李四')); Var F:File of Stu; begin AssignFile(F,'Stu.dat');//关联文件 ReWrite(F);//打开方式(写) Write(F,xs[0],xs[1]);//将数组写到文件 CloseFile(F); end; procedure TForm1.Button2Click(Sender: TObject); Var F:File of Stu; x1,x2:Stu; begin AssignFile(F,'Stu.dat');

delphi函数参考手册

delphi函数参考手册 名称类型说明 abort 函数引起放弃的意外处理 abs 函数绝对值函数 addexitproc 函数将一过程添加到运行时库的结束过程表中addr 函数返回指定对象的地址 adjustlinebreaks 函数将给定字符串的行分隔符调整为cr/lf序列align 属性使控件位于窗口某部分 alignment 属性控件标签的文字位置 allocmem 函数在堆栈上分配给定大小的块 allowgrayed 属性允许一个灰度选择 ansicomparestr 函数比较字符串(区分大小写)ansicomparetext 函数比较字符串(不区分大小写)ansilowercase 函数将字符转换为小写 ansiuppercase 函数将字符转换为大写 append 函数以附加的方式打开已有的文件 arctan 函数余切函数 assignfile 函数给文件变量赋一外部文件名 assigned 函数测试函数或过程变量是否为空 autosize 属性自动控制标签的大小 backgrounddi2001.jpg 属性背景色 beginthread 函数以适当的方式建立用于内存管理的线程bevelinner 属性控件方框的内框方式

bevelouter 属性控件方框的外框方式 bevelwidth 属性控件方框的外框宽度 blockread 函数读一个或多个记录到变量中blockwrite 函数从变量中写一个或多个记录borderstyle 属性边界类型 borderwidth 属性边界宽度 break 命令终止for、while、repeat循环语句 brush 属性画刷 caption 属性标签文字的内容 change 函数改变文件的后缀 chdir 函数改变当前目录 checked 属性确定复选框选中状态 chr 函数返回指定序数的字符 closefile 命令关闭打开的文件 color 属性标签的颜色 columns 属性显示的列数 comparestr 函数比较字符串(区分大小写)concat 函数合并字符串 continue 命令继续for、while、repeat的下一个循环copy 函数返回一字符串的子串 cos 函数余弦函数 ctl3d 属性是否具有3d效果

delphi常用函数大全

delphi常用函数大全(转) 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函数将日期格式转换为字符串

ClientDataSet的用法(转) - CNQCJ 的Delphi 博客 - 博客园

ClientDataSet的用法(转)- CNQCJ 的Delphi 博客- 博 客园 ClientDataSet的用法(转)TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件。该控件封装了对数据进行操作处理的接口和功能,而本身并不依赖上述几种数据库驱动程序,基本上能满足单机"瘦"数据库应用程序的需要。 1.TClientDataSet的基本属性和方法介绍 1).FieldDefs: 字段定义列表属性 开发者可通过单击属性编辑器中该属性编辑按钮,或在该控件上单击右键选择弹出菜单中的"Fields Editor"菜单进行字段编辑。设置完此属性后,实际上就相当于定义了表的结构;如果想装入已有的数据表的结构和数据,可通过单击右键选择弹出菜单中的"Assign Local Data"菜单,从弹出对话框中选取当前窗体中已与数据库连接好的数据集控件名 称即可(当前窗体中必须已放置好要套用的数据集控件并打开激活)。 使用注意: 对于自定义的字段名表,该属性编辑完后,该控件仍然无法打开。必须右键单击该控件,选择弹出菜单中的"Create DataSet"菜单,让该控件以上述编辑的字段列表为依据,创

建数据集后,才能够被激活打开和使用。否则,会出现类似"ClientDataSet1: Missing data provider or data packet."的错误(包括在运行期,运行期可调用该控件的CreateDataSet 方法,从而动态定义字段和表)。 2).FileName属性 说明:数据存储文件的名称。 因该控件是基于文件型的数据操作控件,因此,必须指定所操作的数据文件名称(默认扩展名称.cds),从而打开和激活该控件,进而进行数据编辑。 例1:利用此属性打开指定的.cds文件 var Path: string; begin Path := ExtractFilePath(Application.ExeName); //取得可执行文件路径 CDataSet1.FileName := Path + 'test.cds'; CDataSet1.Open; end; 3).CreateDataSet方法 说明:该方法以FieldDefs中的字段名表为结构建立数据集,常用来进行动态定义表。 例2:动态创建一具有姓名和年龄两个字段的数据集。

Delphi字符串处理函数

【字符串函数大全】 首部function AnsiResemblesText(const AText, AOther: string): Boolean; $[StrUtils.pas 功能返回两个字符串是否相似 说明ANSI(American National Standards Institute)美国国家标准协会;不区分大小写参考function StrUtils.SoundexProc; var StrUtils.AnsiResemblesProc 例子CheckBox1.Checked := AnsiResemblesText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiContainsText(const AText, ASubText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否包含子串ASubText 说明不区分大小写 参考function StrUtils.AnsiUppercase; function StrUtils.AnsiPos 例子CheckBox1.Checked := AnsiContainsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiStartsText(const ASubText, AText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否以子串ASubText开头 说明不区分大小写 参考function https://www.wendangku.net/doc/006064106.html,pareString 例子CheckBox1.Checked := AnsiStartsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiEndsText(const ASubText, AText: string): Boolean; $[StrUtils.pas 功能返回字符串AText是否以子串ASubText结尾 说明不区分大小写 参考function https://www.wendangku.net/doc/006064106.html,pareString 例子CheckBox1.Checked := AnsiEndsText(Edit1.Text, Edit2.Text); ━━━━━━━━━━━━━━━━━━━━━ 首部function AnsiReplaceText(const AText, AFromText, AToText: string): string; $[StrUtils.pas 功能返回字符串AText中用子串AFromText替换成子串AToText的结果 说明不区分大小写 参考function SysUtils.StringReplace; type SysUtils.TReplaceFlags 例子Edit4.Text := AnsiReplaceText(Edit1.Text, Edit2.Text, Edit3.Text);

arecord 使用

arecord 使用 一.alsa-utils介绍 ALSA是kernel中的一个声音驱动程序.它包括alsa核心和其他声卡的驱动. alsa-utils是alsa的一个工具包,里面包含有声卡测试和音频编辑的工具.二.alsa-utils的安装 1.RPM包方式 Turbolinux 10.5,11版本已经包含有alsa-utils的rpm包,你可以直接安装: # rpm -ivh alsa-utils-xxx.rpm2.源码包方式 下载地址: https://www.wendangku.net/doc/006064106.html,/main/index.php/Download

源码包安装方法: # tar zxvf alsa-utils-1.0.6.tar.gz # cd alsa-utils-1.0.6 # ./configure # make install三.alsa-utils工具的使用 alsa-utils包含的工具有: alsactl, aconnect, alsamixer, amidi, amixer, aplay, aplaymidi, arecord, arecordmidi, aseqnet, iecset, speaker-test1.alsactl的使用 alsactl用来对alsa声卡驱动进行一些高级的设置.系统中装有多个声卡,它也可以支持. 有时在音量控制面板无法调整的选项,可以使用alsactl来实现. alsactl可以将指定声卡的驱动程序设置信息保存到配置文件.或从配置文件中恢复指定

声卡的驱动程序的设置信息. alsactl格式: alsactl [options] [store|restore] 选项: -h, --help 打印帮助信息 -f, --file 指定使用的配置文件,默认为/etc/asound.state. Select the configuration file to use. The default is /etc/asound.state -F, --force 与恢复命令一起使用.表示最大限度的恢复设置值.

在DELPHI中如何实现打印功能

在DELPHI中提供了一个PRINTERS程序单元,它说明了一个TPRINTER对象,封装了WINDOWS打印工作和输出打印机之间的接口,并提供常用的属性和方法,其中画布CANVAS是一个非常有用的属性,它代表了当前打印文件的表面,是以图形方式来工作的,整个的打印输出工作仅仅是将你打印的内容输出到TPRINTER的属性CANVAS上,当全部的输出工作完成以后,打印对象(TPRINTER)把CANVAS的属性值送到打印机上去。 下面举例来说明如何通过DELPHI实现文本内容的打印。在DELPHI 中提供了PRINTDIALOG、PRINTERSETUPDIALOG两个控件允许我们进行打印机以及其他影响打印输出的选择,此外最重要的一点是要想实现打印功能必须在编译程序以前将PRINTERS加入到INTERFACE或者IMPLEMENTATION的UESE语句当中,因为PRINTER单元包括ASSIGNPRN和其他控制打印机的过程。 首先在FORM当中加入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG和两个BUTTON控件,两个BUTTON的CAPTION分别为“打印设置”和“打印”。然后编写BUTTON的事件驱动程序(代码在下面),这个简单的例子中只要单击“打印”按钮时便可以在打印机上输出文件0S2.TXT,打印事件的清单如下: implementation

usesprinters; {$R*.DFM} procedureTForm1.BitBtn1Click(Sender:TObject); begin printersetupdialog1.execute;//选择输出的打印机以及其他打印控制选项 end; procedureTForm1.BitBtn2Click(Sender:TObject); var lines:integer; prntext:system.text; //将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件begin ifprintdialog1.executethen assignprn(prntext);//将PRNTEST分配给打印机 rewrite(prntext);//调用REWRITE函数,为输出打开已分配的文件printer.canvas.font:=memo1.font; //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性forlines:=0tomemo1.lines.count-1do

相关文档
相关文档 最新文档