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
[47357] 아.. 감사합니다.. 그런데..
허접 [khlee0123] 832 읽음    2006-12-08 10:41
장성호님. 답변 감사드립니다.
정말 많은 도움을 주시네요.  ^^
타이머 시간을 조정함에 따라 빠르게, 천천히 이미지가 변경되는걸 확인 했습니다.
뭐라 감사 드려야 할지...    ㅠ.ㅜ

그리고, 아래는 제가 수정한 소스인데, 문제가 좀 있네요.

void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    if ((0 < X) && (X < 156))   
    {
        if ((0 < Y) && (Y < 11))
        {
            for ( ; ; )
            {
                if (Image1->Top > -220)
                {
                    Image1->Top = Image1->Top-1;
                    Sleep(1);
                }
                else
                    break;
            }
        }
    }
}

이렇게 했더니, 그림이 바뀌긴 합니다.
근데, 타이머를 썼을 때 처럼 그림이 순차적으로 이쁘게 변하는게 아니고 좀 이상하게 변하네요.
예를들어, 처음에 보여지는 화면이 아래와 같을 때,

////////////
//     1     //
//     2     //
//     3     //
//     4     //
//     5     //
////////////

타이머를 쓰면

////////////   
//     2     //
//     3     //
//     4     //
//     5     //
//     6     //
////////////   이렇게 바뀌는게, 위 for문을 돌리면

////////////
//     6     //
//     7     //
//     8     //
//     9     //
//    10     //
//////////// 이렇게 건너 뛴다고 해야 하나요? 

이런 현상이 발생합니다.

for문을 잘못 쓴건지, 이유를 모르겠네요.























장성호 님이 쓰신 글 :
: 여기서 자료 잘 찾으면 상당히 많은 정보를 얻을수 있어요
:
: 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:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 허접 837 2006/12/08
47350             Re:Re:Re:왜이렇게 모르고 막히는게 많을까요.. ㅠ.ㅜ 도와주세요.. 장성호 1134 2006/12/08
47357                 아.. 감사합니다.. 그런데.. 허접 832 2006/12/08
47362                     Re:아.. 감사합니다.. 그런데.. 장성호 996 2006/12/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.