Delphi控件使用1

2018-11-10 21:02

利用dll封装类

查看实例502 步骤:

7. 在file/new/other中的new页中打开dll wizard; 8. 在代码窗口中的单元代码窗口定义类;

9. 在工程文件中编写程序,用以提供用户访问类的接口。 Ping操作 Ping.exe是windows系统中一个测试网络连接和传输性能的工具,ping使用了ICMP作为传输协议,在windows上icmp.dll库文件中包含了一系列的ICMP函数 参见实例455

串口通信的实现

参见实例456

实例说明:使用windows中的ActiveX控件的MSComm。(Delphi7以前的版本) COM技术

COM即Comeponent Object Model(组件对象模型), MTS 即微软事务服务器;

进程内服务器:用Dll实现COM对象;

进程外服务器:在应用程序中实现COM对象或当Dll在另外的计算机(DCOM)或宿主环境(MTS)中执行时。 含有COM对象的库在Delphi中称为ActiveX库,生成方法:File/New/ActiveX页.. ActiveX library. 1. 建立进程内COM服务器

生成ActiveX库后的完整源代码如下: library Project2; uses

ComServ;

exports

DllGetClassObject, //用于从外部访问类库

DllCanUnloadNow, // 检查服务器的全部对象是否被删除从而可以从内存中卸载 DllRegisterServer, // DllUnregisterServer; //

{$R *.RES}

begin end.

接下来添加COM对象

填写类名,点击list选择Windows注册表中已有的接口.. 2. 使用类型库编辑器 3. 创建COM+对象

在Delphi中调用dll

步骤:

1. 在程序中声明一个全局函数,该函数类型和动态库中定义的函数类型一致,示例中都是“TDllClass”。 2. 使用关键字external导入动态库; 实例程序如下:

unit Unit1;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type

TDllClass = Class (TObject) published

Public

procedure Showinfo;virtual;abstract; end;

TForm1 = class(TForm) Button1: TButton; Image1: TImage;

procedure Button1Click(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end; var

Form1: TForm1;

Function CreateObj: TDllClass; //声明一个全局函数

external 'project1.dll'; //使用关键字external导入动态库 implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); var

temp: TDllClass; begin

temp := CreateObj; temp.Showinfo; temp.Free; end; end.

多线程编程

>>参见资料 程序界面如下:

程序由一个主单元Unit1、主窗口Form1和两线程单元Unit2和Unit3组成,在Unit1代码如下 unit Unit1;

interface uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type

TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit;

procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private

{ Private declarations } public

{ Public declarations } end; var

Form1: TForm1;

implementation

{$R *.dfm}

uses unit2,unit3; //引用线程单元,第一步 var

thread1:SS; //定义线程,第二步 thread2:TT;

procedure TForm1.FormCreate(Sender: TObject); //初始化时创建线程,第三步

begin

thread1 := SS.Create(true); thread2 := TT.create; end;

procedure TForm1.Button1Click(Sender: TObject); //唤醒线程,第四步 begin

thread1.Resume; thread2.Resume; end; end.

--------------------------------------------------------- Unit2的代码如下(Unit3类似) unit Unit2;

interface

uses //注意添加相关部分,此一;

Classes,Unit1,Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms, Dialogs, StdCtrls; type

SS = class(TThread) private

{ Private declarations } protected

procedure Execute; override; end;

implementation

{ Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example,

Synchronize(UpdateCaption);

and UpdateCaption could look like,

procedure SS.UpdateCaption; begin

Form1.Caption := 'Updated in a thread'; end; }

{ SS }

procedure SS.Execute; //添加线程唤醒是的执行程序,此二;

控件使用

Standard页

1- Tlistbox控件 重要属性items.*

举例,界面设计如下左,执行结果如下右:

代码为

procedure TForm1.Button1Click(Sender: TObject); begin

edit1.Text := listbox1.Items.CommaText; edit2.Text := listbox1.Items.Text;

edit3.Text := listbox1.Items.GetNamePath; edit4.Text := listbox1.Items.Strings[1]; edit5.Text := listbox1.Items.DelimitedText; edit6.Text := listbox1.Items.Names[1]; end;

由执行结果知,CommaText把各行用逗号隔开,Text获得所有行数字符且不隔开,Strings[i]获得i行的字符。

2- Checkbox控件

Alignment决定文字和框的左右布局;state属性里有个Grayed状态,为灰色选中状态,与Enabled:=false不同的是它可以在程序运行的时候进行操作;AllowGrayed属性为True时候,控件有三种状态:选中、未选中、选中但变灰; 3- RadioGroup控件

Columns属性设置radobutton的列数; 4- TmainMenu控件

Action属性;AutoHotKeys属性自动配置快捷键; birmap属性为某个菜单标签添加图标;

Break属性给菜单分栏:mbBarBreak-分栏有竖线,mbBreak-只分栏无竖线,若要从末各标签开始分栏,则设

置该标签的Break属性;

Caption属性设置为短横线时为分隔横线; Checked属性为True时为标签添加对勾;

ShutCut属性为标签添加快捷键,并在标签右边显示; 模板应用:右击主菜单,Insert.. 保存模板:与上类似,Save As.. 5- PopMenu

应用步骤:添加控件,然后设置PopMenu属性指向动作空间;

Additional页

1-Navigator控件:

Flat属性设置3D/2D效果;dragCursors设置拖动是显示的符号,drag mode/dragkind决定是否可以进行拖动操作;

2-Additional页的BitBtn控件

Kind属性设置按钮图片类型,layOut设置图片在按钮上的布局;Glyph属性自定义图片,图片路径c:\\...Borland shared\\Images

3- Additional页的SpeedButton控件

Glyph属性自定义图片,图片路径c:\\...Borland shared\\Images; Flat属性设置3D/2D效果;最大的优势在于鼠标指向它的时候呈立体效果;

4.- Additional页的CheckListBox控件

Items属性中写入项目,但是项目前具有CheckBox的形式,可以进行项目选择;

判断第k个项目是否被选择采用如下语句 :if checklistbox.checked[k] = ture ?,与若干单独的checkbox比较优势在于可以统一编程,不在需要对每一个checkbox单独去编写程序!

5. Additional页的橡皮筋控件Spliter

作用是分割窗体,是一自动行为控件,无需任何时间代码。

使用过程为:放置控件,设置Align属性,调整Height或width属性。

6. Additional页的静态文本控件StaticText

功能与Text 类似,但通过设置Bevelkind, Bevelinner, Bevelouter和borderstyle属性可以加强外观修饰功能!!

7. Additional页的控制棒控件ControlBar

功能:强大的控件修饰功能,是制作加速键面板的有理工具,譬如office中的工具按钮等。

8.Tsahpe 控件

三个主要属性:Pen属性,Brush属性,Shape属性。Pen属性决定边框显示,包括 LabelEdit控件

Label 和Edit的组合;

Win32页

TabControl

重要属性有:Tabs属性创建页数,Font修改字体属性,Style更改页面风格,Tabposition设置按纽方向、布局。

TrackBar跟踪条/进程条ProgressBar

对任务的执行状态进行跟踪。 重要属性为:

a. min,max,设置举例:trackbar1.Min := 0, trackbar1.Max := mediaplayer1.Length; b. position 指定跟踪对象,如trackbar1.Position := mediaplayer1.Position; c. TickStyle为跟踪类型选择,一般选择tsAuto。

日期时间控件 DataTimePicker

功能:拾取系统时间、日期,并以对应格式输出 重要属性:

a. date,拾取的时间。

b. Time,拾取的系统时间 举例如:button2.Caption := TimeToStr(DateTimePicker1.Time); c. DateFormat:dfShort为短格式,dfLong为中文长格式;

MonthCalendar控件

功能,直接显示月历,

树结构目录查看控件TreeView

重要属性:

Item>>生成树结构,HotTrack实现热追踪;Font属性设置树结构的字体属性;

AutoExpand: Boolean;

HotTrack: Boolean; 实现热追踪 Selected: TTreeNode;

Read Selected to access the selected node of the tree view. If there is no selected node, the value of Selected is nil.Set Selected to set a node in the tree view. ShowButtons: Boolean;是否显示树结构钱的+、-号

具体使用如下 Var

node :Ttreenode; //定义树节点类型 pnode : ttreenode; begin

//增加选中节点的子节点,并展开

node := treeview1.Selected; //支点选择

treeview1.Items.AddChild(node,'增加节点'); //增加子节点 node.Expanded := true; //展开支点 //增加选中节点的同级节点

pnode := treeview1.Selected.parent; //指向父节点

treeview1.Items.AddChild(pnode,'增加的同级节点'); //增加子节点(该节点的父节点的子节点为该节点同级节点) end;

标题头控件headerControl

制作标题头 重要属性:

a. setions:输入标题文字;

b. style:有flat\\buttons?等式样,其中Flat式样不接受sectionclick事件。 c. HotTrack

状态条StatusBar

功能:显示系统运行时的提示信息 重要属性:

a. simleText:当为单栏状态条时,显示信息,应用如:StatusBar1.SimpleText := datetostr(date);

右击StatusBar控件,打开Panel Editor,可以设置多栏状态条和各自的宽度。应用如StatusBar1.panels[2].Text := datetostr(date);(使用Timer控件以保持和系统时间的同步性) ToolBar

功能:开发快捷键

右击生成按钮和分割符;对应的按钮的Style属性选择按钮属性,共5种;按钮的MenuItem属性选择关联的下拉菜单,按钮的PopMenu属性选择关联的右键菜单。Hint和ShowHint配合使用显示提示(Hint输入提示文字,ShowHint设置为true)

实际使用步骤:1.在Win32页中拖入imagelist控件,并双击打开添加图片;2.添加toolbar控件,设置hotimages和images属性为imagelist空间,然后在上面添加工具按钮,并设置工具按钮imageIndex属性,下一步就设置menuItem属性选择关联彩单。

9 CoolBar 右击生成Bans; D7的TXPManifest控件

如果你的操作系统是XP,将TXPManifeS加入到窗体上,就可以使窗体以及其他所有孔件实现XP效果。如果不是XP系统就没有任何用处。

System页

OLE(对象联结和嵌入容器)

右击控件选择Insert Object 弹出Ole Insert Object对话框,促啊如OLE服务器对象。常见命令如下 OleContainer1.InsertObjectDialog;//弹出Ole Insert Object对话框 OleContainer1.DestroyObject(); //程序关闭的时候保证对象的销毁

ActiveX(页)类控件

Chartfx 控件

使用步骤:1.拖放控件;2.把控件的Toolbox属性设置为True,从而打开工具棒;3.右击打开“特性”??,其中label标签中可以添加图标的标题; 重要属性:

Chart3D:是否采用3D绘图方式

ChartType:选择绘图类型,如柱形图,折线图等

PalleteBar:面板工具显示否(用来修改背景颜色和坐标平面颜色),选True或者False; PatternBar

问题:如何动态地添加数据,把它很好地运用到自己的程序中来?

F1book控件(Excel工作表控件)

拖入控件,双击行、列标题可以修改行列标题,右击work designer可以设置属性,其中gernal标签下的Enable Protection可以设置用户是否可以编辑表格中的数据。

assignfile(f,'erjinzhi.txt'); reset(f);

while not Eof(f) do begin //Eof(f)函数判断是否到文件末尾 Eof(f) Read (f,i); //循环读数据 Memo1.Lines.Add(inttostr(i)); end;

closefile(f); end;

视频捕获软件开发完全教学

http://blog.csdn.net/hongjiujing/archive/2007/09/07/1775635.aspx 输入框输入

function InputBox(const ACaption, APrompt, ADefault: string): string; //返回输入字符 function InputBox(const ACaption, APrompt, ADefault: WideString ): WideString; overload;

function InputBox(const ACaption, APrompt: WideString ; ADefault: Double; Min: Double = Low(Integer); Max: Double = High(Integer); Decimals: Integer = 1): Double; overload;

function InputBox(const ACaption, APrompt: WideString; ADefault: Integer; Min: Integer = Low(Integer); Max: Integer = High(Integer); Increment: Integer = 1): Integer; overload; >>>>>>>

Call InputBox to bring up an input dialog box ready for the user to enter a string, double, or integer in its edit box. ACaption is the caption of the dialog box.

APrompt is the text that prompts the user to enter input in the edit box.

ADefault is the value that appears in the edit box when the dialog box first appears. AMin is the minimum value the user can enter into the edit box. AMax is the maximum value the user can enter into the edit box.

如何产生随机数

一般随机数生成器的基本原理是:首先初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,

但同一个初始值的随机种子将会生成完全相同的随机数列。 Pascal的System单元提供了两个与随机数有关的子程序: Randomize和Random。

Randomize过程用于初始化随机种子,其初始值取决于当前的系统时钟。

Random函数用于获取随机数

它有两种调用形式:

Random,返回一个0到1之间(不包括1)的随机实数;{不用random(1)} Random(N),返回0至N之间(不包括N)的随机整数,N为Word类型整数。

另外,System单元中随机种子变量的标识符为RandSeed,你也可以手动修改它。 随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能,也 可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的相 应数列。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果, 可以设置RandSeed为一个定值。

文件操作函数

>>FileExists, RenameFile, FileCreate, FileWrite, FileClose, ExtractFileName 参见delphi帮助主题和链接文件 界面设计如下

代码如下

procedure TForm1.Button1Click(Sender: TObject); begin //创建 Test文件夹

CreateDirectory('E:\\Test',nil); end;

procedure TForm1.Button3Click(Sender: TObject);

begin //在Test文件夹下创建文件名为Windows的Txt文件

FileCreate('E:\\Test\\windows.txt'); end;

procedure TForm1.Button5Click(Sender: TObject); begin //Windows的Txt文件 更名为 windows22

renameFile('E:\\Test\\windows.txt','E:\\Test\\windows22.txt'); end;

procedure TForm1.Button4Click(Sender: TObject); var

FileHandle:thandle; begin

FileHandle := FileCreate('E:\\Test\\vista.txt'); //获得文件的句柄

filewrite(FileHandle,'adsfdfdfdfasdfd',sizeof('adsfdfdfdfasdfd')); {往文件中写数据 } FileClose(FileHandle); {关闭文件(文件在应用程序使用阶段Windows不能正常打开,所以操作完后关闭) } end;

procedure TForm1.Button6Click(Sender: TObject); begin

DeleteFile('E:\\Test\\vista.txt'); //删除文件 end;

获取文件路径

1********* begin

edit1.text:=extractfiledir(application.ExeName); edit1.text:=extractfilepath(application.ExeName);

这个是获取自身目录的函数,两函数不同的是一个路径后带有\,一个没有

如果要获取打开文件的路径,使用opendialog控件(在dialogs控件组下): begin

if opendialog1.Execute then

edit1.text:=opendialog1.FileName ; //在文本框显示路径 end;

2*********

首先定义一个全局变量AppPath;然后用函数GetDir(0,AppPath);取得程序的绝对路径 比如程序在桌面的文件夹267中运行,取得的路径为:“C:\\...\\桌面\\267”

调用外部可执行文件

链接相关 查看实例230

调用office组件

调用word: 首先use ComObj 然后添加如下程序:

procedure TForm1.Button1Click(Sender: TObject); var

word : olevariant; begin

word := createoleobject('word.application'); word.visible := true; word.documents.add; end;

类似其他组件调用参见实例018

创建和调用Dll

创建Dll: 步骤:

1. 在file/new/other中的new页中打开dll wizard;自动创建一个工程文件,以library关键字开头; 2. 以适当文件名保存;

3. 新建Unit单元,输入过程和函数,例如: unit FirstDll;

interface

Function Add10(number:integer):integer;stdcall; //声明,

implementation

Function Add10(number:integer):integer; begin

result := number + 10; // 函数语句 end; end.

4. 工程文件中建立Exports 子句 library MyFirstDll;

{ Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select

Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses

SysUtils, Classes,

FirstDll in 'FirstDll.pas';

exports ADD10; //建立Exports 子句

{$R *.res}

begin //添加DLL初始化代码 end.

5. 编译生成Dll文件(Project>>Compile??)

6. 在调用程序(主程序)中的单元文件中的Interface部分进行声明,调用,如: unit Unit1;

interface uses

ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, XPMan, StdCtrls; type

TForm1 = class(TForm) Edit1: TEdit;

Button1: TButton;

XPManifest1: TXPManifest;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations } end;

Function Add10(number:integer):integer;stdcall;external 'MyFirstDll.dll'; var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); var

temp :integer; begin try

temp := Strtoint(Edit1.text);

Edit1.text := inttostr(Add10(temp)); //调用函数

except

Showmessage('Error!') end; end; end.

DLL中封装窗体

//声明,大小写敏感

begin

deskhandle:= FindWindow('ProgMan',nil);

ShowWindow(deskhandle,SW_HIDE); // 其他窗口显示方式参见 end;

procedure TForm1.Button2Click(Sender: TObject); var

deskhandle: THandle; begin

deskhandle:= FindWindow('ProgMan',nil); ShowWindow(deskhandle,SW_SHOW); end;

参见实例253 本实例实现禁用、启用注册表

procedure TForm1.Button1Click(Sender: TObject); var

myr:TRegistry; begin

myr:=Tregistry.Create;

myr.RootKey:=HKEY_CURRENT_USER;

myr.OpenKey('\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer',true); //路径不一定要这个才行 if RadioGroup1.ItemIndex=0 then begin

myr.WriteInteger('disallowrun',0); //创建键值项,把数据写为零?也就是默认(可以运行),或者说

//对windows不起作用?

MessageDlg('允许使用注册表设置完成', mtInformation,[mbOk], 0 ); end else begin

myr.WriteInteger('disallowrun',1);

myr.OpenKey('\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\disallowrun',true);

myr.WriteString('1','regedit.exe'); // disallowrun键值下的禁用regedit.exe,(也可以是其他的程序?) MessageDlg('不允许使用注册表设置完成', mtInformation,[mbOk], 0 ); end; end;

参见实例256,修改IE浏览器默认主页

在“HKEY

中的字符串值就是\\Internet Explorer的默认主页。

function TFrmStarPage.ShowStartPage:string; var

reg:TRegistry;

begin //返回默认主页 reg:=TRegistry.Create;

reg.RootKey:=HKEY_CURRENT_USER;

reg.OpenKey('SoftWare\\Microsoft\\Internet Explorer\\Main',true); result:=reg.ReadString('Start Page'); Reg.CloseKey; reg.Free; end;

procedure TFrmStarPage.SetStartPage(Const Page:string); var

reg:TRegistry;

begin //设置默认主页 reg:=TRegistry.Create;

reg.RootKey:=HKEY_CURRENT_USER;

reg.OpenKey('SoftWare\\Microsoft\\Internet Explorer\\Main',true); reg.WriteString('Start Page',page); //Page为网址字符串 Reg.CloseKey; reg.Free; end;

procedure TFrmStarPage.FormShow(Sender: TObject); begin

EdOldPage.Text:=ShowStartPage; end;

procedure TFrmStarPage.BtnSetClick(Sender: TObject); begin

if trim(EDStarPage.Text) = '' then begin

SetStartPage('about:blank'); end else

SetStartPage(EDStarPage.Text); end;

procedure TFrmStarPage.BtnCloseClick(Sender: TObject); begin Close; end;

********************************************//如下为技术支持

提供了Tregistry类来操作注册表,操作的第一步是在Uses中加入Registry单元,否则出错。

一、创建和释放TRegistry对象

1.创建TRegistry对象。为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create; 2.释放TRegistry对象。对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy。

二、指定要操作的键

操作注册表时,首先应指定操作的主键:先给属性RootKey赋值以指定根键,然后用方法OpenKey来指定要操作的主键名。

1.指定根键(RootKey)。

根键是注册表的入口,也注册表信息的分类,其值可为:

HKEY-CLASSES-ROOT:存储整个系统对象类信息,如ActiveX对象注册、文件关联等信息。 HKEY-CURRENT-USER:存储当前用户的配置信息。为属性RootKey的默认值。

HKEY-LOCAL-MACHINE:存储当前系统的软硬件配置信息。应用程序自己的信息可以存储在该根键下。 HKEY-USERS:存储所有用户通用的配置信息。

还可以是HKEY-CURRENT-CONFIG、HKEY-DYN-DATA。 2.指定要操作的主键。

Function OpenKey(const Key: string; CanCreate: Boolean): Boolean; Key:主键名,是键名全名中除去根键的部分,如Software。

CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。 返回值True表示操作成功。 3.关闭当前主键。

在读取或存储信息之后,应及时将关闭当前主键:procedure CloseKey。

三、从注册表中读取信息

Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。 1.Read系列方法。

function ReadString(const Name: string): string; 读取一个字符串值,Name为字符串名称。

function ReadInteger(const Name: string): Integer; 读取一个整数值,Name为整数名称。

function ReadBinaryData(const Name: string; var Buffer; BufSize: Integer):Integer;

读取二进制值,Name为二进制值名称,Buffer为接收缓冲区,BufSize为缓冲区大小,返回为实际读取的字节数。

其它方法还有:ReadBool、ReadCurrency、ReadDate、ReadDateTime、ReadFloat、ReadTime。 2.读取信息一例(显示Windows的版本)。

在HKEY-LOCAL-MACHINE下,有三个字符串值Version、VersionNumber和SubVersionNumber,用于记录当前Windows的版本号。

{请在Uses中包含Registry单元}

procedure TForm1.Button1Click(Sender:TObject); var

ARegistry : TRegistry; begin

ARegistry := TRegistry.Create; //建立一个TRegistry实例 with ARegistry do begin

RootKey := HKEY-LOCAL-MACHINE;//指定根键为HKEY-LOCAL-MACHINE //打开主键Software

if OpenKey( ′Software′,false ) then begin

memo1.lines.add('Windows版本:′+ ReadString(′Version′));

memo1.lines.add('Windows版本号:′ + ReadString(′VersionNumber′));

memo1.lines.add(′Windows子版本号:′ + ReadString(′SubVersionNumber′)); end;

CloseKey;//关闭主键 Destroy;//释放内存 end; end;

四、向注册表中写入信息

Write系列方法将信息转化为指定的类型,并写入注册表。 1.Write系列方法。

procedure WriteString(const Name, value: string);

写入一个字符串值,Name为字符串的名称,value为字符串值。 procedure WriteInteger(const Name: string; value: Integer); 写入一个整数值。

procedure WriteBinaryData(const Name: string; var Buffer; BufSize: Integer);

写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。 其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。 2.写入信息一例。

下面程序使Delphi随Windows启动而自动运行。 var

ARegistry : TRegistry; begin

ARegistry := TRegistry.Create; //建立一个TRegistry实例 with ARegistry do begin

RootKey:=HKEY-LOCAL-MACHINE; if OpenKey(′Software′,True) then WriteString(′delphi′,′C:Files.exe′); CloseKey; Destroy; end; end;

五、键值维护

除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。

1.创建新主键:function CreateKey(const Key: string): Boolean。 Key即为主键名,返回值True表示操作成功。

2.删除主键:function DeleteKey(const Key: string): Boolean。 Key即为主键名,返回值True表示操作成功。

3.复制或移动主键:procedure MoveKey(const OldName, NewName: string; Delete: Boolean)。

OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。

复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。 4.判断指定主键是否存在,其下是否有主键,并获取主键名称。 KeyExists用于判断指定主键是否存在:

function KeyExists(const Key: string): Boolean;//返回值为True表示主键存在。 HasSubKeys用于判断指定主键下是否有子键:function HasSubKeys: Boolean; 返回值为True表示主键下有子键。

GetKeyNames用于获取子键名称:procedure GetKeyNames(Strings: TStrings); Strings用于返回当前主键下各子键的名称。

5.获取主键下的数据值名称:procedure GetvalueNames(Strings: TStrings)。 Strings用于返回当前主键下各数值名称。

如要获取当前系统中的拨号连接名称,可利用获取主键HKEY-USERS .DEFAULT下的数值名称的方法来进行。 6.判断数值名称存在、数值名称改名。 valueExists用于判断数值名称是否存在:

function valueExists(const Name: string): Boolean; 返回值为True表示数值名称存在。 Renamevalue用于数值名称改名:

procedure Renamevalue(const OldName, NewName: string);

以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。

◇ delphi的tregistry注册表类方法详解 ●getdatainfo方法

function getdatainfo(const valuename:string;var value:tregdatainfo):boolean;

tregdatatype=(rdunknown,rdstring,rdexpandstring,rdexpandstring,rdinterger,rdbinary); tregdatainfo=record

regdata:tregdatatype;数据类型 datasize:integer;数据大小 end

valuename:和当前键关联的数据值名称

value:返回数据的信息,如为rdstring和rdexpandstring类型,则数据大小包括字符串未尾的空结束字符。如果成功返回true,失败返回false,并且value的值为zeros

rdexpandstring:是一个包含环境变量的字符串;如“%path%”。

●createkey方法

function createkey(const key:string):boolena;

新建一个名为key的键,key可以为绝对的或相对的名字,绝对名用反斜杠“\舡”开头,相对名是新建一个当前键的子键。新建没有值。成功返回true,否则返回false,如果该键已存在将不产生效果。

●deletekey方法

function deletekey(const key:string):boolean;

删除一个键及相关联的数据,在win95中子键也将被删除,nt中子键必须一个个删除。

●deletevalue方法

function deletevalue (const name:string):boolean; 删除当前键中指定的一个数据值name。

●getdatasize方法

function getdatasize(const valuename:string):integer;

返回当前键中一个指定数值valuename数据的大小。 ●getdatatype方法

function getdatatype(const valuename;string):tregdatatype; 返回当前键中一个指定数值valuename数据的类型。

●getkeyinfo方法

function getkeyinfo(var value:tregkeyinfo):boolean; 返回当前键的信息,在于value中。 tregkeyinfo=record

maxsubkeylen:integer;子键名的最长值(字节) numvalues:integer;键值的数量 maxvaluelen;最长的键值名的长度 filetime:tfiletime;最后一次更改的时间 end;

●getkeynames方法

procedure getkeynames(strings:tsrtings); 返回当前键所有子键的名子列表串。

●getvaluenames

procedure getvaluenames(strings:tstrings); 返回当前键所有键值名的列表串。

●hassubkeys方法

(AdWords)function hassubkeys:boolean;

判断当前键是否有子键,有返回true,否则返回false。

●keyexists方法

function keyexists(const key:string):boolean; 判断指定的键是否存在。

●loadkey方法

function loadkey(const key,filenmae:string):boolean; 在根键下新建

从一个文件中加载注册信息到子键中,文件注册信息中包含数据值名、子键和数据。

loadkey使创建一个键单一化,子键,键值和数据在一人操作中完成,所有这些称为一组,和单独地创建它们不同应用程序可以在一个文件中读取一组数据,这在用户运行中重新设置有特别的用处。 key为要创建子键的名子

filename:为文件的位置,所指定的文件必须为以前用savekey函数或regsavekey api函数所建立的,文件名不能包括扩展名。

●openkey方法

function openkey(const key:string;cancreate:boolean):boolean;

使用该函数可以指定一个键作为当前键,如果键为nil,则当前键将设置为根键。

cancreate决定是否在指定键不存在时创建该键,该函数创建的键的键值将不确定。如果成功地打开或创建,该函数返回true。

●openkeyreadonly方法

function openkeyreadonly(const key: string): boolean; 以只读的方式打开key值指定的键。

●closekey方法 procedure closekey;

当不再使用一个键时应用该方法关闭该键。

●movekey方法

procedure movekey(const oldname, newname: string; delete: boolean);

该方法移动或复制一个键到一个新的位置,并把键的名子改为newname。

在win95/98下该的子键和数据将被一起移动或复制到新的位置,在nt下子键必须用movekey明确的移动或自制。

●读取数据的方法

function readbinarydata(const name: string; var buffer; bufsize: integer):integer;

function readbool(const name: string): boolean;

function readcurrency(const name: string): currency;

function readdate(const name: string): tdatetime;

function readdatetime(const name: string): tdatetime;

function readfloat(const name: string): double;

function readinteger(const name: string): integer;

function readstring(const name: string): string;

function readtime(const name: string): tdatetime;

以上方法从当前主键读取相应数据类型的键值的数据,如果类型不匹配将产生一个异常。

●registryconnect方法

function registryconnect(const uncname: string): boolean;

与另一台计算机的注册表建立连接,在建立连接前应将rootkey属性设为hkey_users或hkey_local_machine。

uncname是另一台计算机的名子。格式如:\\computername 假如uncname为nil,将打开本地计算

◇ 应用之一:让自己的程序随WIN95/98/NT的启动而运行

当然,你可以在"启动"程序组中加入程序的快捷方式,但这样做好像不大明智,因为大多数程序在安装时不会这样做,而通过在注册表增加键值,让WIN 95/98/NT在启动时运行自己的程序.如果打开注册表,找到HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run,就会发

现这个秘密了,原来许多自动运行的程序都在这里.你也可以在这里增加一个键,让你的程序也随着WIN95/98/NT的启动而自己运行,成为WINDOWS下的TSR程序.实现方法如下: 首先,在Uses中加上Registry单元。然后,写下面代码. { 将程序strExeFileName置为自动启动 }

function StartUpMyProgram( strPrompt,strExeFileName : string ) : boolean; var

registerTemp : TRegistry; begin

registerTemp := TRegistry.Create; //建立一个Registry实例 with registerTemp do begin

RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为 HKEY_LOCAL_MACHINE //找到Software\\Microsoft\\Windows\\CurrentVersion\\Run

if OpenKey('Software\\Microsoft\\Windows\\CurrentVersion\\Run',True) then //写入自己程序的快捷方式信息 begin

WriteString( strPrompt, strExeFileName ); result := true; end

else result := false; //善后处理 CloseKey; Free; end; end;

{ 调用StartUpMyProgram,使Delphi随WINDOWS启动而自动运行 } procedure TForm1.Button1Click(Sender: TObject); begin

memo1.lines.add('开始');

if StartUpMyProgram('delphi','C:\\Program Files\\borland\\delphi3\\bin\\delphi32.exe') then memo1.lines.add('成功') else

memo1.lines.add('失败') end;

应用之二:实现文件关联

当MS WORD安装在你的系统中时,它会把.DOC文件与自己关联,当你双击一个DOC文件,就会启动MS WORD,打开你指定的DOC文件.你也可以把一个文件类型与一个程序关联起来,其秘密还是在注册表中.如

果打开注册表,找到HKEY_CLASSES_ROOT,就会发现这里已经有很多文件类型。你也可以在这里增加一个键,建立自己的文件关联.

建立文件关联,一般应有两个步骤:

(1)根据文件类型的扩展名,指定对应的键名(如doc文件对应的键为doc_auto_file),该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明。

(2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息

例如,我们可以为.DBF文件建立文件关联,其文件类型说明为"xBase数据表",使其打开(Open)文件的操作对应程序C:\\Program Files\\Borland\\DBD\\DBD32.EXE.首先,应在注册表的根键HKEY_CLASSES_ROOT下建立一个键,键名为.DBF,默认值为DBF_Auto_File,表示DBF类型文件的关联操作信息记录在键

HKEY_CLASSES_ROOT\\DBF_Auto_File下;然后,建立键HKEY_CLASSES_ROOT\\DBF_Auto_File,并设其默认值为"xBase数据表",表示文件类型说明;再建立键

HKEY_CLASSES_ROOT\\DBF_Auto_File\\Shell\\open\\command,设置其默认值为C:\\Program Files\\Borland\\DBD\\DBD32.EXE %1(其中"%1"为命令行参数),表示打开操作对应的程序信息。 具体实现如下:

同样,在Uses中加上Registry单元,然后,写下面代码.

{ 将文件类型strFileExtension与程序strExeFileName相关联,strDiscription为文件类型说明 } function AssignToProgram( strFileExtension,strDiscription,strExeFileName : string ) : boolean; var

registerTemp : TRegistry; begin

registerTemp := TRegistry.Create; //建立一个Registry实例 with registerTemp do begin

RootKey:=HKEY_CLASSES_ROOT;//设置根键值为HKEY_CLASSES_ROOT Ini文件操作 1. 2. 3. 4. 5. 6.

首先在程序文件系统中建立一个INI文件(可以拷贝后修改) 在程序中Use IniFiles文件;

声明一个TIniFile对象iniinfo :TIniFile;; 打开INI文件; 进行读写操作。 释放对象 代码如下

Uses IniFiles; ??

procedure TFrmInfo.FormShow(Sender: TObject); var

iniinfo:TIniFile; begin

iniInfo:=TInIFile.Create(dir+'\\MyInfo.INI'); //打开INI文件 try //**INI读文件

EdName.Text:=iniInfo.ReadString('PersionInfo','Name','赵智勇');

EdBornDate.Text:=iniInfo.ReadString('PersionInfo','BornDate','1982-03-21'); EdDo.Text:=iniInfo.ReadString('PersionInfo','Work','Software Developer');

EdPhone.Text:=iniInfo.ReadString('PersionInfo','Phone','13194368966'); EDHome.Text:=iniInfo.ReadString('PersionInfo','Home','吉林省长春市'); Finally

freeAndNil(IniInfo); //释放对象 end;

文本文件操作

步骤:声明一个Text类型的文件指针>>AssignFile方法关联文件>>打开文件>>读写文件>>关闭 应用如下:已建文本文件wenben.txt,有如下程序 procedure TForm1.Button3Click(Sender: TObject); var

f: textfile; //声明文件指针 i:integer; begin

assignfile(f,'wenben.txt'); //文件指针和外部文件关联

//用Readln方法读取一行文本,Writeln方法向文本中写入一行

rewrite(f); //打开文件(三种打开方式:Append、Reset和Rewrite) for i:=1 to 50 do writeln(f,i); //写入文本

//用Readln方法读取一行文本,Writeln方法向文本中写入一行 closefile(f); end;

值得注意到是,有函数eoln(f)判断是否已到行末;可以用memo1.Lines.LoadFromFile('wenben.txt')和memo1.Lines.savetoFile('wenben.txt')等方法读写文本文件数据

二进制文件操作

读写程序实例:

procedure TForm1.Button1Click(Sender: TObject); var

f:file of integer; //声明文件指针(注意和文本文件的区别) i:integer; begin

assignfile(f,'erjinzhi.txt');

rewrite(f); //打开文件

for i:=1 to 50 do write(f,i); //循环方法写数据,注意是函数write(); closefile(f); end;

procedure TForm1.Button2Click(Sender: TObject); var

f:file of integer; i:integer; begin


Delphi控件使用1.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏教版五年级语文上册期末试卷及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: