通过实例看VCL组件开发全过程(四)
敬业的IT人
互联网
佚名
2008-1-4 16:14:16
(接上文)四、组件属性编辑器和组件编辑器:通过上面的努力我们的组件似乎已经比较完美了,可我们也忽略了一些重要的细节和一些有趣的事情,这一篇我们将研究两个很有用的组件特性:在之前开发组件核心功能时我们曾设置了两个属性BeginTime和WakeTime,他们都是字符串型的属性,然而他们所要表示的却是时间类型,这样就很有可能使组件使用者错误的编辑属性并导致转化字符串到时间时出错(当然这里只是为了文章的讲解,我们故意把它设置为了字符串类型),虽然通过浏览原代码你知道我们也做了一些代码级别的防出错处理,使当输入错误时属性自动变成‘00:00:00’,然而这对组件使用者来讲仍然显的很不友好,所以我们需要为这两个属性定制编辑器,我们的编辑器将弹出一个窗口里面有一个TdateTimePicker用来选择时间。在delphi中有许多这样的例子,例如大家都知道的lines属性,当你单击它右放的省略号时为自动弹出一个文本编辑器来编辑lines,这大大降低了组件使用者范错误的可能性。在定制完属性编辑器以后,我们将为组件本身加入一写有趣的元素——组件编辑器,这也是在delphi中经常出现的,例如有些组件当你双击它时,它并不会进入代码编写状态,而是弹出它自己的编辑器。虽然我们的组件似乎并不需要这种特性,但为了演示它,我们也将它考虑近来,我们给我们的组件编写了一个版权信息和一个关于对话框,当组件使用者双击它时弹出关于信息(当然,这仅仅是种演示)。上面提到的两种特性由于它们只是会在设计时起作用,所以你完全可以在新的组件包中编写并注册它们,并将这个组件包设置为Designtime o:title="PE">接下来我们来实现组件编辑器:组件编辑器需要继承TcomponentEditor并覆盖一些重要的方法,GetVerbCount返回设计时组件右键自定义菜单的数目,GetVerb为每一个自定义菜单添加文字,ExecuteVerb为每一个菜单项添加事件,Edit为组件的缺省操作指定事件(即在设计时双击组件),以下是代码:TClockEditor=class(TComponentEditor)public function GetVerbCount:integer;override; function GetVerb(index:integer):string;override; procedure ExecuteVerb(index:integer);override; procedure Edit;override;end;实现部分:procedure TClockEditor.Edit;begin ExecuteVerb(1); //默认显示关于end; procedure TClockEditor.ExecuteVerb(index: integer);begin case index of //第一个显示名字的菜单什么都不做显示 1:showmessage('hk.barton@2003'); end;end; function TClockEditor.GetVerb(index: integer): string;begin case index of 0:result:='hk.barton'; 1:result:='About Clock'; end;end; function TClockEditor.GetVerbCount: integer;begin result:=2;//我们显示两条菜单,一个我的名字,一个关于end;同样最后我们注册组件编辑器:procedure Register;begin …… RegisterComponentEditor(TClock,TClockEditor);end;同样可以看到组件编辑器的测试情况:
文章写到这里也该结束了,虽然写了那么多,然而在组件开发中这仍是一小部分内容,本文只是抛砖引玉的作用,希望对正要进入组件开发的朋友一些启示。
文章写到这里也该结束了,虽然写了那么多,然而在组件开发中这仍是一小部分内容,本文只是抛砖引玉的作用,希望对正要进入组件开发的朋友一些启示。
- 最新文章
- QQ尾巴病毒的另一种实现[01-04]
- Delphi中的线程类--之(1)[01-04]
- 回调函数与Delphi的事件模型[01-04]
- 如何用编程实现TDateTimePicker的24小时制到1..[01-04]
- DELPHI实现activex控件的限制[01-04]
- 如何防止密码框的密码被人破译[01-04]
- 相关文章
