什么叫把AMIN文件夹如何对应放入文件夹游戏目录

delphi控件施用
delphi控件使用
Standard页
1- Tlistbox控件
重要属性items.*
举例,界面设计如下左,执行结果如下右:
procedure TForm1.Button1Click(Sender: TObject);
edit1.Text := maT
edit2.Text := listbox1.Items.T
edit3.Text := listbox1.Items.GetNameP
edit4.Text := listbox1.Items.Strings[1];
edit5.Text := listbox1.Items.DelimitedT
edit6.Text := listbox1.Items.Names[1];
由执行结果知,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\I 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的组合;
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: B
HotTrack: B 实现热追踪
Selected: TTreeN
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: B是否显示树结构钱的+、-号
具体使用如下
node :T //定义树节点类型
//增加选中节点的子节点,并展开
node := treeview1.S //支点选择
treeview1.Items.AddChild(node,'增加节点'); //增加子节点
node.Expanded := //展开支点
//增加选中节点的同级节点
pnode := treeview1.Selected. //指向父节点
treeview1.Items.AddChild(pnode,'增加的同级节点'); //增加子节点(该节点的父节点的子节点为该节点同级节点)
标题头控件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控件以保持和系统时间的同步性)
功能:开发快捷键
右击生成按钮和分割符;对应的按钮的Style属性选择按钮属性,共5种;按钮的MenuItem属性选择关联的下拉菜单,按钮的PopMenu属性选择关联的右键菜单。Hint和ShowHint配合使用显示提示(Hint输入提示文字,ShowHint设置为true)
实际使用步骤:1.在Win32页中拖入imagelist控件,并双击打开添加图片;2.添加toolbar控件,设置hotimages和images属性为imagelist空间,然后在上面添加工具按钮,并设置工具按钮imageIndex属性,下一步就设置menuItem属性选择关联彩单。
右击生成Bans;
D7的TXPManifest控件
如果你的操作系统是XP,将TXPManifeS加入到窗体上,就可以使窗体以及其他所有孔件实现XP效果。如果不是XP系统就没有任何用处。
OLE(对象联结和嵌入容器)
右击控件选择Insert Object 弹出Ole Insert Object对话框,促啊如OLE服务器对象。常见命令如下
OleContainer1.InsertObjectD//弹出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页中加入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;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
button1.Caption := 'xyz';
窗体属性和事件
a. 窗体透明度设置:Alphablend := true && AlphablendValue :=k (k在0到255之间)
b. 右上角按钮有无设置:BorderIcons属性(即关闭、最大、最小、问号等按钮)
c. 边框设置:Borderstyle属性,其中为bsNone时无边框,为bsDialog时只有关闭按钮,其他不可改。
d. OnKeyPress事件:窗体激活状态时的键盘事件,参照“键盘的ASC码”应用如下
procedure TForm1.FormKeyPress(Sender: TO var Key: Char);
begin //按Enter键窗体变红
if key = #13 then Form1.Color :=
d. OnMouseMove事件:在组件区域内鼠标移动时发生
e. TabOrder属性可以用来设置组件的(初始)焦点
f. 窗体的Onpaint事件,应用见“界面设计技巧”&&窗体背景色渐变
在Form的Canvas上画了很多东西,但窗口移动了一下之后画的东西全没了,怎么解决?
&&重画!将你的过程放在OnPaint事件里!一般在Form的OnPaint事件中写画画的代码。
窗体关闭询问
参见实例047
窗体关闭前会触发ONCloseQuery事件,该事件中的参数canclose是boolean型的
procedure TForm1.FormCloseQuery(Sender: TO var CanClose: Boolean);
if application.MessageBox('您将要关闭本窗口!确认是否继续?','询问',MB_YESNO+MB_ICONQUEStION)=ID_NO then
CanClose:=
1 指针的使用:首先声明指针类型,再声明指针变量
2 变体数据类型Variant和其他数据类型结合使用时自动转换类型
则:V:= 10; V:= 12.3;V:=’hello’;都是可以的。
Goto 语句的使用
procedure TForm1.Button1Click(Sender: TObject);
label N1;//保留字label声明标号
Edit2.Text := Edit1.T
edit2.Color :=
//程序执行完毕
N2: Edit3.Text := edit1.T
使用注意点:语句要在同一过程/函数中使用,不能跨块操作;尽量在同一结构语句中使用;
自定义过程编写
三步:首先在单元文件的Type&Private下定义(在关键字 过程名,如:procedure greetings);再声明过程功能,包括参数类型说明;过程调用
应用如下:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
//定义过程
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
//调用过程
procedure TForm1. //声明过程(功能)
form1.Color := clR
以上为无参过程应用,有参过程如下
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
procedure exchange(var a,b :string);
{ //定义过程,特别注意与声明部分地一行唯一的区别就是没有了“Tform1.”的前缀(声明部分必须有,而定义过程则必须要有参数说明即:(var a,b :string))}
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
x := edit1.
y:= edit2.
exchange(x,y); //调用过程
edit3.text :=
edit4.text :=
procedure Tform1.exchange(var a,b :string); //声明过程(功能)
var temp :
运行界面如下
自定义函数编写
和过程编写大致一样,注意的地方:必须指定返回值的类型,且函数调用,只能出现在一个表达式中
应用如下:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Button1: TB
Label1: TL
Label2: TL
Label3: TL
procedure Button1Click(Sender: TObject);
{ Private declarations }
function max(var x,y:real): //函数定义,必须指定返回值的类型
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
function Tform1.max(var x,y:real): //函数声明,必须指定返回值的类型
if x &y then max := x else max := //以函数名或本地变量Result作为返回值变量
procedure TForm1.Button1Click(Sender: TObject);
a := strtofloat(edit1.Text);
b := strtofloat(edit2.Text);
edit3.Text := floattostr(max(a,b)); //函数调用,只能出现在一个表达式中
PART2 函数的返回类型
可以使用Variant类型,
当函数返回类型可以为array时,举例如下:
type TArrayInt = array of I function f: TArrayI begin
PART2 用二维动态数组做函数或过程的参数
1.普通的情况 type TArrAr r= array of array of I //假设是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;
Unit1 in 'Unit1.pas' {Form1}, //对这部分次序无要求
Unit2 in 'Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.res}
Application.I
Application.CreateForm(TForm2, Form2); //Form2首先出现
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm3, Form3);
Application.R
动态创建组件
例如创建一个按钮,name为button,父体为panel1,
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
Button : //组件的类
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;
几组易混淆的概念
一、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);
  3) Button:T
  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);
  If sender=button1 then
  Label1.caption:=′看庭前花开花落
′   Else Label2.caption:=′望天上云卷云舒′
  在此例中,Button1,Button2共用了Buttonclick事件处理程序。
  Self是指所编的程序范围是在哪一个类中,Delphi中大都在窗体范围内编程,因此,self即指窗体,如果在编写一个类或是一个组件,则self指该类或组件。我们在函数或过程的声明中可看出self是代表哪个组件,即self代表‘.’号之前的组件,如在第一个例子中,self代表Tform1。另外应注意,self而不能用在过程或函数中,如下例用法是错的:
Function a1(B:Integer):I
  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\ODBCDrivers的各个键值中,键名是驱动程序名称(如MicrosoftAccessDriv(*.mdb)),键值为“Installed”,表示驱动程序已安装.在ODBCInst.INI\DriverName(DriverName为一个驱动程序名称,如MicrosoftAccessDriver(*.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的MsAccess97类型的系统DSN为例,我们指定的参数主要有数据库类型(MicrosoftAccessDriver(*.mdb))、数据源名称(MyAccess)、数据源描述(我的ACCESS)、数据库路径(C:\Inetpub\wwwroot\Test.mdb),其它参数如用户名称、用户密码、独占、只读、系统数据库、默认目录、缓冲区大小、扫描行数、页超时等采用系统缺省参数.这时,注册系统DSN一般应有以下几个步骤:  1.在HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBCDataSources中增加一个字符串键值,为MyAccess=MicrosoftAccessDriver(*.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=0x)[数字,表示驱动程序标识,不能改变]FIL=MsA[字符串,可能与过滤Filter有关]SafeTransaction=0x[数字,可能表示支持事务性操作的个数]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=0x)[数字,表示缓冲区大小]PageTimeout=0x)[数字,表示页超时]Threads=0x)[数字,可能表示支持的最大线程数目]UserCommitSync=Yes[字符串,可能表示是否立即将数据修改反映到用户]  以上是建立一个系统DSN的基本信息(其它信息如选项或高级选项等信息也在这里设置,只不过因采用默认信息,注册表里没有列出),我们在程序中按上述步骤操作注册表,同样也能增加一个系统DSN或修改其配置.在下面的例子程序中,将按以上步骤建立一个系统DSN,请注意程序中的注释.{*******************************************************在本程序中,将创建一个ODBC系统数据源(DSN),数据源名称:MyAccess数据源描述:我的新数据源数据库类型:ACCESS97对应数据库:C:\Inetpub\wwwroot\test.mdb*******************************************************}{注意应在USES语句中包含Registry}procedureTForm1.Button1Click(Sender:TObject);varregisterTemp:TRbData:array[0..0]beginregisterTemp:=TRegistry.C//建立一个Registry实例withregisterTempdobeginRootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE//找到Software\ODBC\ODBC.INI\ODBCDataSourcesifOpenKey(Software\ODBC\ODBC.INI\ODBCDataSources,True)thenbegin//注册一个DSN名称WriteString(MyAccess,MicrosoftAccessDriver(*.mdb));endelsebegin//创建键值失败memo1.lines.add(增加ODBC数据源失败);CloseK//找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息ifOpenKey(Software\ODBC\ODBC.INI\MyAccess,True)thenbeginWriteString(DBQ,C:\inetpub\wwwroot\test.mdb);//数据库目录WriteString(Description,我的新数据源);//数据源描述WriteString(Driver,C:\PWIN98\SYSTEM\odbcjt32.dll);//驱动程序DLL文件WriteInteger(DriverId,25);//驱动程序标识WriteString(FIL,MsA);//Filter依据WriteInteger(SafeTransaction,0);//支持的事务操作数目WriteString(UID,);//用户名称bData[0]:=0;WriteBinaryData(Exclusive,bData,1);//非独占方式WriteBinaryData(ReadOnly,bData,1);//非只读方式endelse//创建键值失败beginmemo1.lines.add(增加ODBC数据源失败);CloseK//找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet//写入DSN数据库引擎配置信息ifOpenKey(Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,True)thenbeginWriteString(ImplicitCommitSync,Yes);WriteInteger(MaxBufferSize,512);//缓冲区大小WriteInteger(PageTimeout,10);//页超时WriteInteger(Threads,3);//支持的线程数目WriteString(UserCommitSync,Yes);endelse//创建键值失败beginmemo1.lines.add(增加ODBC数据源失败);CloseKmemo1.lines.add(增加新ODBC数据源成功);F  以上程序在PWIN98+DELPHI3.0下调试通过.  下面是创建常见数据库类型的DSN需要设置的信息([]为注释内容,除特殊注释外,各参数可见前面说明):1.Access(MicrosoftAccessDriver(*.mdb))DBQ、Description、Driver[odbcjt32.dll]、DriverID[25]、FIL[MsA]、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(MicrosoftExcelDriver(*.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(MicrosoftdBaseDriver(*.dbf))DefaultDir[字符串,数据库文件所在目录]、Description、Driver[odbcjt32.dll]、DriverID[277(IV)、533(5.0)]、FIL[dbaseIII;]、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(MicrosoftFoxproDriver(*.dbf))DefaultDir[数据库文件所在目录]、Description、Driver[odbcjt32.dll]、DriverID[536(2.6)、280(2.5)]、FIL[Foxpro2.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中都能用到的.
设置它可以使鼠标处于不同的显示状态,如
treeview1.Cursor := crHandP //或 treeview1.Cursor := -21;
即使用的方法为 :控件名.Cursor := TCursor type;可以为字符常数或index,可以参考帮助主题TCursor type
B TRegIniFile
TRegIniFile是Delphi提供的一个标准注册表操作类。该类的WriteString方法可以向注册表中添加或修改一个字符串值。
Tapplication类
TApplication类是用于描述Delphi编制的应用程序的一个类。通过对这个类的灵活应用可以编制许多有特点的程序。下面我们就举几个这方面的例子。 ----1检测当前Windows程序是否被激活: ----Tapplication类有一个属性——Active,这个属性就可以描述当前运行的程序是否被激活,成为Windows的焦点。检测的代码如下: IfApplication.Active=Falsethen 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.M Application.R ----前一个过程用来将程序的主窗口最小化,而后一个过程用来将最小化的窗口恢复到原来的尺寸。 ----7链接联机帮助文件 ----Application的CurrentHelpFile属性能够指定当前程序所用的联机帮助文件的文件名。这个属性经常与另一个方法联合在一起使用。举例如下: Application.HelpFile:='联机帮助文件名'; Application.HelpJump('联机帮助文件的主题’) ----通过这一命令组合,我们就能使系统弹出一个显示某主题的联机帮助文件。 ----8在程序运行时动态地创建窗口 ----一般情况下,窗口是在设计时加入到工程项目中的,但是有时也需要我们在程序运行时动态地加入窗口,这就要用到Application的CreateForm过程,举例如下: Form3:Tform3;//声明窗口类 Application.CreateForm(TForm3,Form3);//创建窗口 ----9结束程序 ----虽然我们可以用关闭主窗口的方法来关闭一个程序,但是更好的办法是用Application的Terminate过程。它能够起到更彻底地关闭程序的效果。 ----10Destroy属性. ----虽然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就形成了一个资源保护块。finally后面的语句是在任何情况下,不论程序是否发生异常,都会执行的。
 比如下面一段程序就会造成1K内存资源的丢失。 
APointer : P
AInt , ADiv: I
ADiv := 0;
GetMem ( APointer , 1024 );
AInt := 10 div AD
FreeMem ( Apointer , 1024 ); //不可能有执行的机会
由于程序从异常发生点退出从而FreeMem永远没有执行的机会。
如下代码即可确保所分配内存资源的释放: 
APointer : P
AInt , ADiv : I
ADiv := 0;
GetMem ( APointer , 1024 );
AInt := 10 div AD
FreeMem ( Apointer , 1024 );
一般的,程序
如何自动配置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;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
type Tmyrecord = record //定义用户的数据类型(记录类型)①
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
{ Private declarations }
function f : T //定义函数 ②
{ Public declarations }
Form1: TForm1;
re1 : T //声明记录变量③
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.f: T
begin //给记录变量赋值(对记录变量操作)④
re1.a := 'string';
re1.b := 'string2';
re1.c := 128;
procedure TForm1.Button1Click(Sender: TObject);
f; //调用函数
edit1.Text := re1.a;
edit2.Text := re1.b;
edit3.Text := inttostr(re1.c);
几点说明:
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);
edit1.Text := pred('b');
edit2.Text := inttostr(succ(5));
edit3.Text:= inttostr(high(Byte));
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 : //定义指针变量
getmem(f,1024000); //分配内存变量
if form2 = nil then form2 := Tform2.Create(self); {若Form2为Available Form(窗体属性为Nil)时创建窗体}
FREEmem(f,1024000); //释放内存变量
3. 窗体的释放
示例:释放窗体Form1
方法一 Form1.Release或Form1.F
方法二 在Form1窗体添加Onclose事件,代码中写入action :=
方法三 FreeAndNil(Form1); //释放,并且把窗体转化为Available Form
&&两步搞定动态创建窗体:1.project文件中删除代码;2.在所有的show方法前加上窗体名 := T窗体名.Create(nil);
程序开机自动运行
查看实例234
在系统启动时自动运行程序最常用的方法就是在系统注册表中“Hkey_local_machine\software\microsoft\windows\currentversion\run”键下添加Windows启动后自动启动的程序,利用TRegIniFile类的WriteString方法写入或修改注册表的字符串值。
procedure TForm1.zdyx(a, b: c: boolean);
e: TReginiF
d := 'once'
e := TRegIniFile.Create('');
e.RootKey := HKEY_LOCAL_MACHINE;
e.WriteString('software\microsoft\windows\currentversion\run'+d +#0,a,b); //写入字//符串值到注册表
procedure TForm1.FormCreate(Sender: TObject);
self.zdyx('ZDYX',application.ExeName,false);
注册表操作
*****************实例荟萃
参见实例247
该实例实现了创建键reg,并读取某键下的数据101,如下图:
参见实例248
该实例首先创建键reg,然后在键值项password和user中写入键值31,123;
校对按钮校对输入框内的用户名和密码是否和注册表的用户名和密码一致。
读写键值注意windows的版本!
参见实例251,本实例完成桌面图标的隐藏和显示
(桌面也是一个窗口,该窗口的类名为ProgMan,用Findwindow函数返回窗口句柄,然后再调用ShowWindow函数使它隐藏或显示)
procedure TForm1.Button1Click(Sender: TObject);
deskhandle: TH
deskhandle:= FindWindow('ProgMan',nil);
ShowWindow(deskhandle,SW_HIDE); // 其他窗口显示方式参见
procedure TForm1.Button2Click(Sender: TObject);
deskhandle: TH
deskhandle:= FindWindow('ProgMan',nil);
ShowWindow(deskhandle,SW_SHOW);
参见实例253 本实例实现禁用、启用注册表
procedure TForm1.Button1Click(Sender: TObject);
myr:=Tregistry.C
myr.RootKey:=HKEY_CURRENT_USER;
myr.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer',true); //路径不一定要这个才行
if RadioGroup1.ItemIndex=0 then
myr.WriteInteger('disallowrun',0); //创建键值项,把数据写为零?也就是默认(可以运行),或者说
//对windows不起作用?
MessageDlg('允许使用注册表设置完成', mtInformation,[mbOk], 0 );
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 );
参见实例256,修改IE浏览器默认主页
在“HKEY&CURRENT_USER\software\Microsoft\Internet Explorer\main”下有个名称为Start Page的字符串值,其中的字符串值就是\Internet Explorer的默认主页。
function TFrmStarPage.ShowStartPage:
begin //返回默认主页
reg:=TRegistry.C
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('SoftWare\Microsoft\Internet Explorer\Main',true);
result:=reg.ReadString('Start Page');
Reg.CloseK
procedure TFrmStarPage.SetStartPage(Const Page:string);
begin //设置默认主页
reg:=TRegistry.C
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('SoftWare\Microsoft\Internet Explorer\Main',true);
reg.WriteString('Start Page',page); //Page为网址字符串
Reg.CloseK
procedure TFrmStarPage.FormShow(Sender: TObject);
EdOldPage.Text:=ShowStartP
procedure TFrmStarPage.BtnSetClick(Sender: TObject);
if trim(EDStarPage.Text) = '' then
SetStartPage('about:blank');
SetStartPage(EDStarPage.Text);
procedure TFrmStarPage.BtnCloseClick(Sender: TObject);
********************************************//如下为技术支持
提供了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: CanCreate: Boolean): B   Key:主键名,是键名全名中除去根键的部分,如Software。   CanCreate:在指定的主键名不存在时,是否允许创建该主键,True表示允许。   返回值True表示操作成功。  3.关闭当前主键。  在读取或存储信息之后,应及时将关闭当前主键:procedure CloseKey。  三、从注册表中读取信息  Read系列方法从注册表读取指定的信息(字符串、二进制和十六进制),并转换为指定的类型。  1.Read系列方法。  function ReadString(const Name: string):  读取一个字符串值,Name为字符串名称。  function ReadInteger(const Name: string): I  读取一个整数值,Name为整数名称。  function ReadBinaryData(const Name: var B BufSize: Integer):I  读取二进制值,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 : TR  begin   ARegistry := TRegistry.C  //建立一个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′));     CloseK//关闭主键   D//释放内存      四、向注册表中写入信息  Write系列方法将信息转化为指定的类型,并写入注册表。  1.Write系列方法。  procedure WriteString(const Name, value: string);  写入一个字符串值,Name为字符串的名称,value为字符串值。  procedure WriteInteger(const Name: value: Integer);  写入一个整数值。  procedure WriteBinaryData(const Name: var B BufSize: Integer);  写入二进制值,Name为二进制值的名称,Buffer为包含二进制值的缓冲区,BufSize为缓冲区大小。  其它方法还有:WriteBool、WriteCurrency、WriteDate、WriteDateTime、WriteFloat、WriteTime。  2.写入信息一例。  下面程序使Delphi随Windows启动而自动运行。  var   ARegistry : TR  begin   ARegistry := TRegistry.C  //建立一个TRegistry实例   with ARegistry do   begin   RootKey:=HKEY-LOCAL-MACHINE;   if OpenKey(′Software′,True) then   WriteString(′delphi′,′C:Files.exe′);   CloseK   D      五、键值维护  除了在注册表中读取、存储外,程序可能还需要增加主键、删除主键、主键改名、数据值改名等。  1.创建新主键:function CreateKey(const Key: string): Boolean。  Key即为主键名,返回值True表示操作成功。  2.删除主键:function DeleteKey(const Key: string): Boolean。  Key即为主键名,返回值True表示操作成功。  3.复制或移动主键:procedure MoveKey(const OldName, NewName: Delete: Boolean)。  OldName、NewName分别表示源主键名和目标主键名;Delete表示是否删除源主键,True表示删除,False表示保留。  复制或移动一个主键将复制或移动该子键下的所有数据值和子键内容。  4.判断指定主键是否存在,其下是否有主键,并获取主键名称。  KeyExists用于判断指定主键是否存在:  function KeyExists(const Key: string): B//返回值为True表示主键存在。  HasSubKeys用于判断指定主键下是否有子键:function HasSubKeys: B   返回值为True表示主键下有子键。  GetKeyNames用于获取子键名称:procedure GetKeyNames(Strings: TStrings);  Strings用于返回当前主键下各子键的名称。  5.获取主键下的数据值名称:procedure GetvalueNames(Strings: TStrings)。  Strings用于返回当前主键下各数值名称。  如要获取当前系统中的拨号连接名称,可利用获取主键HKEY-USERS  .DEFAULT下的数值名称的方法来进行。  6.判断数值名称存在、数值名称改名。  valueExists用于判断数值名称是否存在:  function valueExists(const Name: string): B  返回值为True表示数值名称存在。  Renamevalue用于数值名称改名:  procedure Renamevalue(const OldName, NewName: string);  以上是注册表常用操作所对应的TRegistry的方法和属性,其它方法和属性请参见Delphi联机帮助文件。
◇ delphi的tregistry注册表类方法详解●getdatainfo方法function getdatainfo(const valuename:var value:tregdatainfo):tregdatatype=(rdunknown,rdstring,rdexpandstring,rdexpandstring,rdinterger,rdbinary);tregdatainfo=record   regdata:数据类型  datasize:数据大小endvaluename:和当前键关联的数据值名称value:返回数据的信息,如为rdstring和rdexpandstring类型,则数据大小包括字符串未尾的空结束字符。如果成功返回true,失败返回false,并且value的值为zerosrdexpandstring:是一个包含环境变量的字符串;如“%path%”。●createkey方法function createkey(const key:string):  新建一个名为key的键,key可以为绝对的或相对的名字,绝对名用反斜杠“\u8221”开头,相对名是新建一个当前键的子键。新建没有值。成功返回true,否则返回false,如果该键已存在将不产生效果。●deletekey方法function deletekey(const key:string):  删除一个键及相关联的数据,在win95中子键也将被删除,nt中子键必须一个个删除。●deletevalue方法function deletevalue (const name:string):  删除当前键中指定的一个数据值name。●getdatasize方法function getdatasize(const valuename:string):  返回当前键中一个指定数值valuename数据的大小。●getdatatype方法function getdatatype(string):  返回当前键中一个指定数值valuename数据的类型。●getkeyinfo方法function getkeyinfo(var value:tregkeyinfo):  返回当前键的信息,在于value中。tregkeyinfo=record  maxsubkeylen:子键名的最长值(字节)  numvalues:键值的数量 最长的键值名的长度  filetime:最后一次更改的时间●getkeynames方法procedure getkeynames(strings:tsrtings);  返回当前键所有子键的名子列表串。●getvaluenamesprocedure getvaluenames(strings:tstrings); 返回当前键所有键值名的列表串。●hassubkeys方法(AdWords)function hassubkeys:  判断当前键是否有子键,有返回true,否则返回false。●keyexists方法function keyexists(const key:string):  判断指定的键是否存在。●loadkey方法function loadkey(const key,filenmae:string): 在根键下新建 从一个文件中加载注册信息到子键中,文件注册信息中包含数据值名、子键和数据。 loadkey使创建一个键单一化,子键,键值和数据在一人操作中完成,所有这些称为一组,和单独地创建它们不同应用程序可以在一个文件中读取一组数据,这在用户运行中重新设置有特别的用处。 key为要创建子键的名子 filename:为文件的位置,所指定的文件必须为以前用savekey函数或regsavekey api函数所建立的,文件名不能包括扩展名。●openkey方法function openkey(const key:cancreate:boolean):  使用该函数可以指定一个键作为当前键,如果键为nil,则当前键将设置为根键。  cancreate决定是否在指定键不存在时创建该键,该函数创建的键的键值将不确定。如果成功地打开或创建,该函数返回true。●openkeyreadonly方法function openkeyreadonly(const key: string):  以只读的方式打开key值指定的键。●closekey方法 当不再使用一个键时应用该方法关闭该键。●movekey方法procedure movekey(const oldname, newname: delete: boolean); 该方法移动或复制一个键到一个新的位置,并把键的名子改为newname。 在win95/98下该的子键和数据将被一起移动或复制到新的位置,在nt下子键必须用movekey明确的移动或自制。●读取数据的方法function readbinarydata(const name: bufsize: integer):function readbool(const name: string):function readcurrency(const name: string):function readdate(const name: string):function readdatetime(const name: string):function readfloat(const name: string):function readinteger(const name: string):function readstring(const name: string):function readtime(const name: string):  以上方法从当前主键读取相应数据类型的键值的数据,如果类型不匹配将产生一个异常。●registryconnect方法function registryconnect(const uncname: string): 与另一台计算机的注册表建立连接,在建立连接前应将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 ) :var  registerTemp : TRbegin  registerTemp := TRegistry.C //建立一个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 :=   end   else result :=   //善后处理   CloseK   F      { 调用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('失败')  应用之二:实现文件关联  当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 ) :  var  registerTemp : TR  begin  registerTemp := TRegistry.C //建立一个Registry实例  with registerTemp do   begin   RootKey:=HKEY_CLASSES_ROOT;//设置根键值为HKEY_CLASSES_ROOT
Ini文件操作
1. 首先在程序文件系统中建立一个INI文件(可以拷贝后修改)
2. 在程序中Use IniFiles文件;
3. 声明一个TIniFile对象iniinfo :TIniF;
4. 打开INI文件;
5. 进行读写操作。
6. 释放对象
procedure TFrmInfo.FormShow(Sender: TObject);
iniinfo:TIniF
iniInfo:=TInIFile.Create(dir+'\MyInfo.INI'); //打开INI文件
try //**INI读文件
EdName.Text:=iniInfo.ReadString('PersionInfo','Name','赵智勇');
EdBornDate.Text:=iniInfo.ReadString('PersionInfo','BornDate','');
EdDo.Text:=iniInfo.ReadString('PersionInfo','Work','Software Developer');
EdPhone.Text:=iniInfo.ReadString('PersionInfo','Phone','');
EDHome.Text:=iniInfo.ReadString('PersionInfo','Home','吉林省长春市');
freeAndNil(IniInfo); //释放对象
文本文件操作
步骤:声明一个Text类型的文件指针&&AssignFile方法关联文件&&打开文件&&读写文件&&关闭
应用如下:已建文本文件wenben.txt,有如下程序
procedure TForm1.Button3Click(Sender: TObject);
f: //声明文件指针
assignfile(f,'wenben.txt'); //文件指针和外部文件关联
//用Readln方法读取一行文本,Writeln方法向文本中写入一行
rewrite(f); //打开文件(三种打开方式:Append、Reset和Rewrite)
for i:=1 to 50 do writeln(f,i); //写入文本
//用Readln方法读取一行文本,Writeln方法向文本中写入一行
closefile(f);
值得注意到是,有函数eoln(f)判断是否已到行末;可以用memo1.Lines.LoadFromFile('wenben.txt')和memo1.Lines.savetoFile('wenben.txt')等方法读写文本文件数据
二进制文件操作
读写程序实例:
procedure TForm1.Button1Click(Sender: TObject);
f: //声明文件指针(注意和文本文件的区别)
assignfile(f,'erjinzhi.txt');
rewrite(f); //打开文件
for i:=1 to 50 do write(f,i); //循环方法写数据,注意是函数write();
closefile(f);
procedure TForm1.Button2Click(Sender: TObject);
assignfile(f,'erjinzhi.txt');
while not Eof(f) do begin //Eof(f)函数判断是否到文件末尾 Eof(f)
Read (f,i); //循环读数据
Memo1.Lines.Add(inttostr(i));
closefile(f);
视频捕获软件开发完全教学
http://blog.csdn.net/hongjiujing/archive//1775635.aspx
输入框输入
function InputBox(const ACaption, APrompt, ADefault: string): //返回输入字符
function InputBox(const ACaption, APrompt, ADefault: WideString ): WideS
function InputBox(const ACaption, APrompt: WideS ADefault: D Min: Double = Low(Integer); Max: Double = High(Integer); Decimals: Integer = 1): D
function InputBox(const ACaption, APrompt: WideS ADefault: I Min: Integer = Low(Integer); Max: Integer = High(Integer); Increment: Integer = 1): I
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);
procedure TForm1.Button3Click(Sender: TObject);
begin //在Test文件夹下创建文件名为Windows的Txt文件
FileCreate('E:\Test\windows.txt');
procedure TForm1.Button5Click(Sender: TObject);
begin //Windows的Txt文件 更名为 windows22
renameFile('E:\Test\windows.txt','E:\Test\windows22.txt');
procedure TForm1.Button4Click(Sender: TObject);
FileHandle:
FileHandle := FileCreate('E:\Test\vista.txt'); //获得文件的句柄
filewrite(FileHandle,'adsfdfdfdfasdfd',sizeof('adsfdfdfdfasdfd')); {往文件中写数据 }
FileClose(FileHandle); {关闭文件(文件在应用程序使用阶段Windows不能正常打开,所以操作完后关闭) }
procedure TForm1.Button6Click(Sender: TObject);
DeleteFile('E:\Test\vista.txt'); //删除文件
获取文件路径
1*********
begin edit1.text:=extractfiledir(application.ExeName); edit1.text:=extractfilepath(application.ExeName); 这个是获取自身目录的函数,两函数不同的是一个路径后带有"\",一个没有 如果要获取打开文件的路径,使用opendialog控件(在dialogs控件组下): begin if opendialog1.Execute then edit1.text:=opendialog1.FileN //在文本框显示路径
2*********
首先定义一个全局变量AppPath;然后用函数GetDir(0,AppPath);取得程序的绝对路径
比如程序在桌面的文件夹267中运行,取得的路径为:“C:\...\桌面\267”
调用外部可执行文件
查看实例230
调用office组件
调用word:
首先use ComObj
然后添加如下程序:
procedure TForm1.Button1Click(Sender: TObject);
word := createoleobject('word.application');
word.visible :=
word.documents.
类似其他组件调用参见实例018
创建和调用Dll
1. 在file/new/other中的new页中打开dll wizard;自动创建一个工程文件,以library关键字开头;
2. 以适当文件名保存;
3. 新建Unit单元,输入过程和函数,例如:
unit FirstD
Function Add10(number:integer): //声明,
implementation
Function Add10(number:integer):
result := number + 10; // 函数语句
4. 工程文件中建立Exports 子句
library MyFirstD
{ 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. }
FirstDll in 'FirstDll.pas';
exports ADD10; //建立Exports 子句
{$R *.res}
begin //添加DLL初始化代码
5. 编译生成Dll文件(Project&&Compile……)
6. 在调用程序(主程序)中的单元文件中的Interface部分进行声明,调用,如:
unit Unit1;
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMan, StdC
TForm1 = class(TForm)
Button1: TB
XPManifest1: TXPM
procedure Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations }
Function Add10(number:integer):external 'MyFirstDll.dll'; //声明,大小写敏感
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
temp := Strtoint(Edit1.text);
Edit1.text := inttostr(Add10(temp)); //调用函数
Showmessage('Error!')
DLL中封装窗体
利用dll封装类
查看实例502
7. 在file/new/other中的new页中打开dll wizard;
8. 在代码窗口中的单元代码窗口定义类;
9. 在工程文件中编写程序,用以提供用户访问类的接口。
Ping.exe是windows系统中一个测试网络连接和传输性能的工具,ping使用了ICMP作为传输协议,在windows上icmp.dll库文件中包含了一系列的ICMP函数
参见实例455
串口通信的实现
参见实例456
实例说明:使用windows中的ActiveX控件的MSComm。(Delphi7以前的版本)
COM即Comeponent Object Model(组件对象模型),
MTS 即微软事务服务器;
进程内服务器:用Dll实现COM对象;
进程外服务器:在应用程序中实现COM对象或当Dll在另外的计算机(DCOM)或宿主环境(MTS)中执行时。
含有COM对象的库在Delphi中称为ActiveX库,生成方法:File/New/ActiveX页.. ActiveX library.
1. 建立进程内COM服务器
生成ActiveX库后的完整源代码如下:
library Project2;
DllGetClassObject, //用于从外部访问类库
DllCanUnloadNow, // 检查服务器的全部对象是否被删除从而可以从内存中卸载
DllRegisterServer, //
DllUnregisterS //
{$R *.RES}
接下来添加COM对象
填写类名,点击list选择Windows注册表中已有的接口..
2. 使用类型库编辑器
3. 创建COM+对象
在Delphi中调用dll
1. 在程序中声明一个全局函数,该函数类型和动态库中定义的函数类型一致,示例中都是“TDllClass”。
2. 使用关键字external导入动态库;
实例程序如下:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtC
TDllClass = Class (TObject)
procedure S
TForm1 = class(TForm)
Button1: TB
Image1: TI
procedure Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
Function CreateObj: TDllC //声明一个全局函数
external 'project1.dll'; //使用关键字external导入动态库
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
temp: TDllC
temp := CreateO
多线程编程
&&参见资料
程序界面如下:
程序由一个主单元Unit1、主窗口Form1和两线程单元Unit2和Unit3组成,在Unit1代码如下
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Button1: TB
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
uses unit2,unit3; //引用线程单元,第一步
thread1:SS; //定义线程,第二步
thread2:TT;
procedure TForm1.FormCreate(Sender: TObject); //初始化时创建线程,第三步
thread1 := SS.Create(true);
thread2 := TT.
procedure TForm1.Button1Click(Sender: TObject); //唤醒线程,第四步
---------------------------------------------------------
Unit2的代码如下(Unit3类似)
unit Unit2;
uses //注意添加相关部分,此一;
Classes,Unit1,Windows, Messages, SysUtils, Variants, Graphics, Controls, Forms,
Dialogs, StdC
SS = class(TThread)
{ Private declarations }
procedure E
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.UpdateC
Form1.Caption := 'Updated in a thread';
procedure SS.E //添加线程唤醒是的执行程序,此二;
{ Place thread code here }
for i := 0 to 1000 do
form1.Edit1.Text := inttostr(i);
选择View|Debug Windows|Breakpoints菜单打开断点列表窗口。
数据结构和算法
屏幕分辨率的获得
实际上在Delphi中有一个TScreen元件,与TApplication元件一样,TScreen元件也是在Forms单元中声明的, Delphi已经在Forms单元中声明了TScreen元件的实例,名叫Screen,因此在程序中只需直接调用就可以了,其中Screen.Height是屏幕的高度,Screen.Width是屏幕的宽度(以像素为单位),从这两个值我们就可以很容易地知道屏幕的分辨率了。
让电脑发出“嘣”声
messagebeep(0);
例如让电脑连续发出“嘣嘣”声
procedure TForm1.Button1Click(Sender: TObject);
for i := 1 to 1000 do
messagebeep(0); //发声
sleep(500); //系统延时0.5秒
在窗口中拖动控件
首先在窗口中添加控件,然后添加控件的MouseDown事件,以button控件举例如下:
procedure TForm1.Button1MouseDown(Sender: TO Button: TMouseB
Shift: TShiftS X, Y: Integer);
Const //定义常量
SC_DragMove = $F012; { a magic number }
ReleaseC //从当前线程中的窗口释放鼠标捕获
button1.perform(WM_SysCommand, SC_DragMove, 0);
{注:function Perform(Msg: C WParam, LParam: Longint): L
Responds as if the control received a specified Windows message. // Cardinal wei 32位无符号数}
TDBlistbox控件显示字段信息
设计窗口如下,并把它们相互连接。(数据表为delphi6.0中的……DBDemos/customers.db)
编写代码如下:
procedure TForm1.FormCreate(Sender: TObject);
for i := 0 to table1.fieldcount-1 do
dblistbox1.Items.Add(table1.Fields[i].fieldname);
执行结果如下
关闭-重启计算机
Windows提供了API函数ExitWindowsEx,通过传递不同的参数,会议不同的方式退出Windows,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
st :SYSTEMTIME;
hToken :THANDLE;
tkp:TOKEN_PRIVILEGES;
rr :DWORD;
OPENPROCESSTOKEN(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hTOKEN);
LookupPrivilegeValue(nil,'SeShutDownPrivilege',tkp.privileges[0].luid);
//设定权限为1
tkp.privilegeCount := 1;
tkp.privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
//得到权限
AdjustTokenPrivileges(hToken,FALSE,tkp,0,nil,rr);
//关闭计算机
// ExitWindows(0,0); //关闭方式1
// ExitWindowsEx(EWX_LOGOFF,0); //关闭方式2 关闭所有进程后用户推出*(进入登录界面)
// ExitWindowsEx(EWX_FORCE,0); //关闭方式3 强制终止进程
// ExitWindowsEx(EWX_POWEROFF,0); //关闭方式4 关闭系统关闭电源
ExitWindowsEx(EWX_REBOOT,0); //关闭方式5 重新启动计算机* (重启动)
// ExitWindowsEx(EWX_SHUTDOWN,0); //关闭方式6 关闭系统 * (不重新启动)
窗口保持在最前
关键是调用API函数中的SetWindowPos函数,使用该函数可以控制窗体的显示状态,函数原型是:
原型如下:
BOOL SetWindowPos(
HWND hWnd, // 窗口句柄
HWND hWndInsertAfter, // 基于的某窗口的句柄,或为注1中某项
int X, // 水平位置
int Y, // 垂直位置
int cx, // 宽度
int cy, // 高度
UINT uFlags // 安置操作标志 注2
注1.HWND_BOTTOM、HWND_NOTOPMOST、HWND_TOP、HWND_TOPMOST
注2.指定“SWP_NOZORDER”标志 (忽略hWndInsertAfter句柄参数)
procedure TForm1.Button1Click(Sender: TObject);
begin //显示在最前
SetWindowPos(Form1.Handle,HWND_TOPMOST,
Form1.Left ,Form1.top,Form1.width,Form1.height,0);
procedure TForm1.Button2Click(Sender: TObject);
begin //回复正常
SetWindowPos(Form1.Handle,HWND_NOTOPMOST,
Form1.Left ,Form1.top,Form1.width,Form1.height,0);
如果要窗体始终保持在最上方,设置窗体的FormStyle属性为fsStayOnTop
界面设计(可用模块)
界面加强控件
1. Xpmanifest: 在一个工程中添加一个就可显示WindowsXP效果;
2. ActionManager,ActionMainMenuBar,ActionToolBar这三个控件的具体使用:ActionManager控件可以方便的实现动态菜单管理,不管在设计阶段还是运行阶段都可以任意添加、删除、脱放菜单。 ActionManager像个容器,可以存放ActionToolBar和ActionMainMenuBar。 ActionToolBar和ActionMainMenuBar 都可以定制背景,这使得我们在设计界面时更灵活,达到更生动的效果。有一点需要注意,背景图片必须是BMP格式,否则运行时是看不见背景的。
3. Additional页面中的 控件,即ActionManager,ActionMainMenuBar, ActionToolBar,…CustomizeDlg.有关使用方法
这三个控件是用来完全替换BCB以前版本中的action list的。 确实使用起来是相当的方便。 1&添加一个空的imagelist控件至form上 2&分别添加ActionManager,ActionMainMenuBar,ActionToolBar控件至form上 并将ActionManager的image属性和imagelist关联! 3&然后就可以开始了:) 先在ActionManager控件上双击或右击-&customise,弹出edit窗口。 4&然后就可以在右边的actions灰色listbox中右击鼠标,接着我们展示一下他们的强大功能吧! 5&弹出菜单上的new standard action...,存放了常用的标准action序列。选择,记住这里可以按shift键多选。添加至actionmanager中。 这是如果存在imagelist的话,他们会自动添加标准的小图标。 6&从ActionManager的edit对话框中直接拖放这些action 到ActionMainMenuBar,ActionToolBar上吧...
附注:可以在ActionMainMenuBar,ActionToolBar内修改菜单项的Caption属性,也可以双击添加ONClick事件代码。
步骤:1新建一闪屏图象窗体,设置好属性,载如图片 2.打开ProjectOptions的Forms页,把闪屏图象窗体移入Available forms中,如图。 3.在project代码口中修改代码如下
program Project1;
Forms, Windows, //添加windows组件
Unit1 in 'C:\Documents and Settings\Administrator\桌面\test\Unit1.pas' {Form1},
Unit2 in 'C:\Documents and Settings\Administrator\桌面\test\Unit2.pas' {Form2},
Unit3 in 'Unit3.pas' {Form3};
{$R *.res}
Application.I
form3 := Tform3.Create(application); //程序段1
sleep(5000); //延时程序,控制显图时间前提是在Uses中/添加windows组件。
Application.CreateForm(TForm1, Form1);
form3.C //程序段2
Application.CreateForm(TForm2, Form2);
Application.R
主窗体:Form1中加Panel1, Panel1的属性DockSite设为True,DragKind设为dkDrag, DragMode设为dmmanual
子窗体:Form2的属性DragKind设为dkDock, DragMode设为dmAuromatic
在事件代码中加:
Form2.ManualDock(Panel1, nil, alclient); // Panel1为窗口“宿主”
form2.FormStyle:=fsStayOnT
制作闪烁窗体
在窗体的加入Timer控件,写入一行代码
procedure TForm1.Timer1Timer(Sender: TObject);
Flashwindow(self.Handle,true); // API函数实现窗体闪烁
活动控件制作
活动控件有游动控件、颤动控件,他们都用始终控件控制,设置时钟空间适当的interval属性,然后在时钟控件里写代码,改变控件的位置、大小、颜色、和Visible 等属性,譬如对于图像控件,制作颤动控件,编写如下代码:
procedure TForm1.Timer1Timer(Sender: TObject);
if image1.Visible = false then image1.Visible := true
if image1.Visible = true then image1.Visible :=
控件的锚标志使用
为了建立完美与灵活的、可以适应窗前当前大小的用户界面,Delphi允许使用控件的Anchors属性来确定控件和窗体的像是对位置。
窗体背景色渐变
对窗体增加Onpaint事件,代码如下:
procedure TForm1.FormPaint(Sender: TObject);
dy := clientheight/130; //调整数字可以调整颜色变化跨度
for i:= 255 downto 0 do
form1.Canvas.Brush.Color := $000000 + i*$10000;;//修改数字以更改颜色组合
form1.Canvas.FillRect(rect(0,round(y),clientwidth,round(y+dy)));
下面在窗体中旋转文字,文字的内容,属性在程序中设置:
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
with form1.Canvas do //form1为文字所在窗口
font.Name:= '华文彩云'; //字体设置
font.Size := 30;
font.Color :=
tf := tfont.C
tf.Assign(font);
getobject(tf.Handle,sizeof(lf),@lf);
lf.lfEscapement := 450; //旋文字转角度,单位1/10度
lf.lfOrientation := 450;
tf.Handle := createfontindirect(lf);
font.Assign(tf);
//输出文字,改变数字设置文字在窗体中的位置
textout(400, height div 30 ,'Delphi World!');
为对象蒙上面纱
对象以图片为例(也可以为Form等),界面设计及运行后的界面
procedure TForm1.Button1Click(Sender: TObject);
with image1 do {对象为image1}
//指定画笔颜色
canvas.Brush.Color :=
//画笔类型,常见类型有
{bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, or bsDiagCross. 参照delphi帮助主题 brush style}
canvas.Brush.Style := bsBD
//绘图区域类型和区域大小,其他的区域类型有Ellipse,RoundRect等
canvas.Rectangle(0,0,3*image1.Width ,3*image1.Height);
资源管理器的制作
窗体透明度设置
树形显示的程序界面
参见实例018
应用步骤:1.添加TTreeView控件,右击之,ItemEdit中编辑树形。2.添加TTreeView控件的Dbclick时间,运用if treeview1.Selected.Text = '树叶名 ' then
代码如下:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComC
TForm1 = class(TForm)
TreeView1: TTreeV
procedure TreeView1DblClick(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.TreeView1DblClick(Sender: TObject);
if treeview1.Selected.Text = '数据导出' then
showmessage('数据导出!');
if treeview1.Selected.Text = '数据查询' then
showmessage('数据查询!');
不可移动窗体
对于窗体Form1:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
TForm1 = class(TForm)
procedure WMNCHitTest(var Msg: TWMNCHITTEST); message WM_NCHITTEST; //第一项
{ Private declarations }
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WMNCHitTest(var Msg: TWMNCHITTEST);
if msg.Result=HTCaption then
Msg.Result := HTCLIENT;/取消鼠标左击标题栏的消息
动画形式的程序界面
参见实例034
主要新概念:TAnimate及其属性FileName,Active的使用。
界面如下:
主要代码:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls,
jpeg, ComCtrls,
TForm1 = class(TForm)
Image1: TI
Label1: TL
Label2: TL
Label3: TL
Label4: TL
Label5: TL
Label6: TL
Label7: TL
Label8: TL
Label9: TL
Label10: TL
Label11: TL
Animate1: TA
Animate3: TA
Animate2: TA
procedure FormCreate(Sender: TObject);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Label8Click(Sender: TObject);
showmessage('打开窗体');
//添加动画
procedure TForm1.FormCreate(Sender: TObject);
Animate1.FileName := ExtractFilePath(Application.ExeName)+ 'avi\zybiao.avi';
Animate1.Active := T
Animate2.FileName := ExtractFilePath(Application.ExeName)+ 'avi\Electron.avi';
Animate3.FileName := ExtractFilePath(Application.ExeName)+ 'avi\gd.avi';
Animate2.Active := T
Animate3.Active := T
窗体边框加粗、变更颜色
参见实例029
另外获取窗体设备场景函数:GetWindowDC
增加图片、工具栏、状态条、窗口切换菜单……
&&菜单应用
在系统菜单中添加菜单项
查看实例001
技术要点:API函数GetSystemMenu,AppendMenu
动态加入/删除菜单&带历史信息的菜单
自设计代码如下
procedure TForm1.N2Click(Sender: TObject);
QQ :tmenuI
N_still,NDyn_max:
QQ := TmenuItem.Create(nil);
if OpenDialog1.Execute then
QQ.Caption:=OpenDialog1.FileN
/动态插入菜单
MainMenu1.Items.Items[0].Insert(2,QQ); //2为菜单插入位index
//限制动态菜单最大项目数,N_still为静态设计菜单数,NDyn_max为动态最大项目数
N_still := 3;
NDyn_max := 4;
if (Mainmenu1.Items.Items[0].count- N_still & NDyn_max)then
MainMenu1.Items.Items[0].Delete(Mainmenu1.Items.Items[0].count-3);
&&工具栏设计
带背景的工具栏
查看实例007
主要步骤:1启动载入图片;2工具栏AdvancedCustomDraw事件绘制图片;3工具栏Resize事件保证背景图片正确显示(注意背景图片的含义)
界面如下:
unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolW
TForm1 = class(TForm)
ToolBar1: TToolB
ToolButton1: TToolB
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TO var Action: TCloseAction)}

我要回帖

更多关于 批量将文件放入文件夹 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信