挑战控件制作高手,关于多种控件组合的事件继承问题(100分)

  • 主题发起人 主题发起人 wbtvc
  • 开始时间 开始时间
W

wbtvc

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:自定义一控件,继承于:TPanel
在其中添加控件:UButton:TButton
如何:在UButton.OnClick中写代码,并且其在实例中的OnClick可以继承这些代码?
 
中间转换一下就可以了:
比如说我们要继承的是OnClick,我们就可以定义一个事件BtnClick,但是我们实际处
理的是BtnClick在BtnClick中写if assigned(OnClick) then OnClick(Self);这种方式应
该就能完成你的要求了吧?
 
可是请注意啊,我所说的这个控件是继承于TPanel,
而我所要继承的是其上的子控件Button的事件啊
 
我觉得是一样的道理呀,你用我说的方法来处理Button就是了:
比如说给TYourPanel定义一个属性OnBtnClick来处理Button的OnClick事件,那么你在
Button本身的OnClick里面写 if assigned(OnBtnClick) then OnBtnClick(Self)。
 
我想还是不行啊,那样子在实例中会覆盖button.onclick啊,
不然的话,你能写段代码给我吗?谢谢!
 
我觉得应该在你控件代码中,触发OnClick前先调用自己的OnClick代码

if assigned(FOnBtnClick) then
begin
自己的代码
OnBtnClick(Self) //触发该event
end;
 
各位兄弟我想要的是:在Panel里的button写Button.OnClick事件,
Panel是Button的Parent,如果直接写button.onClick:=BtnClick,则BtnClick中的方法
会被此控件实例的Button.click方法覆盖,不然的后你写段完整的代码给我看看
 
我想请问一下,你要求的是什么样子?是Panel的OI里面就能够看到Button,并且你可以
直接设定Button的Click事件如果是这样,可能会比较麻烦,因为绑定控件如果要能够做
到这一点,目前我只知道要重新写TBindButton这样的新类,好像不能直接用
FButton: TButton(我还不知道如何在OI的Event里面让TLabel或者TButton也有着类似
PopMenu之类的事件而不用创建新类,望高手告知)。

但是如果你只是要让用户具有Button的自定义的事件的话,就会变得很简单,我写一个
示例,但是不一定正确(随手写写)。

代码:
type
  TButtonPanel = class(TCustomPanel)//随手写,不知道应该是什么类,下同
  private
    FButton: TButton;
    FButtonClickEvent: TNotifyEvent;
    //作为中转,应该是这么写吧
    procedure OnBtnClick(Sender: TObject);
  protected
  public
    constructor Create(Owner: TComponent);override;
    destructor Destroy;override;
  published
    property OnButtonClick read FButtonClickEvent write FButtonClickEvent;
  end;

implementation

constructor Create(Owner: TComponent);
begin
  //创建,可能不对,但是就是这个意思
  FButton := TButton.Create(Self);
  with FButton do
  begin
    Parent := Self;
    OnClick := OnBtnClick;
  end;
end;

destructor Destroy;
begin
  inherited;
end;

procedure OnBtnClick(Sender: TObject);
begin
  //做你在用户的Click之前的动作
  //
  //执行用户的Click事件
  if assigned(OnButtonClick) then OnButtonClick(Self);
  //
  //做你在用户的Click之后的动作
end;
 
shenloqi:
多谢你的回答!
我的意思正是如此:“是Panel的OI里面就能够看到Button,并且
可以直接设定Button的Click事件”。
我也想过重新写button的新类,但是如果Panel中有许多控件的话,那么每个都要写
新类,不是很麻烦吗?
另外:在delphi6中可以使用SetSubComponent方法使子控件的事件可以在父控件中呈现。
 
对不起,我不知道如何实现在OI中出现子控件而不需要自己写新类,只是我觉得很多时
候不需要这么做吧?如果您很需要这样的话,那么您不妨都做,虽然现在工作量大了,
但是以后不就是很方便了?(做好了,还能形成比较好的控件包呢,反正Delphi 6的
TLabelEdit有实现方法)
 
shenloqi:多谢您的意见,我去过你的网站,也下载了你的一部份自制软件,做的不错,
但是我觉得界面好像太花哨了点,显示的速度变慢了点,再者我觉得你的透明的菜单,实
在是没有必要,看得眼都花了(呵呵,您不会介意我这样说吧)。另外系统设置方面做得
还不够,给用户的可设置的空间小了点。

关于我的问题,我还想听听其他高手们的意见。
不知道使用多重接口继承的方式可不可以实现?
 
是呀,wbtvc,那些软件大多是我大约半年前作的,现在看来是没有必要作透明的:)
因为全部是我一个人制作,所以系统设置方面的确是不够,我在1.0版本的软件中的系
统设置就比2.0的要多的多,感谢您给我的建议。

我觉得接口是没有数据成员的,所以感觉好像也不是很好做,所以静听高手指教。
 
其实这个问题我已经用间接的方法解决了,
OK,结帐!
 
多人接受答案了。
 
后退
顶部