组件设计 ( 积分: 100 )

  • 主题发起人 主题发起人 dyxfkj
  • 开始时间 开始时间
D

dyxfkj

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟想作这样一组件!
在ToolBar上有新增、保存、打印....按钮。
这些Button的事件好写!但问题是不是所有的保存事件都是这样,有的需要在原来的基础上增加检查的功能!

其实就是类似插件的功能!在事先写好的代码基础上插入一些代码,如:

Fucntion fSave: Boolean;
begin
...
end

在这基础上需要检查 Edit1的值是否符合输入的范围!
 
1、定义事件,比如叫做onsave,带参数handled,var类型的,此参数默认值是false
2、你的控件判断:是否onsave有代码,如果没有或者虽然有但执行后handled依然是false,则执行默认动作。
 
没有太明白
 
就是说,不允许用户直接为save按钮填写点击事件的代码,而是让他在你新定义的事件onsave里写代码。
在save按钮里是你的代码,大概这样:
var hdl:boolean;
begin
if assigned(onsave) then begin
hdl:=false;
onsave(hdl);//触发事件,事件的代码可能改变了hdl的值
if not hdl then doDefaltFunc;//用户通过hdl决定是否执行默认动作
end
end;
 
OnSave是作为什么?
事件?
 
用Frame或者窗体继承
 
可以这样:
procedure TMyObject.DoSaveEvent();vritual;
begin
if Assigned(FOnSaveEvent) then
FOnSaveEvent(...)
end;

procedure TMyObject.Call();
begin
DoSaveEvent;
end;

以后子类需要的时候可以:
procedure TMyObject_Child.DoSaveEvent;override;
begin
//这里的FText<>''是举例的条件
if FText<>'' then
Inherited
else
DoSomething;
end;
 
to 楼上:

其实我不是在子类中来做,而是当一个控件发布后,需要调用一些个类似于插件的东西!
 
学作组件,,,学习....
 
把Save等需要扩展的函数做成虚函数,以便在子类中重载
然后将虚函数公开成事件
 
多人接受答案了。
 
后退
顶部