Q&A

  • 컴포넌트 위에 마우스가 올라(내려)왔는지의 여부....
이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

시킬려고 하는데 잘 안되는군요.



답변내용을 찾아보니까 다음과 같은 답변이 있는데

-------------------------------------------------------------

마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

컴포넌트의 메소드로 다음을 추가합니다.

procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;



procedure TMyCompo.CMMouseEnter(var Message: TMessage);

begin

TForm(parent).Caption := '들어왔네!';

end;



procedure TMyCompo.CMMouseLeave(var Message: TMessage);

begin

TForm(parent).Caption := '나갔네!';

end;

----------------------------------------------------------

컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

감사하겠습니다.



사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.

5  COMMENTS
  • Profile
    이진수 2001.06.27 01:09
    히야~ 밑에 기라성 같은 두분이 답변해 주셔서 답변 해도 될지 모르겠지만 ^^



    음... 상속 받아서 추가 하는 방법이 가장 간단하고 편하지 않을 까 생각 합니다.

    Form을 상속 받아서 새로운 컴퍼넌트를 만들어보세요~



    메세지 핸들러 추가하는 방법은 여기 게시판에 보시거나, 아님 델파이 디렉토리 밑에서 VCL Source를 보신다면 그리 어렵지 않게 하실 수 있을 거라 봅니다.



    그럼 수고~



    김시준 wrote:

    > 이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

    > 시킬려고 하는데 잘 안되는군요.

    >

    > 답변내용을 찾아보니까 다음과 같은 답변이 있는데

    > -------------------------------------------------------------

    > 마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

    > 반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

    > 컴포넌트의 메소드로 다음을 추가합니다.

    > procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    > procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    >

    > procedure TMyCompo.CMMouseEnter(var Message: TMessage);

    > begin

    > TForm(parent).Caption := '들어왔네!';

    > end;

    >

    > procedure TMyCompo.CMMouseLeave(var Message: TMessage);

    > begin

    > TForm(parent).Caption := '나갔네!';

    > end;

    > ----------------------------------------------------------

    > 컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

    > 위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

    > 감사하겠습니다.

    >

    > 사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.

  • Profile
    조규춘 2001.06.26 00:08
    김시준 wrote:

    > 이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

    > 시킬려고 하는데 잘 안되는군요.

    >





    위의 질문의 내용과 같은 기능을 구현하려면...

    아래의 찾아보신 내용은 쩝.. 메시지 까지 안쓰셔도 되는디.....



    이거에 대한 초간단 소스를 올려놓을떼니 가져가셔서 보셔요

    http://user.chollian.net/~garam4g/delphi.zip







    > 답변내용을 찾아보니까 다음과 같은 답변이 있는데

    > -------------------------------------------------------------

    > 마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

    > 반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

    > 컴포넌트의 메소드로 다음을 추가합니다.

    > procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    > procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    >

    > procedure TMyCompo.CMMouseEnter(var Message: TMessage);

    > begin

    > TForm(parent).Caption := '들어왔네!';

    > end;

    >

    > procedure TMyCompo.CMMouseLeave(var Message: TMessage);

    > begin

    > TForm(parent).Caption := '나갔네!';

    > end;

    > ----------------------------------------------------------

    > 컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

    > 위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

    > 감사하겠습니다.

    >

    > 사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.

  • Profile
    이경문 2001.06.26 00:35
    올려 놓은 예제화일에서 만약 Image를 폼 중간에 올려 놓지 않고

    폼 가장자리에 놓으면 마우스가 프로그램 윈도우 밖으로 이동되었을 때

    MouseMove이벤트가 일어나지 않겠지요?

    그리고 폼위에 콘트롤들이 많이 생긴다면

    각각의 콘트롤 안에 모든 MouseMove 이벤트에 대해서

    InControl 함수를 불러줘야 하지요.

    조금 불편하지 않을까요?

    조규춘 wrote:

    > 김시준 wrote:

    > > 이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

    > > 시킬려고 하는데 잘 안되는군요.

    > >

    >

    >

    > 위의 질문의 내용과 같은 기능을 구현하려면...

    > 아래의 찾아보신 내용은 쩝.. 메시지 까지 안쓰셔도 되는디.....

    >

    > 이거에 대한 초간단 소스를 올려놓을떼니 가져가셔서 보셔요

    > http://user.chollian.net/~garam4g/delphi.zip

    >

    >

    >

    > > 답변내용을 찾아보니까 다음과 같은 답변이 있는데

    > > -------------------------------------------------------------

    > > 마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

    > > 반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

    > > 컴포넌트의 메소드로 다음을 추가합니다.

    > > procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    > > procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    > >

    > > procedure TMyCompo.CMMouseEnter(var Message: TMessage);

    > > begin

    > > TForm(parent).Caption := '들어왔네!';

    > > end;

    > >

    > > procedure TMyCompo.CMMouseLeave(var Message: TMessage);

    > > begin

    > > TForm(parent).Caption := '나갔네!';

    > > end;

    > > ----------------------------------------------------------

    > > 컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

    > > 위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

    > > 감사하겠습니다.

    > >

    > > 사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.

  • Profile
    조규춘 2001.06.26 02:06
    이경문 wrote:

    > 올려 놓은 예제화일에서 만약 Image를 폼 중간에 올려 놓지 않고

    > 폼 가장자리에 놓으면 마우스가 프로그램 윈도우 밖으로 이동되었을 때

    > MouseMove이벤트가 일어나지 않겠지요?



    허거덩~

    히야~ 저는 간단히 질문에대한 답변만 후다닥 만들려고 생각하다보니

    그런거 생각도 못했네요!

    프로그래밍 하실때 버그나 에러가 많이 없으실거 같네요~ ^^

    저는 머리가 않조아서 실수를 마니 하곤 한답니다. 히히



    오랫만에 이경문님과 이야기 나누니깐 좋군요~ 요즘엔 일은 잘 되시는지요?

    지적하주신 내용에 대하여 고개가 숙여 지는 군요~ 감사감사





    > 그리고 폼위에 콘트롤들이 많이 생긴다면

    > 각각의 콘트롤 안에 모든 MouseMove 이벤트에 대해서

    > InControl 함수를 불러줘야 하지요.

    > 조금 불편하지 않을까요?





    불편하지 않을수 있습니다. 물론 설계에 따라 달라지긴 하겠지만.

    델세상에 계산기 예제 올려 놓은 거 보셨을지 모르겠지만..

    각각의 콘트롤 안에 모든 MouseMove 이벤트에 대해서

    InControl 함수를 불러줄 필요까지는 없습니다..



    그럼 또 저는 물러가겠습니다.

    수고 하셔요~





    > 조규춘 wrote:

    > > 김시준 wrote:

    > > > 이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

    > > > 시킬려고 하는데 잘 안되는군요.

    > > >

    > >

    > >

    > > 위의 질문의 내용과 같은 기능을 구현하려면...

    > > 아래의 찾아보신 내용은 쩝.. 메시지 까지 안쓰셔도 되는디.....

    > >

    > > 이거에 대한 초간단 소스를 올려놓을떼니 가져가셔서 보셔요

    > > http://user.chollian.net/~garam4g/delphi.zip

    > >

    > >

    > >

    > > > 답변내용을 찾아보니까 다음과 같은 답변이 있는데

    > > > -------------------------------------------------------------

    > > > 마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

    > > > 반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

    > > > 컴포넌트의 메소드로 다음을 추가합니다.

    > > > procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    > > > procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    > > >

    > > > procedure TMyCompo.CMMouseEnter(var Message: TMessage);

    > > > begin

    > > > TForm(parent).Caption := '들어왔네!';

    > > > end;

    > > >

    > > > procedure TMyCompo.CMMouseLeave(var Message: TMessage);

    > > > begin

    > > > TForm(parent).Caption := '나갔네!';

    > > > end;

    > > > ----------------------------------------------------------

    > > > 컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

    > > > 위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

    > > > 감사하겠습니다.

    > > >

    > > > 사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.

  • Profile
    이경문 2001.06.26 02:58
    일일히 MouseMove 이벤트에 대해 작성하지 않아도 되는 방법이 있는지는 몰랐네요.

    저는 컴포넌트를 수정했는데...

    물론 원래 컴포를 수정한 것 아니고(만든 사람 기분 나쁘니까) 상속받아서 썼지요.

    음... 암튼 관련 소스를 함 보고 싶네요.

    저도 예전에 이 문제때문에 고심을 많이 했걸랑요..... ^^



    조규춘 wrote:

    > 이경문 wrote:

    > > 올려 놓은 예제화일에서 만약 Image를 폼 중간에 올려 놓지 않고

    > > 폼 가장자리에 놓으면 마우스가 프로그램 윈도우 밖으로 이동되었을 때

    > > MouseMove이벤트가 일어나지 않겠지요?

    >

    > 허거덩~

    > 히야~ 저는 간단히 질문에대한 답변만 후다닥 만들려고 생각하다보니

    > 그런거 생각도 못했네요!

    > 프로그래밍 하실때 버그나 에러가 많이 없으실거 같네요~ ^^

    > 저는 머리가 않조아서 실수를 마니 하곤 한답니다. 히히

    >

    > 오랫만에 이경문님과 이야기 나누니깐 좋군요~ 요즘엔 일은 잘 되시는지요?

    > 지적하주신 내용에 대하여 고개가 숙여 지는 군요~ 감사감사

    >

    >

    > > 그리고 폼위에 콘트롤들이 많이 생긴다면

    > > 각각의 콘트롤 안에 모든 MouseMove 이벤트에 대해서

    > > InControl 함수를 불러줘야 하지요.

    > > 조금 불편하지 않을까요?

    >

    >

    > 불편하지 않을수 있습니다. 물론 설계에 따라 달라지긴 하겠지만.

    > 델세상에 계산기 예제 올려 놓은 거 보셨을지 모르겠지만..

    > 각각의 콘트롤 안에 모든 MouseMove 이벤트에 대해서

    > InControl 함수를 불러줄 필요까지는 없습니다..

    >

    > 그럼 또 저는 물러가겠습니다.

    > 수고 하셔요~

    >

    >

    > > 조규춘 wrote:

    > > > 김시준 wrote:

    > > > > 이미지 콤포넌트위에 마우스가 올라오면 다른 이미지로 바꾸로 내려가면 다시 원위치

    > > > > 시킬려고 하는데 잘 안되는군요.

    > > > >

    > > >

    > > >

    > > > 위의 질문의 내용과 같은 기능을 구현하려면...

    > > > 아래의 찾아보신 내용은 쩝.. 메시지 까지 안쓰셔도 되는디.....

    > > >

    > > > 이거에 대한 초간단 소스를 올려놓을떼니 가져가셔서 보셔요

    > > > http://user.chollian.net/~garam4g/delphi.zip

    > > >

    > > >

    > > >

    > > > > 답변내용을 찾아보니까 다음과 같은 답변이 있는데

    > > > > -------------------------------------------------------------

    > > > > 마우스가 컨트롤 안에 들어오면 CM_MOUSEENTER 가 발생하고,

    > > > > 반대로 커서가 밖으로 나가면 CM_MOUSELEAVE가 발생한다.

    > > > > 컴포넌트의 메소드로 다음을 추가합니다.

    > > > > procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    > > > > procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    > > > >

    > > > > procedure TMyCompo.CMMouseEnter(var Message: TMessage);

    > > > > begin

    > > > > TForm(parent).Caption := '들어왔네!';

    > > > > end;

    > > > >

    > > > > procedure TMyCompo.CMMouseLeave(var Message: TMessage);

    > > > > begin

    > > > > TForm(parent).Caption := '나갔네!';

    > > > > end;

    > > > > ----------------------------------------------------------

    > > > > 컴포넌트의 메소드에 추가하는 방법을 모르겠군요....

    > > > > 위의 procedure를 콤포넌트의 메소드에 추가하는 방법과 사용방법을 알려 주심

    > > > > 감사하겠습니다.

    > > > >

    > > > > 사용환경은 윈2000 + 델5 또는 윈98 + 델5 입니다.