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
[45537] Re:TImage에서 마우스 이벤트 메시지 가로채기 어떻게 하나요?
장성호 [nasilso] 1311 읽음    2006-07-03 15:16
메세지를 잡아서 처리하는 방법보다 간단한 방법을 소개해 드리겟습니다.
요는 Image와 Shape의 Mouse 이벤트에  같은 함수를 걸어놓는것입니다.

//-------------------

TImage의  OnMouseMove . OnMouseDown,OnMouseUp ... 등의 이벤트함수를
TShape의 OnMouseMove . OnMouseDown,OnMouseUp 이벤트에 연결하면 됩니다.

그러니까...

TImage의  이벤트 함수가..
MouseMove가  Image1OnMouseMove
MouseDown가  Image1OnMouseDown
MouseUp가  Image1OnMouseUp 이라고 한다면

TShape 형 객제가 shape1이 있다면

shape1->MouseMove=Image1OnMouseMove ;
shape1->MouseDown=Image1OnMouseDown;
shape1->MouseUp=Image1OnMouseUp ;

위와 같이 하시면
shape1 에서 나는 Mouse Down,Move,Up 이벤트는
Image1  에서와 동일한 함수에서 돌아갑니다.


단 Mouse 위치좌표 X,Y는 다릅니다.

코딩에서 위와같이 Event 동작함수를 바꿔줘도 되구요
DesignTime때 Object-Inspector에서   관련함수를 변경해주시면 됩니다.

X,Y좌표도 Image1에서 위치랑 동일하게 하고자 한다면...
방법1] 관련함수(Image1MouseMove 함수등...)안에서 
          TObject *Sender가 TImage인지 TShape인지 확인한후
          Sender가 TShape이면  X,Y좌표에다가 shape1의 shape1->Left , shape1->Top만큼 더해주면 되겠죠

void __fastcall TForm1::Image1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
          if( Sender->ClassName()=="TShape")
          {
                 X+=Shape1->Left;
                 Y+=Shape1->Top;
          }

          //처리 로직
}
//---------------------------------------------------------------------------

방법2] 방법1과 비슷한데 TShape함수를 Image1의 함수로 바꾸지 말구요..
그냥 shape1MouseMove등의 함수에서 X,Y좌표에다가 shape1의 shape1->Left , shape1->Top만큼 더한후
TImage1의 동일함수를 호출합면 됩니다.

void __fastcall TForm1::Shape1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
        Image1MouseMove(Image1,Shift,X+Shape1->Left,Y+Shape1->Top);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Image1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
           //
}
//---------------------------------------------------------------------------






이형도 님이 쓰신 글 :
: 즐거운 주말인데 비가 오네요.
: 전 밀린 코딩하느라 주말도 반납하고 있습니다. ^^;
: 윈도우 프로그래밍 초보라서 여러모로 삽질 중입니다.
: 제가 궁금한 점은
: TImage에 TShape로 작은 사각형(트래커로 사용하고 있습니다.) 을 그렸습니다. 나중에 이 Shape에서 마우스를 누르고 도형 크기를 변경하려고 하는데요. 마우스 이벤트가 TShape에서 처리 되더라구요.
: TShape에서 마우스가 눌렸을 때 그 처리를 TImage에서 하고 싶은데요. 그럴려면 메시지를 가로채야 할 것 같은데요. 이거 어떻게 하나요? 혹시 이런걸 메시지 후킹이라고 하나요?
: 어디서 들어본 것 같은데 어떻게 처리해야 할지 간단한 예제나 방법 좀 알려 주세요

+ -

관련 글 리스트
45530 TImage에서 마우스 이벤트 메시지 가로채기 어떻게 하나요? 이형도 1018 2006/07/01
45537     Re:TImage에서 마우스 이벤트 메시지 가로채기 어떻게 하나요? 장성호 1311 2006/07/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.