2014-06-20 44 views
0

我需要禁用TRichEdit組件的事件OnMouseEnter上的兩個鼠標按鈕,並再次啓用事件OnMouseLeave。Delphi禁用鼠標按鈕並再次啓用

設置TRichEdit enabled = false並不能解決我的問題。

任何提示?

+0

那麼,禁用富編輯將不會禁用鼠標按鈕。或者這可能不是真正的問題。 –

+0

請問爲什麼?這似乎與Windows應用程序的工作方式非常相反。這樣做的目標是什麼?可能有更好的方法。 –

+1

我不明白爲什麼人們投票結束「不清楚你在問什麼」,我很清楚要問什麼,不清楚的是爲什麼。 –

回答

4

您可以對豐富的編輯進行子類化,以攔截鼠標按鈕的向下/向上消息。然後你不需要看着鼠標進入,離開控制。例如:

type 
    TForm1 = class(TForm) 
    ... 
    private 
    FSaveRichEditProc: TWndMethod; 
    procedure RichEditWindowProc(var Message: TMessage); 
    .. 
    end; 

    ... 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    FSaveRichEditProc := RichEdit1.WindowProc; 
    RichEdit1.WindowProc := RichEditWindowProc; 
end; 

procedure TForm1.RichEditWindowProc(var Message: TMessage); 
begin 
    case Message.Msg of 
    WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, 
    WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MBUTTONDBLCLK, 
    WM_RBUTTONDOWN, WM_RBUTTONUP, WM_RBUTTONDBLCLK: 
     begin 
     Message.Result := 0; 
     Exit; 
     end; 
    end; 
    FSaveRichEditProc(Message); 
end; 
+0

更好地使用['EN_MSGFILTER'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb787974(v = vs.85).aspx)notification(例如['this way'](例如http://pastebin.com/PNN01PGP)。 – TLama

+0

@TLama - 你仍然需要子類,它似乎更多的工作,爲什麼它更好? –

+0

這是正確的,但是,通知更好,因爲它完全是爲了這個控件的「事件吃」*的目的。 – TLama