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
[47350] Re:Re:Re:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요..
장성호 [nasilso] 1134 읽음    2006-12-08 09:15
여기서 자료 잘 찾으면 상당히 많은 정보를 얻을수 있어요

GetCursorPos 와   ScreenToClient 함수를 이용해서..
Control에 대한  마우스 커서의 상대적인 위치를 알수잇어요

---------------샘플---------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    TPoint pt;
    GetCursorPos(&pt);
    pt=Image1->ScreenToClient(pt);
    if(pt.x>=Image1->Left && pt.x<=(Image1->Left+Image1->Width))
    {
        if(pt.y>=Image1->Top && pt.y<=(Image1->Top+Image1->Height))
        {
            ShowMessage("Image1 위에 마우스가 있음!");
        }
    }
}
//---------------------------------------------------------------------------

허접 님이 쓰신 글 :
: 장성호님.. 답변 감사드립니다.
: 그런데,  getcursorpos를 이용해서 커서 좌표 알아내고 해봤는데, 잘 안되네요.  ㅠ.ㅜ
: 기존 소스에서는 어떻게 방법이 없는건가요??
:
:
:
: 장성호 님이 쓰신 글 :
: : [기본원리]
: : Timer를 이용하세요
: : Timer로 원하는 시간 간격으로 ( 100ms ........)  Mouse의 Position을 체크해서
: : Image12위에있으며... 내려주고
: : Image13위에 있으면 올려주고 그러면 되겠네요
: :
: : 그다음
: : [추가 고려사항]
: :  Timer 이벤트는 시간 설정해 놓은 만큼 주기적으로 뜨는것은 아실테고
: :  OnTimer 이벤트에서 MouseCursor가 어떻게 Image위에 있는지 아느냐가 문제겠죠?
: :
: : 1) GetCursorPos 를 이용
: :     이것은 GetCursorPos 라는 함수로 알수 있습니다.
: :     이 함수로 알수 있는 좌표는 Screen절대좌표이기때문에...
: :     Image의 상대좌표로 봐꿔 줘야 겠죠
: :    그런다음 Image  위치와 크기를알고 있으므로 .. Mouse가 Image위이엤는지 없는지 알수 있겠죠?
: :
: : 2) 뭐 구현해 보지는 않았는데...
: :     Button같은 경우 OnEnter 이벤트와 OnExit 이벤트가 있습니다.
: :     커서가 Enter된후 Exit가 일어나기 전까지는 Button위에 있다고 볼수잇겠죠?
: :     Image12 ,Image13 대신 Image를 넣을수 있는  BitBtn같은것으로 바꿔서 해보는것도 대안이 될수 있을것 같구요
: :     또는 Image12 ,Image13  를 서브클래싱해서 Enter Exit 를 잡는방법도 있을것 같습니다.
: :
: :
: :
: :
: :
: : 허접 님이 쓰신 글 :
: : : 안녕하세요.
: : : 허접입니다.
: : : 왜이렇게 모르는게 많고 막히는게 많을까요.   ㅠ.ㅜ
: : : 죽고싶네요.  ㅠ.ㅜ
: : :
: : : 소스좀 봐주세요~
: : :
: : : void __fastcall TForm1::Image12MouseMove(TObject *Sender,
: : :       TShiftState Shift, int X, int Y)
: : : {
: : :     if (Image11->Top == 0)
: : :     {
: : :     }
: : :
: : :     else Image11->Top += 10;
: : :    
: : : }
: : : //---------------------------------------------------------------------------
: : :
: : : void __fastcall TForm1::Image13MouseMove(TObject *Sender,
: : :       TShiftState Shift, int X, int Y)
: : : {
: : :     if (Image11->Top == -220)
: : :     {
: : :     }
: : :     else Image11->Top -= 10;
: : : }
: : :
: : : 현재 위와 같은 소스로 image12에 마우스 커서를 갖다대고 움직이면 이미지가 10씩 위로 올라가고,
: : : image13에 마우스 커서를 갖다대고 움직이면 이미지가 10씩 아래로 내려갑니다.
: : : 근데, 문제는....
: : : 해당 위치 (image12, image13) 위에서 마우스 커서를 움직여야만 그림이 위/아래로 10씩 움직인다는거죠.
: : : 해당 위치에 마우스 커서만 갖다 놓아도 그림이 위/아래로 10씩 움직이게 하고 싶거든요.
: : : for 문을 돌려서 해봤더니, 너무 빨리 for문이 돌아서 그런지..  그냥 마지막에 보여져야 할 부분으로 이미지가 이동해 버립니다.
: : : 무슨 방법 없을까요?
: : : 도와주세요~   ㅠ.ㅜ

+ -

관련 글 리스트
47340 왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 허접 870 2006/12/07
47341     Re:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 장성호 954 2006/12/08
47343         Re:Re:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 허접 838 2006/12/08
47350             Re:Re:Re:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 장성호 1134 2006/12/08
47357                 아.. 감사합니다.. 그런데.. 허접 833 2006/12/08
47362                     Re:아.. 감사합니다.. 그런데.. 장성호 997 2006/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.