kkuzil.own@gmail.com

Posted
Filed under Development/Delphi
TScrollBox 에서는 기본적으로 마우스 휠이 적용이 안된다.
그래서 적용하는 방법은...

TScrollBox을 품고 있는 폼의 MouseWheel 이벤트에

  if WheelDelta >= 0 then
    SendMessage(scBox.Handle, WM_VSCROLL, SB_LINELEFT, 0)
  else
    SendMessage(scBox.Handle, WM_VSCROLL, SB_LINERIGHT, 0);
  Handled := True;

을 하면 되는데, 다른 컨트롤에 스크롤이 있는경우 모든 스크롤 이벤트를 가로체서 해당 컨트롤에 까지 닫지 않는다.

WindowFromPoint(p: TPoint) 를 이용해서 마우스 커서에 올려져 있는 컨트롤이 TScrollBox인지 스크롤 다른건지 확인해서 넘겨준다.

procedure TForm1.Form1MouseWheel(Sender: TObject;
  Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint;
  var Handled: Boolean);
var
  h: HWND;
begin
  h := WindowFromPoint(MousePos);

  if (h <> vtProc.Handle) and (h <> vtList.Handle) then
    h := scBox.Handle;

  if WheelDelta >= 0 then
    SendMessage(h, WM_VSCROLL, SB_LINELEFT, 0)
  else
    SendMessage(h, WM_VSCROLL, SB_LINERIGHT, 0);
  Handled := True;
end;

이런식으로 폼 MouseWheel 이벤트에 추가해주면 장점이 있는데,
스크롤 할 컨트롤을 굳이 클릭해서 포커스를 주지 않아도 마우스 휠만으로 스크롤이 가능하다는 것이다.
 
끝.
2014/11/05 10:23 2014/11/05 10:23