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可以设置用户是否可以编辑表格中的数据。
Vtchart控件(excel立体图控件)
Win3.1页
资源管理器的制作(实例)
界面以及运行结果
制作步骤,在win3.1页中加入DriveComboBox1,DirectoryListBox1,FileListBox1,FilterComboBox,然后连接各控件(设置DriveComboBox1的DirList属性为DirectoryListBox1,DirectoryListBox1和FilterComboBox对filelist属性为FileListBox1),最后打开FileListBox1的Filter属性设置过滤特性,形式如下
相关控件的重要属性:
Filelistbox控件:
FileEdit:与Edit控件相关联,显示选中的文件名;
Mask:屏蔽文件;
ShowGlphy :显示文件图标。
DirectoryListBox控件:
DirLabel :与Label控件关联,在Label控件中显示文件夹带路径;
Filelist :和Filelistbox控件:相关联。
Sample中的Shell Control 控件
,就是ShellTreeView,ShellListView,ShellComboBox和ShellChangeNotifier控件。
第三方控件
1. 托盘控件TrayIcon(D:\Delphi第三方控件,安装后位于Samples页中)
步骤:第一步,拖放控件至窗口,然后再添加一个ImageList控件,且添加图标
第二步,设置Icons属性为Imagelist,Animate属性和AnimateInterval控制动画效果;Visible控制可见性;Hint显示提示信息。
delphi应用
模板应用
1新建窗体file\new\Others…>>Form,如下
各个窗体为:
2新建对话框file\new\Others…>>Dialog,如下
可以建立如下对话框:密码输入;标准对话框;带help的对话框,也可以用对话框向导建立需要的对话框。
,
3 应用程序生成
主要包括多窗体、但窗体应用程序生成,可通过ApplicationWizard来建立个性化的应用程序。如下图
技巧
通用知识
快捷菜单的使用
依次为New, Open, Save, Saveall, 打开工程,添加文件(文件已经存在),从工程中移除文件(不删除)
依次为 打开代码/窗口对话框,代码/窗口切换,新建窗体。
代码结构
(紫兰为接口部分,包括use<引用单元>,type<组件、过程、函数,声明?>,var<变量>,use<引用单元>)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Caption := \'xyz\';
end;
end.
窗体属性和事件
a. 窗体透明度设置:Alphablend := true >> AlphablendValue :=k (k在0到255之间)
b. 右上角按钮有无设置:BorderIcons属性(即关闭、最大、最小、问号等按钮)
c. 边框设置:Borderstyle属性,其中为bsNone时无边框,为bsDialog时只有关闭按钮,其他不可改。
d. OnKeyPress事件:窗体激活状态时的键盘事件,参照“键盘的ASC码”应用如下
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin //按Enter键窗体变红
if key = #13 then Form1.Color := clred;
end;
d. OnMouseMove事件:在组件区域内鼠标移动时发生
e. TabOrder属性可以用来设置组件的(初始)焦点
f. 窗体的Onpaint事件,应用见“界面设计技巧”>>窗体背景色渐变
窗体重画
在Form的Canvas上画了很多东西,但窗口移动了一下之后画的东西全没了,怎么解决?
>>重画!将你的过程放在OnPaint事件里!一般在Form的OnPaint事件中写画画的代码。
窗体关闭询问
窗体关闭前会触发ONCloseQuery事件,该事件中的参数canclose是boolean型的
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if application.MessageBox(\'您将要关闭本窗口!确认是否继续?\',\'询问\',MB_YESNO+MB_ICONQUEStION)=ID_NO then
begin
CanClose:=false;
end;
end;
数据类型
1 指针的使用:首先声明指针类型,再声明指针变量
2 变体数据类型Variant和其他数据类型结合使用时自动转换类型
如
V:variant
则:V:= 10; V:= 12.3;V:=’hello’;都是可以的。
Goto 语句的使用
procedure TForm1.Button1Click(Sender: TObject);
label N1;//保留字label声明标号
label N2;
begin
goto N2;
N1: begin
Edit2.Text := Edit1.Text;
edit2.Color := clred;
exit; //程序执行完毕
end;
N2: Edit3.Text := edit1.Text;
goto N1;
end;
使用注意点:语句要在同一过程/函数中使用,不能跨块操作;尽量在同一结构语句中使用;
自定义过程编写
三步:首先在单元文件的Type>Private下定义(在关键字 过程名,如:procedure greetings);再声明过程功能,包括参数类型说明;过程调用
应用如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure greetings; //定义过程
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
greetings; //调用过程
end;
procedure TForm1.greetings; //声明过程(功能)
begin
form1.Color := clRed;
end;
end.
以上为无参过程应用,有参过程如下
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure exchange(var a,b :string);
{ //定义过程,特别注意与声明部分地一行唯一的区别就是没有了“Tform1.”的前缀(声明部分必须有,而定义过程则必须要有参数说明即:(var a,b :string))}
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
x,y:string;
begin
x := edit1.text;
y:= edit2.text;
exchange(x,y); //调用过程
edit3.text := x;
edit4.text := y;
end;
procedure Tform1.exchange(var a,b :string); //声明过程(功能)
var temp : string;
begin
temp := a;
a:= b;
b := temp;
end;
end.
运行界面如下
自定义函数编写
PART1
和过程编写大致一样,注意的地方:必须指定返回值的类型,且函数调用,只能出现在一个表达式中
应用如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function max(var x,y:real):real; //函数定义,必须指定返回值的类型
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Tform1.max(var x,y:real):real; //函数声明,必须指定返回值的类型
begin
if x >y then max := x else max := y; //以函数名或本地变量Result作为返回值变量
end;
procedure TForm1.Button1Click(Sender: TObject);
var a,b:real;
begin
a := strtofloat(edit1.Text);
b := strtofloat(edit2.Text);
edit3.Text := floattostr(max(a,b)); //函数调用,只能出现在一个表达式中
end;
end.
运行界面
PART2 函数的返回类型
可以使用Variant类型,
当函数返回类型可以为array时,举例如下:
type
TArrayInt = array of Integer;
function f: TArrayInt;
begin
end;
PART2 用二维动态数组做函数或过程的参数
1.普通的情况
type
TArrAr r= array of array of Integer; //假设是Integer类型的
procdure proc_name(Arr1: TArrArr);
function ...
2. 使用Variant
procdure proc_name(Arr1: Variant);
function ...
Project Options设置
a. 主菜单设置Project>>Options>>Forms页,设置mianform(方法一),也可以在Project代码窗口修改代码,如下设置form2为主窗口:
program Project1;
uses
Forms,
Unit1 in \'Unit1.pas\' {Form1}, //对这部分次序无要求
Unit2 in \'Unit2.pas\' {Form2},
Unit3 in \'Unit3.pas\' {Form3};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2); //Form2首先出现
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm3, Form3);
Application.Run;
end.
动态创建组件
例如创建一个按钮,name为button,父体为panel1,
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Button :tbutton; //组件的类
begin
Button:=Tbutton.create(self);
Button.parent:=panel1; //指定父体
//位置设置
Button.left := 20; //
Button.top := 30;
//Caption属性设置
Button.caption:=\'OK\';
button.Font.Color := CLPURPLE;
//大小设置
button.Width := panel1.Width div 3 ;
button.Height := panel1.Height div 5;
end;
运行界面
几组易混淆的概念
一、Owner和Parent的区别:
Parent属性是指构件的包容器,构件只能在此范围内显示和移动。举例子如下:
(1)在Form1的窗体上,放一个Panel1,并将Panel1拉大,
(2)在Panel1上放一Button1;
(3)在Form1上放一Button2。
现在如果移动Panel1,则Button1随着Panel1移动,这是因为Button1的Parent是Panel1。现在将Button2移到Panel1上,再次移动Panel1,Button2并不跟着移动,这是因为Button2的Parent是Form1。除在窗体设计中,应注意构件的Parent是谁外,在动态创建构件时,也应指出构件的Parent,如在上例中继续操作:
1)Procedure Tform1.Button2click(Sender:Tobjet);
2)Var
3) Button:Tbutton;
4) Begin
5) Button:Tbutton.cerate(self);
6) Button.parent=panel1;
7) Button.lleft=0;
8) Button.top=0;
9) Button.caption:=OK;
10) End;
当按Button2时,将在Panel1上创建一个Button,而如果把第6句改为Button.parent:=self;按Button2时,将在Form1上创建一个Button了。如果将第6句删除,按Button2时,什么都不会发生,这是因为创建方法无法知道应在哪里显示构件。
Owner属性是指构件的所有者,它负责构件的创建和释放。如在上例中,系统默认窗体上所有构件的所有者是窗体,而窗体的所有者是Application。顺便指出,create方法应带有表示构件所有者的参数,如在上例中,构件所有者是窗体,即self。
Parent属性和Owner属性是运行阶段的属性,只能在运行阶段,通过代码设置。
二、Self和Sender的区别:
在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的构件,如在上例中,Sender就指Button2,有了Sender参数,可以使多个构件共用相同的事件处理程序,如下例:
Procedure Tform1.Buttonclick(Sender:Tobject);
Begin
If sender=button1 then
Label1.caption:=′看庭前花开花落
′ Else Label2.caption:=′望天上云卷云舒′
End;
在此例中,Button1,Button2共用了Buttonclick事件处理程序。
Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表Tform1。另外应注意,self而不能用在过程或函数中,如下例用法是错的:
Function a1(B:Integer):Integer;
Begin
……
Button:=tbutton.create(self);……
End;
三、Clientheight和Height,Clientwidth和Width的区别:
对于一般的构件而言,Height就是Clientheight,Width就是Clientwidth,而对于窗体而言,Height是包括标题条在内的高度,而Clientheight是指窗体工作区的高度。同理,Clientwidth是指定窗体工作区的宽度。
从上面陈述可知,理解Ower和Parent,Self和Sender,Clientheight和Height,Clientwidth和Width区别,对于Delphi中正确编程是重要的。
Delphi中动态设置ODBC数据源
在DELPHI数据库应用程序中,我们访问数据库通常有两种方法.一种是通过BDE数据库搜索引擎,即利用DELPHI自带的数据库驱动程序,这种方法的优点是速度快,但应用范围有限,当数据库版本更新时,有可能不能用于操作新的数据库;另一种方法是通过ODBC,这种方法的优点是可以随操作系统(如WINDOWS)提供,作为标准接口能适应多种数据库,缺点是速度慢.在编程时,我们可以根据需要选择其中的一种方法.
ODBC管理程序设置DSN的秘密在注册表中,不信可以到HKEY_LOCAL_MACHINE\Software\ODBC去看看,肯定让你感觉已经成功了一半.
首先来看看系统中已安装的ODBC数据库驱动程序.在HKEY_LOCAL_MACHINE\Software\ODBC\ ODBCInst.INI中,存放着已经安装了的ODBC数据库驱动程序的信息,从这里可以查到已安装的ODBC数据库驱动程序对应的DLL文件等信息.在ODBCInst.INI\ODBC Drivers的各个键值中,键名是驱动程序名称(如Microsoft Access Driv(*.mdb)),键值为“Installed”,表示驱动程序已安装.在ODBCInst.INI\DriverName(DriverName为一个驱动程序名称,如Microsoft Access Driver(*.mdb))中,有驱动程序的详细信息,我们主要从这里获得ODBC驱动程序对应的DLL文件的路径和文件名,即键名Driver的键值,一般为"C:\WINDOWS\SYSTEM\FileName.DLL".
然后来看系统DSN的注册信息,在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中,存放着系统 DSN的注册信息,我们在ODBC管理面板设置的DSN参数就在这里.
下面来看 唇ㄒ桓鯫DBC系统DSN的步骤,即我们在ODBC管理面板中完成参数设置后,ODBC管理程序是怎么在注册表中注册DSN信息的.以创建一个名称为MyAccess的Ms Access97类型的系统DSN为例,我们指定的参数主要有数据库类型(Microsoft Access Driver(*.mdb))、数据源名称(MyAccess)、数据源描述(我的ACCESS)、数据库路径(C:\Inetpub\wwwroot\Test.mdb),其它参数如用户名称、用户密码、独占、只读、系统数据库、默认目录、缓冲区大小、扫描行数、页超时等采用系统缺省参数.这时,注册系统DSN一般应有以下几个步骤:
1.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources中增加一个字符串键值,为MyAccess = Microsoft Access Driver(*.mdb),其中分别为数据源名称和数据库类型.这是在注册表中注册一个系统DSN名称.
2.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI中创建一个子键(SubKey)MyAccess,即创建一个键为HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess,然后在其下创建一些键值,详细描述一个系统DSN的配置信息,主要信息有([]中的内容为笔者注释):
DBQ=C:\Inetpub\wwwroot\Test.mdb
[字符串,表示数据库路径]
Description=我的ACCESS
[字符串,表示数据库描述]
Driver=C:\PWIN98\System\odbcjt32.dll
[字符串,表示驱动程序,可见ODBCINST.INI]
DriverId=0x00000019(25)
[数字,表示驱动程序标识,不能改变]
FIL=Ms Access;
[字符串,可能与过滤Filter有关]
SafeTransaction=0x00000000
[数字,可能表示支持事务性操作的个数]
UID=""
[字符串,表示用户名称,此处为空字符串]
3.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess中创建一个子键(SubKey)Engines, 再在其下创建子键(SubKey)Jet,即创建一个键为 HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,然后在其下创建一些 键值,详细描述一个系统DSN的数据库引擎配置信息,主要信息有([]中的内容为笔者注释):
ImplicitCommitSync=Yes
[字符串,可能表示是否立即反映数据修改]
MaxBufferSize=0x00000200(512)
[数字,表示缓冲区大小]
PageTimeout=0x00000005(5)
[数字,表示页超时]
Threads=0x00000003(3)
[数字,可能表示支持的最大线程数目]
UserCommitSync=Yes
[字符串,可能表示是否立即将数据修改反映到用户]
以上是建立一个系统DSN的基本信息(其它信息如选项或高级选项等信息也在这里设置,只不过因采用默认信息,注册表里没有列出),我们在程序中按上述步骤操作注册表,同样也能增加一个系统DSN或修改其配置.在下面的例子程序中,将按以上步骤建立一个系统DSN,请注意程序中的注释.
{*******************************************************
在本程序中,将创建一个ODBC系统数据源(DSN),
数据源名称:MyAccess 数据源描述:我的新数据源
数据库类型:ACCESS97
对应数据库:C:\Inetpub\wwwroot\test.mdb
*******************************************************}
{ 注意应在USES语句中包含Registry }
procedure TForm1.Button1Click(Sender: TObject);
var
registerTemp : TRegistry;
bData : array[ 0..0 ] of byte;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
//设置根键值为HKEY_LOCAL_MACHINE
//找到Software\ODBC\ODBC.INI\ODBC Data Sources
if OpenKey(Software\ODBC\ODBC.INI
\ODBC Data Sources,True) then
begin //注册一个DSN名称
WriteString( MyAccess, Microsoft Access Driver (*.mdb) );
end
else
begin//创建键值失败
memo1.lines.add(增加ODBC数据源失败);
exit;
end;
CloseKey;
//找到或创建Software\ODBC\ODBC.INI
\MyAccess,写入DSN配置信息
if OpenKey(Software\ODBC\ODBC.INI\MyAccess,True) then
begin
WriteString( DBQ, C:\inetpub\wwwroot\test.mdb );//数据库目录
WriteString( Description, 我的新数据源 );//数据源描述
WriteString( Driver, C:\PWIN98\SYSTEM\odbcjt32.dll );//驱动程序DLL文件
WriteInteger( DriverId, 25 );
//驱动程序标识
WriteString( FIL, Ms Access; );
//Filter依据
WriteInteger( SafeTransaction, 0 );
//支持的事务操作数目
WriteString( UID, );//用户名称bData[0] := 0;
WriteBinaryData( Exclusive, bData, 1 );
//非独占方式
WriteBinaryData( ReadOnly, bData, 1 );
//非只读方式
end
else//创建键值失败
begin
memo1.lines.add(增加ODBC数据源失败);
exit;
end;
CloseKey;
//找到或创建Software\ODBC\ODBC.INI
\MyAccess\Engines\Jet
//写入DSN数据库引擎配置信息
if OpenKey(Software\ODBC\ODBC.INI
\MyAccess\Engines\Jet,True) then
begin
WriteString( ImplicitCommitSync, Yes );
WriteInteger( MaxBufferSize, 512 );//缓冲区大小
WriteInteger( PageTimeout, 10 );//页超时
WriteInteger( Threads, 3 );//支持的线程数目
WriteString( UserCommitSync, Yes );
end
else//创建键值失败
begin
memo1.lines.add(增加ODBC数据源失败);
exit;
end;
CloseKey;
memo1.lines.add(增加新ODBC数据源成功);
Free;
end;
end;
以上程序在PWIN98+DELPHI3.0下调试通过.
下面是创建常见数据库类型的DSN需要设置的信息([]为注释内容,除特殊注释外,各参数可见前面说明):
1.Access(Microsoft Access Driver(*.mdb))
DBQ、Description、Driver[odbcjt32.dll]、
DriverID[25]、FIL[Ms Access;]、
SafeTransaction[默认为0]、UID[默认为空]、
Engines\Jet\ImplicitCommitSync[默认为Yes]、
Engines\Jet\MaxBufferSize[默认512]、
Engines\Jet\PageTimeout[默认为512]、
Engines\Jet\Threads[默认为3]、
Engines\Jet\UserCommitSync[默认为Yes]
可选设置:SystemDb[字符串,系统数据库的路径]、
ReadOnly[二进制,是否以只读方式打开,1为是,默认为0]、
Exclusive[二进制,是否以独占方式打开,1为是,默认为0]、PWD[字符串,用户密码]
2.EXCEL(Microsoft Excel Driver(*.xls))
DBQ[Excel97(=path\xxx.xls)、5.0/7.0
(=path\xxx.xls)、4.0(=path)、3.0(=path)]、
Description、Driver[odbcjt32.dll]、
DefaultDir[Excel97($#@60; $#@62;DBQ)、5.0/7.0
($#@60; $#@62;DBQ)、4.0(=DBQ)、3.0(=DBQ)]、
DriverID[790(Excel97)、22(5.0/7.0)、278(4.0)、534(3.0)]、
FIL[Excel5.0;]、ReadOnly、SafeTransaction、UID、
Engines\Excel\ImplicitCommitSync、
Engines\Excel\MaxScanRows[数字,扫描行数,默认为8]、
Engines\Excel\Threads、Engines\Excel\UserCommitSync、
Engines\Excel\FirstRowHasName[二进制,第一行是否是域名,1表示是,默认为1]
注: Excel97和Excel7.0/5.0的DBQ对应一个XLS文件,而Excel4.0和Excel3.0则对应一个目录;DefaultDir对应一个目录,在Excel97和Excel7.0/5.0中是DBQ所对应的路径,而在Excel4.0和Excel3.0下则与DBQ相同;各个版本的DriverID不同.
3.dBase(Microsoft dBase Driver(*.dbf))
DefaultDir[字符串,数据库文件所在目录]、
Description、Driver[odbcjt32.dll]、
DriverID[277(IV)、533(5.0)]、
FIL[dbase III;]、SafeTransaction、UID、
Engines\Xbase\ImplicitCommitSync、
Engines\Xbase\Collating[字符串,排序依据,可为ASCII、International、Norwegian-Danish、
Swedish-Finnish]、
Engines\Xbase\Deleted[二进制,是否不显示被软删除的记录,0表示显示,默认为1]、
Engines\Xbase\PageTimeout[默认为600]、
Engines\Xbase\UserCommitSync、
Engines\Xbase\Threads、Engines\Xbase
\Statistics[二进制,是否用大约的行数,1为是,默认0]
注:(dBaseIV和dBase5.0两个版本的DriverId有不同)
4.Foxpro(Microsoft Foxpro Driver(*.dbf))
DefaultDir[数据库文件所在目录]、
Description、Driver[odbcjt32.dll]、
DriverID[536(2.6)、280(2.5)]、
FIL[Foxpro 2.0;]、SafeTransaction、UID、
Engines\Xbase\Collating[字符串,排序依据,可为ASCII、International]、
Engines\Xbase\Deleted[二进制,是否不显示被软删除的记录,0表示显示,默认为1]、
Engines\Xbase\PageTimeout[默认为600]、
Engines\Xbase\UserCommitSync、
Engines\Xbase\Threads、Engines\Xbase
\Statistics[二进制,是否用大约的行数,1为是,默认0]
注:(Foxpro2.5和Foxpro2.6两个版本的DriverId有不同)
把上面程序做成一个COM或ActiveX控件吧,在很多高级程序设计语言如DELPHI、C++Buider、VB、VC、PB中都能用到的.
一些类
A TCursor
设置它可以使鼠标处于不同的显示状态,如
treeview1.Cursor := crHandPoint; //或 treeview1.Cursor := -21;
即使用的方法为 :控件名.Cursor := TCursor type;可以为字符常数或index,可以参考帮助主题TCursor type
B TRegIniFile
TRegIniFile是Delphi提供的一个标准注册表操作类。该类的WriteString方法可以向注册表中添加或修改一个字符串值。
Tapplication类
TApplication类是用于描述Delphi编制的应用程序的一个类。通过对这个类的灵活应用可以编制许多有特点的程序。下面我们就举几个这方面的例子。
---- 1 检测当前Windows程序是否被激活:
---- Tapplication类有一个属性——Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点。检测的代码如下:
If Application.Active=False then
ShowMessage(’当前窗口没有被激活’);
---- 2 取得当前程序的名称:
---- Tapplication类的EXEName属性可以返回这个可执行程序的完整文件名(包含路径)。实现的代码如下所示:
---- ShowMessage(Application.ExeName);
---- 3 改变程序极小化时的标题
---- 如果您细心观察可以发现,一些程序的标题和程序的名称并不一致,尤其是一些英文程序,窗体的标题栏比较长,可以容纳比较多的文字,而在最小化时,往往变成了很少的几个字母。这中间起作用的就是Tapplication类的Title属性。这个属性决定了程序最小化时的标题,而窗口中标题栏的标题是由Form的Caption属性来决定的。其代码如下:
Form1.Caption:=’ 窗口的标题’;
Application.Title:=’程序的标题’;
---- 其实我们也可以在在程序设计时指定Tapplication类的Title属性值。操作的方法是在开发环境中拉下Project菜单,选择Options菜单时弹出如图1 (略)的对话框。在这个对话框中的Title栏中填写程序的标题一样也可以达到这种效果。并且因为一般的工程文件都是以英文命名的,所以程序运行过程中弹出的消息框中的标题是英文。但在指定了这个属性之后,这个程序的所有消息窗口的标题都变为Title的值。这就使得程序看起来更加完整。
---- 4 指明程序的主窗口
---- Windows系统中的界面都是窗口,但一般来讲有一个主窗口。Tapplication的MainForm属性(TForm类型数据)就可以返回程序的主窗口。
---- 5 显示消息框
---- 6 控制窗口的尺寸
---- 一般可以用窗口手柄来调整窗口的尺寸,但是也可以用Application的事件来调整。实现的方法是用以下两个过程:
Application.Minimized;
Application.Restore;
---- 前一个过程用来将程序的主窗口最小化,而后一个过程用来将最小化的窗口恢复到原来的尺寸。
---- 7 链接联机帮助文件
---- Application的CurrentHelpFile属性能够指定当前程序所用的联机帮助文件的文件名。这个属性经常与另一个方法联合在一起使用。举例如下:
Application.HelpFile := \'联机帮助文件名\';
Application.HelpJump(\'联机帮助文件的主题’)
---- 通过这一命令组合,我们就能使系统弹出一个显示某主题的联机帮助文件。
---- 8 在程序运行时动态地创建窗口
---- 一般情况下,窗口是在设计时加入到工程项目中的,但是有时也需要我们在程序运行时动态地加入窗口,这就要用到Application 的CreateForm过程,举例如下:
Form3:Tform3; //声明窗口类
Application.CreateForm(TForm3, Form3); //创建窗口
---- 9 结束程序
---- 虽然我们可以用关闭主窗口的方法来关闭一个程序,但是更好的办法是用Application的Terminate过程。它能够起到更彻底地关闭程序的效果。
---- 10 Destroy 属性.
---- 虽然Delphi提供了这一属性,但是并不提倡使用它,如果要终结程序就要调用Terminate过程,而Destroy过程一般是用来在程序发生悬挂时来退出程序时才调用,有些类似Windows中的结束任务功能。它不仅能关闭程序实例本身,而且还能释放程序所占用的资源,能够达到将程序彻底清除出系统的目的
异常类
》》文件链接
1. 异常类的基类是TObject ,参考帮助主题Exception
2. 主要属性:Message;主要方法:Create,CreateFmt,CreateFmtHelp,CreateHelp,
3. raise保留字产生异常;
4. 通过try…finally语句和try…except语句嵌套来完成异常处理和资源释放
5. Delphi提供了一个保留字finally,用于实现资源的保护:
{分配资源}
Try
{资源使用情况}
finally
{释放资源}
end;
try…finally…end就形成了一个资源保护块。finally后面的语句是在任何情况下,不论程序是否发生异常,都会执行的。
比如下面一段程序就会造成1K内存资源的丢失。
var
APointer : Pointer ;
AInt , ADiv: Integer ;
begin
ADiv := 0;
GetMem ( APointer , 1024 );
AInt := 10 div ADiv ;
FreeMem ( Apointer , 1024 ); //不可能有执行的机会
end;
由于程序从异常发生点退出从而FreeMem永远没有执行的机会。
如下代码即可确保所分配内存资源的释放:
var
APointer : Pointer ;
AInt , ADiv : Integer;
begin
ADiv := 0;
GetMem ( APointer , 1024 );
try
AInt := 10 div ADiv ;
finally
FreeMem ( Apointer , 1024 );
end;
end;
一般的,程序
如何自动配置BDE
如果是单机数据库(如paradox,Xbase)直接在Install Shield的BDE/IDAPI中设定:
点击specify InstallShield Objects for Delphi 5下的General Options
选择BDE(Borland Database Engine)项,然后点击“settings...”按钮,选full BDE installation,创建一个别名,设定路径,类型。OK
如果是大型数据库(如sql srever):
点击specify InstallShield Objects for Delphi 5下的General Options
选择BDE(Borland Database Engine)和sql links项,然后点击“settings...”按钮,选full BDE installation,创建一个别名,设定路径,类型。OK
记录类型的使用
界面设计和输出结果如下
代码如下
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type Tmyrecord = record //定义用户的数据类型(记录类型)①
a:string;
b:string;
c :integer;
end;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function f : Tmyrecord; //定义函数 ②
public
{ Public declarations }
end;
var
Form1: TForm1;
re1 : Tmyrecord; //声明记录变量③
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.f: Tmyrecord;
begin //给记录变量赋值(对记录变量操作)④
re1.a := \'string\';
re1.b := \'string2\';
re1.c := 128;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
f; //调用函数
edit1.Text := re1.a;
edit2.Text := re1.b;
edit3.Text := inttostr(re1.c);
end;
end.
几点说明:
1. ①必须在②前,否则出错,这是因为要先定义类型再引用类型
2. 声明记录变量在Var部分,是先声明记录变量,然后再对记录变量赋值(或操作)
3.完成了③,在④部分操作时,当输入“记录变量名.”后,系统经自动提示记录,如re1中的abc
Ordinal type 的操作
Ordinal types include integer, character, Boolean, enumerated, and subrange types. Several predefined functions operate on ordinal values and type identifiers.
High ,Low,Pred,Succ,Ord ,使用参考Delphi帮助主题“Ordinal types”
使用举例如下
代码如下
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := pred(\'b\');
edit2.Text := inttostr(succ(5));
edit3.Text:= inttostr(high(Byte));
end;
delphi参数的传递
在Object Pascal中,参数可以分为数值参数(Value)、变量参数(Variable)和常量参数(Constant)3种。默认为数值参数,数值参数总是具有确定的类型。
一般来说,形参列表和实参列表完全匹配是指参数的个数一样,而且顺序排列的数据类型也完全一致。对于一般的函数,如果编译器发现实参的数据类型与形参的数据类型不匹配,会将实参的数据类型进行一次或多次的“提升",比如,将Integer类型转换为Double类型。
2.数值参数
数值参数在运行过程中只改变其形参的值,不改变其实参的值,参数的值不能传递到过程的外面。形参和实参占用不同的内存单元,在过程或函数被调用时,将实参的值复制到形参占用的内存中,相当于C语言函数调用中的传值。因此过程或函数运行结束后,形参和实参的数值是不同的,且实参的值不能发生变化。数值参数必须是一个表达式,且表达式的类型不能是文件类型或包含文件的其他结构类型。
3.变量参数
在有关形参前加上保留字var,这样定义的参数称为变量参数,这时在过程或函数调用中的实际参数必须是变量的引用,在过程或函数的执行期间,这个变量参数就代表了实际参数,改变了变量参数也就改变了实际参数。
4.常量参数
如果当过程或函数执行时要求不改变形参的值,最好的办法就是使用常量参数。在定义形式参数表的有关参数前加上保留字const,就可以定义常量参数。
常量参数可以像局部只读变量一样使用,其初值来自过程或函数调用时的实参,实参必须是一个表达式,且表达式的类型不能是文件类型或包含文件类型的其他结构类型。
不允许在过程或函数中给常量参数赋值,并且常量参数不能作为实参传递给另外一个过程或函数。
5.参数默认值
……
6.参数传递的顺序 .
……
程序的驻留和内存释放\动态创建窗体
1. 自动创建窗体。正常创建的窗体,在project/options的左边Auto-Create forms栏中,
工程启动时窗体自动创建且被送往系统内存。但会造成内存的开销。
2. 调用窗体。指的是调用右边的Available Forms,调用代码示例如下
procedure TForm1.Button1Click(Sender: TObject);
var f : pointer; //定义指针变量
begin
try
getmem(f,1024000); //分配内存变量
if form2 = nil then form2 := Tform2.Create(self); {若Form2为Available Form(窗体属性为Nil)时创建窗体}
form2.show;
finally
FREEmem(f,1024000); //释放内存变量
end;
end;
3. 窗体的释放
示例:释放窗体Form1
方法一 Form1.Release或Form1.Free;
方法二 在Form1窗体添加Onclose事件,代码中写入action := cafree;
方法三 FreeAndNil(Form1); //释放,并且把窗体转化为Available Form
>>两步搞定动态创建窗体:1.project文件中删除代码;2.在所有的show方法前加上窗体名 := T窗体名.Create(nil);
程序开机自动运行
在系统启动时自动运行程序最常用的方法就是在系统注册表中“Hkey_local_machine\software\microsoft\windows\currentversion\run”键下添加Windows启动后自动启动的程序,利用TRegIniFile类的WriteString方法写入或修改注册表的字符串值。
procedure TForm1.zdyx(a, b: string; c: boolean);
var
d: string;
e: TReginiFile;
begin
if c then
d := \'once\'
else
d:= \'\';
e := TRegIniFile.Create(\'\');
e.RootKey := HKEY_LOCAL_MACHINE;
e.WriteString(\'software\microsoft\windows\currentversion\run\'+d +#0,a,b); //写入字//符串值到注册表
e.Free ;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
self.zdyx(\'ZDYX\',application.ExeName,false);
end;
注册表操作
*****************实例荟萃
参见实例247
该实例实现了创建键reg,并读取某键下的数据100100,010101,如下图:
参见实例248
该实例首先创建键reg,然后在键值项password和user中写入键值31,123;
校对按钮校对输入框内的用户名和密码是否和注册表的用户名和密码一致。
读写键值注意windows的版本!
参见实例251,本实例完成桌面图标的隐藏和显示
(桌面也是一个窗口,该窗口的类名为ProgMan,用Findwindow函数返回窗口句柄,然后再调用ShowWindow函数使它隐藏或显示)
procedure TForm1.Button1Click(Sender: TObject);
var
deskhandle: THandle;
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<CURRENT_USER\software\Microsoft\Internet Explorer\main”下有个名称为Start Page的字符串值,其中的字符串值就是\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表示操作成功。
请发表评论