Lau*_*sti 6 delphi components creation
我已经基于a创建了一个新的复合组件TCustomPanel.在它上面我有两个标签和一个图像,覆盖所有表面,看到这个布局(下部不太重要):
我的问题是如何导出任何这些控件的双击功能?是否可以使用新控件的双击(事件)来管理其上的子控件的那些?
我认为你应该使用以下方法来做到这一点:
OnDblClick事件添加到复合组件。FOnInternalDblClick(名称并不重要)的方法,该方法与TNotifyEvent您的复合组件兼容。FOnInternalDblClick,执行复合组件的OnDblClick.FOnInternalDblClick给OnDblClick要管理事件的每个组件的事件。示例代码:
TMyCompoundComponent = class(TCustomPanel)
protected
  FOnDblClick : TNotifyEvent;
  procedure FOnInternalDblClick(ASender : TObject);
public
  constructor Create(AOwner : TComponent); override;
published
  property OnDblClick : TNotifyEvent read FOnDblClick write FOnDblClick;
end;
constructor TMyCompoundComponent.Create(AOwner : TComponent);
begin
  inherited;
  //Lab1.OnDblClick := FOnInternalDblClick;
  //Lab2.OnDblClick := FOnInternalDblClick;
  //...
end;
procedure TMyCompoundComponent.FOnInternalDblClick(ASender : TObject);
begin
  if(Assigned(FOnDblClick))
  then FOnDblClick(ASender);
end;
笔记:
在复合组件的OnDblClick事件处理程序中,ASender参数将是内部组件(Lab1, Lab2, Lab3...)。如果您更喜欢接收复合组件本身作为ASender参数,您可以FOnInternalDblClick通过传递Self而不是更改方法ASender:
procedure TMyCompoundComponent.FOnInternalDblClick(ASender : TObject);
begin
  if(Assigned(FOnDblClick))
  then FOnDblClick(Self);
end;