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,点击“打开”按钮。

图1.jpg
选择要安装的控件

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

图2.jpg
安装控件

2.单个PAS文件的安装:

有一些第三方控件只有一个PAS文件,没有提供安装包,在Delphi 7中,可以单独对PAS文件进行安装,但是在Delphi 2006里,已经取消了这个功能。那么在Delphi 2006中如何安装单个的PAS文件呢?方法如下:

第一步:点击“File”-“New”菜单中的“Package – Delphi for Win32”,新建一个控件包。

图3.jpg
新建控件包

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

图4.jpg
添加

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

图5.jpg
选择PAS文件

第四步:鼠标右击“Project Manager”中的“Package1.bpl”,在弹出的菜单中选择“Install”,这时就完在了控件的安装。

第五步:保存bpl文件。

二、属性编辑器控件

1.TValueListEditor

Delphi 2006提供的TValueListEditor控件可以编写一个类似于Delphi7的Object Inspector。下面我们就来编写一个简单的属性编辑器,如下图所示:

图6.jpg
属性编辑器

第一步:在窗体上放置一个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中就是保存的下接列表中的数据。

现在再运行程序看看效果,是否一样了呢?

下面我们再看一个效果:

图7.jpg
带“弹出”效果的编辑器

图中的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控件可以很容易的实现“动态图标”及“气泡提示”功能。如下图所示:

图8.jpg
托盘显示

(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模拟标题栏控件。效果如下图所示:

图9.jpg
模拟标题栏控件

将FlatTitlebar放置到窗体上,然后将Align属性设置为alTop,由于窗体中有默认的标题栏,因此我们需要将窗体的BorderStyle设置为None去掉标题栏。

TFlatHint

FlatHint改变了Windows的标准提示信息框样式。其效果如下:

图10.jpg
改变效果

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

五、多媒体控件

1.TWinAmpComponent

该控件可以帮助我们操控Winamp。

图11.jpg
操控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, ...)过滤。

可以按最小文件大小、最大文件大小、文件日期进行搜索。

图12.jpg
搜索文件

搜索例子:

首先将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

创建虚拟磁盘。

图13.jpg
虚拟磁盘

示例代码:

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为我们开发程序带来了极大的方便。功能强大,丰富多彩的第三方控件更使得我们如虎添翼。