我正在向TScrollBox添加鼠标滚轮移动支持(使用FormMouseWheel过程),我需要确定鼠标是否在组件内。
基本上,我需要确定鼠标是否在TScrollBox内,以便相应地处理滚动代码。
有什么好的方法吗?
编辑:这里是代码(包括答案),希望对其他人有所帮助:
基本上,我需要确定鼠标是否在TScrollBox内,以便相应地处理滚动代码。
有什么好的方法吗?
编辑:这里是代码(包括答案),希望对其他人有所帮助:
procedure TForm1.FormMouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
var Handled: Boolean);
var
Msg: Cardinal;
Code: Cardinal;
I, ScrollLines: Integer;
ScrollBoxCursosPos: TPoint;
begin
//position of the mouse cursor related to TScrollBox
ScrollBoxCursosPos := ScrollBox1.ScreenToClient(Mouse.CursorPos);
if (PtInRect(ScrollBox1.ClientRect, ScrollBoxCursosPos)) then
begin
Handled := True;
If ssShift In Shift Then
msg := WM_HSCROLL
Else
msg := WM_VSCROLL;
If WheelDelta < 0 Then
code := SB_LINEDOWN
Else
code := SB_LINEUP;
ScrollLines:= Mouse.WheelScrollLines * 3;
for I:= 1 to ScrollLines do
ScrollBox1.Perform(Msg, Code, 0);
ScrollBox1.Perform(Msg, SB_ENDSCROLL, 0);
end;
end;