1 只有一个DCU文件的组件。DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布。一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误。也正是因为没有源码,给使用者带来了不便,那就是一旦Delphi版本升级,此组件就不能再使用了,当然有的作者给出了几种版本的DCU文件,用户根据需要选择使用。这样的组件的安装方法是:在Component菜单中,选择install component,在对话框
"into existing package"页中,单击“Unit file name”后的“Browse”按扭,在打开的文件对话框中,将“文件类型”设定为*.dcu,找到要安装的DCU文件,按OK按钮返回"into existing package"页后再按OK按钮就可以安装了。注意,此时Delphi会提示dclusr40.dpk将被重建,是否继续,OK就可以了。这里是将组件安装到dclusr40.dpk包中,此包从文件名上可以看出是用户自定义组件包,先安装到这个包中吧,下面再讲有关注意事项。安装完毕会有已经将组件注册完的提示信息以及安装到哪个组件页中的信息等,到组件面板上看看,一般会出现一个新的组件页,其中有刚安装的组件。
2、 只有PAS文件或既有PAS又有DCU文件的组件。这种组件因为有PAS文件,也就是说作者提供了源码,这就好办多了。安装的方法和上面是一样的,在文件类型中可以设定为DCU也可以设定为PAS,建议设定为PAS,这样可用你的Delphi重新编译一下,看是否会出现问题。Delphi升级后只能选择PAS文件安装,这样才能重新编译,使得组件能适应新Delphi版本。这样的组件是很值得使用的,根据心铃的经验,没有源码的组件最好不要使用,一是存在Delphi版本升级后无法使用的问题,再者当程序出现问题后用户无法调试组件来判断是否是组件中存在BUG。
3、有dpk文件的组件包。带有dpk文件的组件包一般是有多个组件构成的,也就是说安装后会有多个组件供使用,如果只有一个组件作者一般不会制成DPK文件,使用上面的方式发布就可以了。对于这样的组件包,一般来说会有详细的安装说明文件,如上面提到的RXLIB,由于组件复杂且安装时有先后顺序,作者不提供安装说明用户根本无法正确安装。如果没有安装说明文件,那么用下面的方法安装:在File菜单下,选择”OPEN…”打开dpk文件(文件类型列表框中选*.dpk),在出现的Package窗口中,工具栏上有Install按钮,按此按钮即可进行安装。如果Install按钮处于无效状态,那么先按Compile按钮编译,一般来说编译之后Install按钮就会处于有效状态,此时再按Install按钮就可以了。
4、 带有Bpl文件的组件包。一般来说这也是由多种组件构成的组件包,它其实是一个动态连接库文件(DLL)。对于这种组件包的安装方法是:在component菜单下选择“install packages”,然后单击Add按钮,在打开的文件对话框中找到相应的bpl文件打开返回后,再单击Ok按钮就可以了。
5、ActiveX控件的安装。要安装这类控件,需要先用regsvr32.exe注册,然后选择Component菜单中Import ActiveX Control项。在Import ActiveX Control打开的窗口中,只有已经注册的ActiveX控件才出现在列表中,选中一个然后按Install按钮就可以安装了。如果事先没有用regsvr32.exe注册也可以按ADD按钮找到OCX文件即时注册,注册后再进行安装。
================================================================
几点说明:
1 在拿到组件后先看是否有说明文件,一般来说在说明文件中有如何安装的指导,有些还会
有组件的属性、事件、方法的使用说明,这些在使用时是非常重要的。
2 在上面的组件(包)安装操作之前,最好将 *.bpl拷贝到你的System目录中,将 *.pas、
*.dcu、*.dcr、*.dp?拷贝到Delphi的Lib目录中再进行。
3 前面我们提到安装DCU组件时,选用的是已经存在的dclusr40.dpk,当然也可以选择安装
到一个新的包中,如果选择新包,需要先取一个名字比如DEMO,事实上安装完毕后用户可以
找到的是Demo.bpl,而找不到DEMO.DPK。假如你已经将一个组件安装到dclusr40.dpk中了,
还想再安装一个组件,如果再安装到dclusr40.dpk中,安装后你得到提示,原来安装的那个
组件已经被取消注册,你将无法使用了。这样不就成了只能安装一个组件了吗?除非你再安
装到一个新的包中才可以两个组件同时使用。当然每安装一个组件生成一个新的BPL文件也
未偿不可,但BPL文件就增加许多。能否在dclusr40.dpk中多安装几个组件呢?当然是可以
的。方法如下:用File菜单下的OPEN打开dclusr40.dpk文件,单击ADD按钮,在打开的对话
框中选择ADD UNIT页面,按Unit file name后的“Browse”按钮打开组件单元文件,OK即可,
用此种方法这样可添加多个组件的单元文件,添加完毕,按一下编译按钮,然后再按
Install按钮即可,如果单元文件是编译好的(DCU)可以直接按安装按钮。
4 组件的删除。光会安装可不行,还要会删除呀。很简单,在component菜单下,选择
install packages,在列表中找到安装所在的Bpl,按Remove按钮,ok!再把Bpl文件删掉
就彻底了,如果不删除BPL文件,下次可以按安装BPL组件的方法再安装使用.
安装控件
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 ”按钮。
选择 PAS 文件
第四步:鼠标右击“ 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 一些常用的 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 为我们开发程序带来了极大的方便。功能强大,丰富多彩的第三方控件更使得我们如虎添翼。