2014-06-20 49 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