then
SetValue(TimeToStr(TimeEditFrm.DateTimePicker1.Time));
//GetValue和SetValue是TStringProperty的基类方法,他直接读取和设置字符串的值
finally
TimeEditFrm.Free;
end;
end;
function TClockProperty.GetAttributes: TPropertyAttributes;
begin
result:=[paDialog,paMultiselect];
//paDialog表示属性编辑器将显示一个对话框,paMulitiselect允许多个组件选择属性
//除此之外如果你想让属性编辑器显示下拉列表,你还需要paValueList具体请查看帮助
end;
最后我们用RegisterPropertyEditor方法注册属性编辑器:
procedure Register;
begin
……
RegisterPropertyEditor(TypeInfo(string),TClock,''BeginTime'',TClockProperty);
RegisterPropertyEditor(TypeInfo(string),TClock,''WakeTime'',TClockProperty);
end;
重新编译更新组件后我们就可以测试了.
接下来我们来实现组件编辑器:
组件编辑器需要继承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;
文章写到这里也该结束了,虽然写了那么多,然而在组件开发中这仍是一小部分内容,本文只是抛砖引玉的作用,希望对正要进入组件开发的朋友一些启示。为了方便你阅读本文,如果你想要本文所开发的这个组件的全部原文件,请和我联系:
E-mail:hk.barton@sohu.com hekphi@hotmail.com QQ:6813489
(全文完)
参考文献:
Marco Cantu 《Mastering Delphi》