Delphi 2006高级控件应用
精彩链接
Borland Developer Studio 2006已于2005年12月5日正式发布了。Delphi 2006是Borland Developer Studio 2006产品中的一部分,我们不仅能继续开发基于Win32平台的应用程序,还可以使用Delphi语言编写.NET平台的应用程序,使得Delphi程序员可以轻松的将Win32平台的应用程序移植到.NET平台中。
本文将带领读者去体验一下Delphi 2006中高级控件的应用。看完本文后,你会发现,使用Delphi 2006将会使你更加高效、快速地开发应用程序。
一、Delphi 2006中控件的安装
以前的大多数第三方控件仍然可以在Delphi 2006中使用。只是在安装方式上有一些差别。
1.DPK控件包的安装方法:
有一些第三方控件提供给我们的是DPK文件,在Delphi7中,我们直接双击就可以进行安装。但是在Delphi 2006中,步骤有一点不同。我们以FlatStyle控件的安装为例,讲解一下DPK控件包的方法:
第一步:启动Delphi for Microsoft Win32,点击“File”菜单下的“Open Project”,选择要安装的DPK文件FlatStyle_D7.dpk,点击“打开”按钮。

第二步:在右边的“Project Manager”中,鼠标右击控件名称FlatStyle_D7.bpl,在弹出的菜单中点击“Install”。Delphi 2006将对控件进行编译并安装。

2.单个PAS文件的安装:
有一些第三方控件只有一个PAS文件,没有提供安装包,在Delphi 7中,可以单独对PAS文件进行安装,但是在Delphi 2006里,已经取消了这个功能。那么在Delphi 2006中如何安装单个的PAS文件呢?方法如下:
第一步:点击“File”-“New”菜单中的“Package – Delphi for Win32”,新建一个控件包。

第二步:选中右边“Project Manager”中“Contains”文件夹,点击鼠标右键,在弹出的菜单中选择“Add”。

第三步:在Add对话框中,点击“Browse”按钮,选择要安装的PAS文件,然后点击“OK”按钮。

第四步:鼠标右击“Project Manager”中的“Package1.bpl”,在弹出的菜单中选择“Install”,这时就完在了控件的安装。
第五步:保存bpl文件。
二、属性编辑器控件
1.TValueListEditor
Delphi 2006提供的TValueListEditor控件可以编写一个类似于Delphi7的Object Inspector。下面我们就来编写一个简单的属性编辑器,如下图所示:

第一步:在窗体上放置一个ValueListEditor控件(在Additional面板中可能找到该控件)。
第二步:添加属性名称及属性值。本例中,我们一共有3个属性,分别是“Name”、“Color”和“Size”。ValueListEditor为我们提供了InsertRow方法,使用该方法可以添加属性名称及属性值。代码如下:
ValueListEditor1.InsertRow('Name', '', True);
ValueListEditor1.InsertRow('Color', 'clRed', True);
ValueListEditor1.InsertRow('Size', '9', True);
是不是非常简单?运行程序,用鼠标点击Size中的9,效果是否不同呢?编辑器中有一个下拉列表,那么如何实现呢?我们将第三句代码作如下修改:
Index := ValueListEditor1.InsertRow('Size', '9', True);
首先获取要修改的行号,InserRow在插入一行后,会返回当前行的行号。下面再使用ItemProps属性修改“行”的属性:
with ValueListEditor1.ItemProps[Index - 1].PickList do begin
Add('9');
Add('11');
Add('13');
Add('20');
end;
PickList中就是保存的下接列表中的数据。
现在再运行程序看看效果,是否一样了呢?
下面我们再看一个效果:

图中的clRed后有一个“…”按钮,在Delphi 7中,当这个按钮出现时,我们可以通过点击这个按钮弹出一个窗体,进行相应的属性设置。那么,我们要实现这样的效果也是非常简单的,将“ValueListEditor1.InsertRow('Color', 'clRed', True);”这句代码作如下修改:
Index := ValueListEditor1.InsertRow('Color', 'clRed', True);
ValueListEditor1.ItemProps[Index - 1].EditStyle := esEllipsis;
修改ItemProps中的EditStyle属性为“esEllipsis”即可实现这样的效果。但是,现在这个按钮什么都不能干,需要我们加入执行代码才会发挥其作用。在这个例子中,我们要求点击“…”按钮后,弹出颜色对话框,然后将用户选择的颜色值显示在Color右边的文本框中。我们可以在OnEditButtonClick事件中写入实现代码:
procedure TForm1.ValueListEditor1EditButtonClick(Sender: TObject);
var
nRow: Integer;
begin
nRow := ValueListEditor1.Row;
case nRow of
2:
with TColorDialog.Create(nil) do begin
if Execute then
ValueListEditor1.Cells[2, nRow] := ColorToString(Color);
end;
end;
end;
当点击“…”按钮时,会触发OnEditButtonClick事件。在OnEditButtonClick事件中,我们首先使用ValueListEditor1.Row获取当前“行”的行号,也就是鼠标点击的是哪一行的按钮。知道了行号,我们就可以根据行号来加入相应的代码。在本例中,只有第二行有“…”按钮,因此,当Row等于2时,我们就显示颜色对话框。“ValueListEditor1.Cells[2, nRow] := ColorToString(Color);”这一句代码是将用户选择的颜色值显示到文本框中。
通过上面的讲解,我们知道了属性记录的添加及设置。那么如何获取某个属性的属性值呢?请看下面:
假如我们要获取Name的属性值,我们使用下面的代码即可获得:
ShowMessage(ValueListEditor1.Cells[2, 1]);
前面我们通过Cells属性设置了文本框中的内容,在这里,我们可以使用Cells属性获取指定文本框的内容。Cells有2个参数,第一个是列,第二个是行。Name的属性值是在第2列、第一行中的,因为指定Cells[2,1],如果要获取Size的属性值,那么就应该是Cells[2,3]。
属性/方法 说明
DeleteRow 删除指定行。
FindRow 查找行。
ColCount 获取列的个数。
ItemProps.HasPickList 是否捅有下拉列表。
Values 根据Key获取Key所对应的值。
Keys 获取Key的值
RowCount 获取行的个数。
三、系统控件
1.TTrayIcon
在Delphi 2006中,新增了一个TTrayIcon的控件。该控件是用于在托盘中显示自己软件的图标。使用TTrayIcon控件可以很容易的实现“动态图标”及“气泡提示”功能。如下图所示:

(1)“气泡提示”的制作
第一步:在窗体中放置TrayIcon控件(Additional面板中可以找到)。
第二步:设置TrayIcon的Icon图标,载入一个ICO文件。
第三步:设置TrayIcon的BalloonHint为“Delphi 2006高级控件应用”,设置BalloonTitle为“电脑报2005年合订本”。设置Visible为True。
第四步:双击窗体,在OnCreate事件中写入下面代码:
TrayIcon1.ShowBalloonHint;
好了,F9运行程序,一个“气泡提示”就会出现在图标上。属性中的BalloonTimeout是设置“气泡提示”多少秒后消失,默认是3秒。
(2)动态图标
我们大家都知道,当有QQ消息时,托盘中会有一个闪烁图标,使用TrayIcon控件可以非常容易地实现这个功能。
使图标动起来,其实就是使用多个图标进行切换。QQ的闪烁图标,其实就是使用的两个图标来进行切换的,一个是头像图标,一个是空的图标。
下面我们就来模拟QQ头像闪烁功能:
第一步:在窗体上放置ImageList控件(在Win32面板中可以找到)。
第二步:设置ImageList控件的Width和Height属性为32,然后双击ImageList,点击“Add”按钮添加图标文件。第一个添加的是要显示的图标,第二个添加一个空的图标(可以使用Image Editor新建一个ICO文件,然后直接保存即可得到一个空的图标。)。
第三步:设置TrayIcon的Icons属性为ImageList1(可以直接在列表中选择)。
第四步:在Form1的OnFormShow事件中加入下面的代码:
TrayIcon1.Animate := True;
TrayIcon1.AnimateInterval := 450;
当Animate为True时,将自动按ImageList控件中图标的顺序进行依次显示,形成动态效果。AnimateInterval为每隔多少时间显示下一个图标。如果要停止闪烁,将Animate设置为False即可。
怎么样,Delphi2006提供的TTrayIcon控件是不是很酷。
属性/方法 说明
Animate 设置是否使用动态图标。
AnimateInterval 图标变化的时间。
BalloonFlags 气泡提示中的图标。bfError为错误图标 bfInfo为信息图标 bfWarning为警示图标。
BalloonTimeout 气泡提示消失时间。
BalloonTitle 气泡提示标题。
Hint 托盘图标提示。当鼠标移动到托盘中的图标时显示。
Icon 设置托盘图标。
IconIndex 图标索引。
Icons 图标集合。一般使用ImageList控件包含图标集合。
Visible 是否在托盘中显示。
四、界面控件
1.XPMenu
XPMenu控件可以帮助我们轻松制作XP样式的菜单。这是一个第三方控件,其讲解“单个PAS文件的安装”中,就是以XPMenu为例讲解的。
首先我们先使用TMainMenu或者TPopupMenu制作好菜单,然后在XP面板中将TXPMenu控件拖动到窗体中,将XPMenu的Active和AutoDetect属性设置为True就可以了。
如果我们想自己定义菜单的背景色、边框颜色,甚至是字体的大小及颜色,也是很容易的。下表是修改菜单、字体颜色的属性:
属性 说明
SelectBorderColor 选中菜单时边框颜色
SelectColor 选中菜单时的背景颜色
SelectFontColor 选中菜单时文字的颜色
Separator Color 分隔线的颜色
Font 设置字体、大小、颜色
2.FlatStyle
FlatStyle是一套平面控件。如果想你的界面与众不同,那么使用FlatStyle是最佳选择。
TFlatTitleBar
TFlatTitleBar模拟标题栏控件。效果如下图所示:

将FlatTitlebar放置到窗体上,然后将Align属性设置为alTop,由于窗体中有默认的标题栏,因此我们需要将窗体的BorderStyle设置为None去掉标题栏。
TFlatHint
FlatHint改变了Windows的标准提示信息框样式。其效果如下:

只要我们为控件设置好了Hint属性,并将ShowHint设置成True,那么将TFlatHint控件拖动到窗体上就可以了。由于TFlatHint默认使用的字体是英文,显示出来的汉字比较小,只需将FlatHint的Font属性设置为中文字体即可。
五、多媒体控件
1.TWinAmpComponent
该控件可以帮助我们操控Winamp。

一些常用的Winamp方法:
WinAmpControl1.Play; 播放音乐
WinAmpControl1.PrevTrack; 前一首音乐
WinAmpControl1.Pause; 暂停播放
WinAmpControl1.Stop; 停止播放
WinAmpControl1.NextTack; 下一首音乐
WinAmpControl1.SetVolume 设置音量
WinAmpControl1.GetSongLength 获取音乐长度
WinAmpControl1.SetRepeat; 设置重复播放
WinAmpControl1.ClearRepeat; 清除重复播放
WinAmpControl1.SetShufle; 设置无序播放
WinAmpControl1.ClearShufle; 清除无序播放
WinAmpControl1.ClearPlayList; 清除播放列表
WinAmpControl1.AddFile 添加音乐
WinAmpControl1.AddDir 添加目录
2.Audio Components Suite
Audio Components Suite,一套跨平台的音频处理组件包:支持音频回放、捕捉;CD-ROM回放、CDDA捕捉;Wave流支持;MP3、Ogg、FLAC、Monkey等格式支持;音频混响处理;输入设备动态捕捉;音频格式转换;声音音频指示器;其他一些特效。
录音例子:
第一步:添加TAudioIn、TWaveOut到窗体上。
第二步:设置AudioIn1和WaveOut1的相关属性:
AudioIn1.InSampleRate := 44100;
AudioIn1.InBitsPerSample := 16;
AudioIn1.InChannels := 2;
AudioIn1.RecTime := 30;
WaveOut1.FileName := SaveDialog1.FileName;
第三步:开始录音
WaveOut1.Run;
一个简单的录音程序就写好了。如果要停止录音,可以使用WaveOut1.Stop;。
六、文件操作控件
1.TEasyFileSearch
TEasyFileSearch一个用来搜索文件的组件,支持子目录搜索,支持通配符(*.*, *.exe, ...)过滤。
可以按最小文件大小、最大文件大小、文件日期进行搜索。

搜索例子:
首先将TEasyFileSearch、TButton、TListView控件添加到窗体上。
然后双击Button1控件,输入下面的代码:
EasyFileSearch1.RootPath := ‘C:\’;
EasyFileSearch1 SearchOptions := [okIncludeSubfolder]
EasyFileSearch1.FileNames.Clear;
EasyFileSearch1.FileNames.Add(‘*.*’);
EasyFileSearch1.Search;
上面4句代码就可以将C盘下所有文件都搜索出来。SearchOptions设置为okIncludeSubfolder表示搜索子目录。
如何获取搜索到的文件呢?我们可以使用OnFileFound事件。代码如下:
procedure TForm1.EasyFileSearch1FileFound(FileFound: TFileInformations);
var
NewItem : TListItem;
Time : String;
begin
{ 添加找到的文件 }
NewItem := ListView1.Items.Add;
with NewItem do
begin
Caption := FileFound.Name;
SubItems.Add(FileFound.Path);
Time := IntToStr(FileFound.Time.CreationTime.wDay)+'/';
Time := Time+IntToStr(FileFound.Time.CreationTime.wMonth)+'/';
Time := Time+IntToStr(FileFound.Time.CreationTime.wYear);
SubItems.Add(Time);
SubItems.Add(IntToStr(FileFound.Size));
end;
end;
2.Disk Controls
Disk Controls能够让使用例如硬盘、软盘、CD、内存、网络、外壳及文件系统的相关开发更加简单。
组件介绍及使用方法:
(1)dcDiskScanner
用于查找文件。
示例代码:
dcDiskScanner1.Folder := 'C:\';
dcDiskScanner1.SearchMask := '*.bmp';
dcDiskScanner1.IncludeSubfolders := True; // 包含子目录
dcDiskScanner1.Execute; // 执行搜索
在OnFileFound事件中获取搜索到的文件:
procedure TForm1.dcDiskScanner1FileFound(Sender: TObject; const FileName,
FileType: string; const FileSize: Extended; const FileTime: TDateTime;
const FileAttributes: TdcScanAttributes; const LargeIcon, SmallIcon: TIcon;
SysImageIndex, TotalFiles: Integer; const TotalSize: Extended);
begin
ListBox1.Items.Add(FileName);
end;
(2)dcMultiDiskScanner
该控件的作用及使用方法与dcDiskScanner类似。dcMultiDiskScanner增加了一个过滤文件的属性ExcludeList,该列表中包含的文件将不被搜索。
(3)dcFileOperations
该控件可以复制、删除、移动、重命名多个文件或者文件夹。
示例代码:
dcFileOperations1.FileList.Add('c:\test.txt');
dcFileOperations1.DestFolder := 'd:\';
dcFileOperations1.Operation := foCopy;
dcFileOperations1.Execute;
(4)dcFolderMonitor
监视文件夹被删除、复制、更名时的动作。
示例代码:
dcFolderMonitor1.Folder := 'd:\';
dcFolderMonitor1.Filter := [fmFileName];
dcFolderMonitor1.Active := True;
监视D盘,当D盘中文件的文件名被更改时,触发OnChange事件。
(2)dcVirtualDrives
创建虚拟磁盘。

示例代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
if dcVirtualDrives1.AddDrive('H', ‘D:\Music’) then
ShowMessage('添加成功!');
end;
当我们关闭程序时,应该使用 dcVirtualDrives1.DeleteDrive('H');删除虚拟磁盘。
(6)dcDiskInfo
获取磁盘信息。指定Disk后,即可通过访问dcDiskInfo的相关属性获取信息。
(7)dcFileInfo
获取文件信息。指定FileName后,即可通过访问dcFileInfo的相关属性获取信息。
(8)dcFileCRC
获取文件的CRC值。
(9)dcVersionInfo
获取文件的版本信息。主要用于获取EXE、DLL及OCX文件的版本信息。
(10)dcShellIcon
获取文件关联的图标。
(11)dcShellLink
获取快捷方式所指向的文件。
(12)dcShellProperties
显示指定文件、文件夹的属性框及显示右键菜单。
(13)dcIcon2Bitmap
可以将图标文件转换为BMP图片。
Delphi的VCL为我们开发程序带来了极大的方便。功能强大,丰富多彩的第三方控件更使得我们如虎添翼。