반응형
<경우 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;
이런 경우에는 간단히 이렇게 할 수 있어요.
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;
반응형