ということで、整理してまとめなおしたコードです。フォームにはTMemoと
TListview(片方はvsReport、もう一方はvsIcon)があり、そのどこの上で
ホイールアクションを行ってもマウスポインタの下のコントロールがスクロー
ルします。
procedure TForm2.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
{===============================================================================
マウスポインタの下のコントロールをスクロールさせる
===============================================================================}
var
APos : TPoint;
RectMemo1 : TRect;
Rectlistview1 : TRect;
Rectlistview2 : TRect;
begin
GetCursorPos(APos);
GetWindowRect(Memo1.Handle, RectMemo1);
GetWindowRect(ListView1.Handle, RectListView1);
GetWindowRect(ListView2.Handle, RectListView2);
if PtInRect(RectMemo1, APos) then begin
if WheelDelta > 0 then begin
Memo1.Perform(EM_SCROLL,SB_LINEUP,0);
end else begin
Memo1.Perform(EM_SCROLL,SB_LINEDOWN,0);
end;
end;
if PtInRect(RectListView1, APos) then begin
if WheelDelta > 0 then begin
ListView1.Perform(WM_VSCROLL, SB_LINEUP,0);
end else begin
ListView1.Perform(WM_VSCROLL, SB_LINEDOWN,0);
end;
end;
if PtInRect(RectListView2, APos) then begin
if WheelDelta > 0 then begin
ListView2.Perform(WM_VSCROLL, SB_LINEUP,0);
end else begin
ListView2.Perform(WM_VSCROLL, SB_LINEDOWN,0);
end;
end;
Handled := true;
end;
|