C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75853] Re: 이벤트 핸들러 하나로 간단하게 구현하려면 (C++17)
빌더(TWx) [builder] 1302 읽음    2020-05-13 20:15
초보 님이 쓰신 글 :
: 여기저기 찾아봐도 답이 안나와서 문의드립니다 워낙 초보라 ..ㅎㅎ
:
: 특정 폼 안에서 마우스 클릭한 상태로 드래그를 하는데 클릭된 상태에서는 폼 밖으로 이동할수없게 하고싶거든요
:
: MouseDown 이벤트에서 뭔가를 해야할것 같은데...
:
: 찾아보니 GetClientRect를 사용하면 된다는데 영역지정이 잘못되는지 이상한곳에서 마우스 이동이 잡혀버리더라구요
:
: 도와주세요 ㅠㅠ



답변:

void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
   static bool bMouseCaptured = false;
   
   if ([](const auto& _) -> bool {
      return _ ? 0 : bMouseCaptured ? (::ReleaseCapture(), bMouseCaptured = false, 1) : 1;
   } (::GetAsyncKeyState(VK_LBUTTON) & 0x8000)) return;

   bMouseCaptured = true;
   ::SetCapture(Handle);

   if (TPoint pt{X, Y}; ClientRect.Contains(pt)) return;
   else {
      pt.x = X < 0 ? 0 : X > ClientRect.right ? ClientRect.right : X;
      pt.y = Y < 0 ? 0 : Y > ClientRect.bottom ? ClientRect.bottom : Y;
      ::ClientToScreen(Handle, &pt);
      ::SetCursorPos(pt.x, pt.y);
   }
}




C++17 컴파일러 사용.


+ -

관련 글 리스트
75852 폼안에서 마우스 클릭상태면 폼밖으로 못나가게 하는 방법? 초보 1085 2020/05/13
75857     Re:폼안에서 마우스 클릭상태면 폼밖으로 못나가게 하는 방법? 980 2020/05/16
75853     Re: 이벤트 핸들러 하나로 간단하게 구현하려면 (C++17) 빌더(TWx) 1302 2020/05/13
75854         Re:Re: 배우고 싶습니다 초심 1219 2020/05/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.