2013-04-06 45 views
2

我設計的是上有一個按鈕控制面板後裔組成:自定義組件如何處理其子項的事件?

THidePanel = class(TPanel) 
private 
    TActivateButton: TButton; 
public 
    constructor Create(aOwner: TComponent); override; 
    procedure WMSize(var Msg: TWMSize); message WM_SIZE; 
    procedure HideComponents; 
end; 

此組件如何處理其TActivateButton控制的OnClick事件?

回答

6

由於按鈕是私有的,你可以只連接一個事件處理程序,以它的組成部分,即

THidePanel = class(TPanel) 
    ... 
    private 
    procedure H_ActivateButtonClick(Sender: TObject); 
    ... 
end; 

constructor THidePanel.Create(aOwner: TComponent); 
begin 
    inherited; 
    ... 
    FActivateButton := TButton.Create(Self); 
    FActivateButton.Parent := Self; 
    FActivateButton.OnClick:= H_ActivateButtonClick; 
end 

procedure THidePanel.H_ActivateButtonClick(Sender: TObject) 
begin 
    // button is clicked! 
end 

如果您還需要提供一個事件的構成元素的最終用戶,那麼你需要添加一個TNotifyEvent財產並從您的內部處理程序調用它,即

THidePanel = class(TPanel) 
    private 
    FOnActivateBtnClick: TNotifyEvent; 
    ... 
    published 
    property OnActivateButtonClick: TNotifyEvent read FOnActivateBtnClick write FOnActivateBtnClick; 
end; 

procedure THidePanel.H_ActivateButtonClick(Sender: TObject) 
begin 
    // button is clicked! 
    ... 
    // fire the end user event 
    if(Assigned(FOnActivateBtnClick))then FOnActivateBtnClick(Self); 
end 
+0

也爲「最終用戶事件」添加了一個示例。 – ain 2013-04-06 08:46:54

相關問題