⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 为delphi 4创建连接主页的组件 (2000年7月19日).txt

📁 delphi 编程技巧
💻 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 + -