본문 바로가기
Application/Delphi Lecture

마우스 다운후 커서 변경하기..

by 현이빈이 2008. 8. 13.
반응형
<경우 1> 스크롤바 영역 밖으로 커서가 나갔을 경우에도 손모양 커서가 유지되어야 한다.

이런 경우에는 간단히 이렇게 할 수 있어요.

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if (ssLeft in shift) and (Sender is TScrollBox) then
 begin
   Windows.SetCursor(Screen.Cursors[crHandPoint]); //<< 전체 커서를 바꿔버림.
 end;
end;

<경우 2> 스크롤바 영역 밖으로 커서가 나갔을 경우에는 기본 커서로 돌아와야 한다.

이런 경우엔 좀 복잡하더군요...

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
 TempEvent: TMouseEvent;
begin
 if (ssLeft in shift) and (Sender is TScrollBox) then
 begin
   with Sender as TScrollBox do
   begin
     // 커서를 바꾸고
     Cursor:=crHandPoint;
     // 콤포넌트에 커서 바꾼다고 미리 알려주고
     Perform(WM_SETCURSOR, Handle, HTCLIENT);
     // 일단 마우스 버튼 UP 이벤트 핸들러를 잠시 백업해두고
     TempEvent:=OnMouseUp;
     // 마우스 버튼 UP 이 일어나도 반응이 없도록 한 후에
     OnMouseUp:=nil;
     // 마우스 버튼을 강제로 들어올려주고...
     Mouse_Event(MOUSEEVENTF_LEFTUP  , 0,0,0,0);
     // 밀려있는 메시지 버퍼를 비워주고..
     Application.ProcessMessages;
     // 백업했던 마우스 버튼 UP 이벤트 핸들러를 다시 장착해줍니다...
     ScrollBox1.OnMouseUp:=TempEvent;
   end;
 end;
end;
반응형