2013-07-09 31 views

回答

4

這些事件很容易添加,如果你的字符串樹還不支持它們。

TMyImprovedVirtualStringTree = class(TSomeVirtualStringTree) 
    private 
    FOnMouseEnter: TNotifyEvent; 
    FOnMouseLeave: TNotifyEvent; 

    // Watch for MouseEnter and MouseLeave messages... 
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; 
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; 
    protected 
    // Provide MouseEnter() and MouseLeave() methods 
    // for descendent controls to override if needed. 
    procedure MouseEnter; virtual; 
    procedure MouseLeave; virtual; 
    published 
    // Publish the events so they show in Delphi's object inspecter. 
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; 
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; 
    end; 

implementation 

{ TMyImprovedVirtualStringTree } 

procedure TMyImprovedVirtualStringTree.CMMouseEnter(var Message: TMessage); 
begin 
    inherited; 
    MouseEnter; 
end; 

procedure TMyImprovedVirtualStringTree.CMMouseLeave(var Message: TMessage); 
begin 
    inherited; 
    MouseLeave; 
end; 

procedure TMyImprovedVirtualStringTree.MouseEnter; 
begin 
    if Assigned(FOnMouseEnter) then 
    FOnMouseEnter(Self); 
end; 

procedure TMyImprovedVirtualStringTree.MouseLeave; 
begin 
    if Assigned(FOnMouseLeave) then 
    FOnMouseLeave(Self); 
end; 
+0

我將調用添加到'繼承'到你的兩個消息處理程序。如果沒有這些,你會中斷控制,因爲底層控制已經有這些消息的處理程序。 –

+0

@DavidHeffernan謝謝大衛。 – Shannon