📄 为delphi 4创建连接主页的组件 (2000年7月19日).txt
字号:
为Delphi 4创建连接主页的组件 (2000年7月19日)
本站更新 分类: 作者:周友 刘春芳 推荐: 阅读次数:622
(http://www.codesky.net)
--------------------------------------------------------------------------------
关键词:组件、类补全、包
摘要:本文以创建连接主页的组件为例,详细介绍了在Delphi 4下如何创建自己组件的方法及一些技巧。
为Delphi 4创建连接主页的组件之前,首先应确定组件是否为可视组件,本文中要创建的组件是不可视组件,
由Tcomponent基本类派生。组件核心是由ShellApi中的函数ShellExecute来完成的,其函数说明在ShellApi
中可以找到,方法是按住Ctrl点击ShellExecute,Delphi 4直接跳转到ShellApi.PAS单元中的ShellExcute声
明处(前提是在Uses条目中应包含ShellApi):
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,
Directory: PChar; ShowCmd: Integer): HINST; stdcall;
各参数含义可参见Delphi在线帮助:
HWnd :父窗口句柄
Operation :指向执行指定操作的字符串的指针
FileName :指向文件名或文件夹字符串的指针
Parameters :指向指定可执行文件参数字符串的指针
Directory :指向指定缺省目录字符串的指针
ShowCmd :当文件打开时是否显示
下面我们利用Component Wizard 编写组件,方法是选择
菜单File | New,从New Items的第一页New中选择Component或选择菜单Component | New Component,此时会显示如下窗口:
在对话框中输入以下信息:
Ancestor type(父辈类型) :TComponent
Class Name(组件类名) :TExplorerWeb
Palette Page(组件面板页名称) :Zhouy
输入完成后,按OK按钮,Component Wizard自动生成如下标准样本代码:
unit ExplorerWeb;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TExplorerWeb = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Zhouy', [TExplorerWeb]);
end;
end.
标准代码中所有语句只是为了给你提供方便,如果你不需要可以删去。
接下来我们要做的就是在样本基础上完善程序。在样本代码的开始部分是Uses条目,其中包含了标准组件所需的必要条目,现在需要增加我们的组件所需条目:ShellApi。
在类声明中做如下声明:
//为创建OnErrorEvent事件,先定义一个指向方法的指针
//ErrorCode 为要传递的错误代码
TNotifyEvent = procedure(Sender: TObject; ErrorCode: Integer) of Object;
private
FOnErrorEvent: TNotifyEvent;
public
constructor Create(AOwner: TComponent); override; // 重载Create 方法
destructor Destroy; override; // 重载Destroy 方法
procedure Open; // 本组件中用到的方法
published
{ Published declarations }
// 定义属性及事件
property OnErrorEvent: TNotifyEventr read FOnErrorEvent write FOnErrorEvent;
property HomePage: string; // 属性
好了,此时让我们利用Delphi 4最重要的新特征之一类补全技术,自动为对象中的所有正确声明和实现完成代码。将光标放在任何一个新声明的方法上,按Ctrl+Shift+C!哇!你会惊喜地发现标准样本变成了如下模样:
unit ExplorerWeb;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ShellApi;
type
TNotifyEvent = procedure(Sender: TObject;ErrorCode: Integer) of Object;
TExplorerWeb = class(TComponent)
private
FOnErrorEvent: TNotifyEvent;
FHomePage: string;
procedure SetHomePage(const Value: string);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Open;
published
{ Published declarations }
property OnErrorEvent: TNotifyEvent read FOnErrorEvent write FOnErrorEvent;
property HomePage: string read FHomePage write SetHomePage;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Zhouy', [TExplorerWeb]);
end;
{ TExplorerWeb }
constructor TExplorerWeb.Create(AOwner: TComponent);
begin
end;
destructor TExplorerWeb.Destroy;
begin
end;
procedure TExplorerWeb.Open;
begin
end;
procedure TExplorerWeb.SetHomePage(const Value: string);
begin
FHomePage := Value;
end;
end.
继续完善自动生成的代码:
constructor TExplorerWeb.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FHomePage := 'http://www.keylab.net/~zhouy';
end;
destructor TExplorerWeb.Destroy;
begin
inherited Destroy;
end;
procedure TExplorerWeb.Open;
var
ErrorCode: Integer;
begin
ErrorCode := ShellExecute(Application.Handle, 'Open', PChar(FHomePage),
nil, nil, SW_SHOWNORMAL);
if Assigned( FOnErrorEvent ) then FOnErrorEvent( Self, ErrorCode );
end;
下面我们再为组件创建一个图标。与组件关联的图标放置在Compoent Pallete 中,它们定义在一个具有.DCR扩展名的文件中,如果不提供该文件,Delphi使用与对象的父类关联的图标。如果在组件的父类或父类以上类中的任何地方都没有图标,那么就会使默认的图标。
我们可以使用Image Editor 创建图标:
· 打开Image Editor并选择New | Component Resource(后缀为.DCR),出现Utitled1.DCR对话框
·右击Contents 项 -> New -> BitBmp
·Colors 选16色,Size选28x28或更小24x24
·从其他文件或自己勾画一幅图,本例以C:\Program Files\Common Files\Borland Shared\Images\Icons\Earth.ICO为基础修改而成的
·将位图改名为TexplorerWeb,并以ExplorerWeb.DCR 存盘退出。
还可以使用附件画图工具或其他编辑器来创建位图,并创建.RC文件:
TexplorerWeb Bitmap ExplorerWeb.bmp
用命令行进行编译:brc -r ExplorerWeb.RC
将所得的文件ExplorerWeb.RES 更名为ExplorerWeb.DCR
运行测试组件程序(这一步由读者自己去做),无误后将它放入Componet Pallette中。可以通过选择Component | Install Component然后选择Into New Component页来实现,也可以用更简单的方法创建包:
File | New | Package菜单,将激活Package Editor并创建一个名为Package1.DPK的新文件,如图所示:
将缺省包保存为Zhouy.DPK。选择Add按钮,添加ExplorerWeb组件,此时可以看到Contains下有两项:ExplorerWeb.DCR和ExplorerWeb.PAS。选择Compile进行编译,无误后便可在Component Pallette中生成Zhouy页,其中有一名为ExplorerWeb的组件。
至此我们创建了Delphi 4 下连接主页的组件,此组件有HomePage属性及OnErrorEvent事件。
下面简单总结一下制作组件的过程:先确定组件的父类,利用Component Wizard,辅以Delphi 类补全技术自动生成组件程序,并完善所用到的声明和实现;再用Image Editor 制作组件图标;最后将组件增加到相应的包中编译完成。
最后举例说明如何使用我们制作的组件。
新建一个Project,添加一个Button组件和新制作的ExplorerWeb组件。
在Button的OnClick事件中写入:
procedure TForm1.ButtonClick(Sender: TObject);
begin
ExplorerWeb.Open;
end;
在ExplorerWeb的OnErrorEvent事件中写入:
procedure TForm1.ExplorerWebErrorEvent(Sender: TObject; ErrorCode: Integer);
begin
case ErrorCode of
0: MessageBox( Handle, '错误: 内存不足','错误提示',0 );
ERROR_FILE_NOT_FOUND: MessageBox( Handle, '错误:没有找到文件',
'错误提示' ,0 );
ERROR_PATH_NOT_FOUND: MessageBox( Handle, '错误:目录错误',
'错误提示' ,0 );
ERROR_BAD_FORMAT: MessageBox( Handle, '错误:错误的文件格式',
'错误提示' ,0 );
else
MessageBox( Handle,PChar('错误号: ' + IntToStr( ErrorCode ),'错误提示',0 );
end;
end;
运行此程序,当点击按钮时,将自动连接至‘Delphi 驿站’。若有错误,会给出相应提示。
以上是笔者制作组件的一点心得,愿与读者们共享!并请批评指正。
联系地址:山东省计算中心
联系电话:0531-2605533
邮政编码:250014
联 系 人:周友(山东省计算中心) 刘春芳(济南永宁制药股份有限公司)
Email:zhouy@keylab.net
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -