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
[27989] MouseEnter / MouseOut 구현 중 문제가 발생합니다...
초보 [] 1129 읽음    2003-11-26 17:42
CM_MOUSEENTER와 CM_MOUSELEAVE를 인식하게 하는 아래와 같은 Image Component를 새로 만들어

폼 위에 올려놓고 새로운 Event의 Handler를 만든 후 ShowMessage를 사용해 테스트해 보았습니다.

그런데 MouseEnter는 이상없이 작동하나 MouseOut의 경우 마우스가 컴포넌트를 빠져나가면

ShowMessage가 무한대로 실행되는 일이 발생합니다.

(그 상태에서 다시 마우스 포인터를 컴포넌트 안에 넣으면 MouseEnter와  MouseOut내 ShowMessage 가
교대로 무한대로 발생합니다...ㅡㅜ)

이를 한 번만 수행하게 하려면 어떻게 해야 하는지 고수님들의 가르침 부탁드립니다...

그리고 해당 Component내에서 Drag&Drop Event의 Source와 유사한 기능을 하는 파라미터

(구체적으로 MouseEnter에서는 Source 파라미터가 이전에 마우스 포인터가 올라갔던 컴포넌트를 넘기고,

MouseOut에서는 해당 파라미터에 새로 마우스 포인터가 올라간 컴포넌트를 넘기고자 합니다)

를 작성할 수 있는 방법이 있다면 알려주시면 감사하겠습니다...

소스는 아래와 같습니다.

//MyImage.h
class PACKAGE TMyImage : public TImage
{
private:
protected:
    TNotifyEvent FOnMouseEnter;
    TNotifyEvent FOnMouseOut;


    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(CM_MOUSEENTER, TMessage, OnMouseEnterEvt)
        VCL_MESSAGE_HANDLER(CM_MOUSELEAVE, TMessage, OnMouseOutEvt)
    END_MESSAGE_MAP(TImage)
    void __fastcall OnMouseOutEvt(TMessage & Message);
    void __fastcall OnMouseEnterEvt(TMessage & Message);

public:
    __fastcall TCtlImage(TComponent* Owner);
__published:
    __property TNotifyEvent OnMouseEnter
        = {read=FOnMouseEnter, write=FOnMouseEnter};
    __property TNotifyEvent OnMouseOut
        = {read=FOnMouseOut, write=FOnMouseOut};

    __property OnClick;
};

//MyImage.cpp
...
void __fastcall TCtlImage::OnMouseOutEvt(TMessage & Message)
{
    if(FOnMouseOut)     FOnMouseOut(this);
}

void __fastcall TMyImage::OnMouseEnterEvt(TMessage & Message)
{
    if(FOnMouseEnter) FOnMouseEnter(this);
}

//Form 구현부
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
    int X, int Y)
{
    //if(dynamic_cast<TForm*>(Sender)->)
}
//---------------------------------------------------------------------------


void __fastcall TForm1::MyImage1MouseOut(TObject *Sender)
{
    ShowMessage("Mouse Out is working!!!");
}

void __fastcall TForm1::MyImage1MouseEnter(TObject *Sender)
{
    ShowMessage("Mouse Enter is working!!!");
}

+ -

관련 글 리스트
27989 MouseEnter / MouseOut 구현 중 문제가 발생합니다... 초보 1129 2003/11/26
27994     자답..... 초보 982 2003/11/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.