关于 TMemo 组件,我找不到检测用户何时释放鼠标上的 WHEEL 按钮的方法。标准 OnMouseUp 事件不响应鼠标滚轮按钮。
问问题
2143 次
1 回答
3
那个带有上下箭头的小圆圈是 VCL 的平移窗口,它在按下中间按钮时提供滚动功能。
默认平移窗口 ,TPanningWindow
在其方法中捕获鼠标StartPanning
以便能够跟随鼠标移动,并且在平移停止之前不会释放它 - 这是由于再次单击。这就是为什么备忘录永远不会收到中间按钮向上消息,因此OnMouseUp
不会触发事件。
OnMessage
您可以在“应用程序”的处理程序中检测按钮向上消息,然后将其发送到平移窗口。下面的示例代码在组件的OnMessage
事件处理程序中TApplicationEvents
,测试当平移窗口平移“Memo1”时是否检索到消息。
uses
imouse;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = WM_MBUTTONUP) and Assigned(Mouse.PanningWindow) and
(Mouse.PanningWindow.HandleAllocated) and
(Msg.hwnd = Mouse.PanningWindow.Handle) and
(Mouse.PanningWindow is TPanningWindow) and
(TPanningWindow(Mouse.PanningWindow).PanControl = Memo1) then
// perform what's required
end;
或者,您可以注册自己的平移窗口类,
Mouse.PanningWindowClass
它可以通知它对某些消息的平移控件。这是一个例子:
uses
imouse;
type
TMyPanningWindow = class(TPanningWindow)
protected
procedure WndProc(var Msg: TMessage); override;
end;
{ TMyPanningWindow }
procedure TMyPanningWindow.WndProc(var Msg: TMessage);
begin
inherited;
if (Msg.Msg = WM_MBUTTONUP) and (Assigned(PanControl)) then
PanControl.Perform(Msg.Msg, Msg.WParam, Msg.LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Mouse.PanningWindowClass := TMyPanningWindow;
end;
于 2013-07-29T00:01:10.020 回答