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
[49326] Re:TImage 질문
장성호 [nasilso] 1179 읽음    2007-05-22 09:33
[문제점]
님의 class Test 는 TImage를 상속받는게 의미가 없네요

TImage를 상속받으면  이미 Test class는 TImage를 부모class로 가지고 있는데
또 class내부에 TImage를 또 선언하고 그것은 new 하셨네요

결론적으로 Test class를   TImage를 2개 가지고 있다고도 얘기할수 있습니다.

//--------------------------------------------------------------------
// TImage를 내부 변수가 갖는 경우 class
class Test1
{
public:
     __fastcall Test1();
      TImage *img;  //내부에 TImage 선언
};
//--------------------------------------------------------------------

// TImage를 상속받는 경우 class    -   내부에 TImage 선언이 필요없음
class Test2 : public TImage
{
public:
      __fastcall Test2 (TComponent* Owner);

};
//--------------------------------------------------------------------


[이벤트 문제 해결]

1. 일단 Mouse이벤트에 해당하는 함수를 미리 만들어야 합니다.
    ( 예.  MyMouseDown , MyMouseMove , MyMouseUp )


2. 그런다음 TImage를 동적으 생성한후에 Mouse Event 걸려면... 
    
        TImage *Img=new TImage(this);
         Img->Parnet = this;
         //---------------------------------------
         Img->OnMouseDown    = MyMouseDown;
         Img->OnMouseMove    = MyMouseMove;
         Img->OnMouseUp        = MyMouseUp;
         //---------------------------------------

   이렇게 해주시면 됩니다.



[추 신]
class 내부에 TImage를 선언하지 않고
TImage를 상속받아서 class를 만들어서 사용하려면....


//=======TMyImage 클래스 선언부================================================
//==========================================================================
class TMyImage : public TImage
{
public:
    // 생성자 오버로딩으로 두가지 생성 ( new ) 방법을 제공
    __fastcall TMyImage(TComponent* Owner);                                                                     // 생성자 1
    __fastcall TMyImage(TComponent* Owner,TWinControl *parent,TRect rc,TColor clr);      // 생성자 2
    String sDesc;
};
//---------------------------------------------------------------------------

//-------------TMyImage 클래스  생성자 구현부 -------------------------------
__fastcall TMyImage::TMyImage(TComponent* Owner)
    : TImage(Owner)
{
    sDesc="첫번째 생성자로 생성";
}
//---------------------------------------------------------------------------
__fastcall TMyImage::TMyImage(TComponent* Owner,TWinControl *par,TRect rc,TColor clr)
    : TImage(Owner)
{
    Parent=par;
    Left=rc.left;
    Top=rc.top;
    Width=rc.Width();
    Height=rc.Height();
    Canvas->Brush->Color=clBlue;
    Canvas->Rectangle(Rect(0,0,Width,Height));

    sDesc="두번째 생성자로 생성";
}
//==========================================================================


// ----------------TMyImage 클래스 사용 예-------------------------------------
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TMyImage *img=new TMyImage(this);
    img->Parent=this;
    img->OnMouseDown = MyImageMouseDown;
    img->OnMouseMove = MyImageMouseMove;
    img->OnMouseUp   = MyImageMouseUp;

    img->Left=0;
    img->Top= 0;
    img->Width=100;
    img->Height=100;
    img->Canvas->Brush->Color=clRed;
    img->Canvas->Rectangle(Rect(0,0,100,100));

    //----------------------------------------
    TMyImage  *img2 = new TMyImage(this,this,Rect( 150,0,250,100),clBlue);

    img2->OnMouseDown = MyImageMouseDown;
    img2->OnMouseMove = MyImageMouseMove;
    img2->OnMouseUp   = MyImageMouseUp;

}
//---------------------------------------------------------------------------

//--------------TMyImage에서 Mouse  이벤트 처리부분   --------------------------

void __fastcall TForm1::MyImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TMyImage *img=(TMyImage *)Sender;
    ShowMessage(img->sDesc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyImageMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
//    ShowMessage("M");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyImageMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    //ShowMessage("MouseUp");
}
//---------------------------------------------------------------------------

  

이미지 님이 쓰신 글 :
: TImage를 상속 받은 클래스를 만든 뒤에 그 안에서 비트맵 이미지를 불러왔습니다. 다음 처럼요..
:
: class Test(T어쩌구 저쩌구) : TImage(저쩌구)
: {
:     ..
:     bmp = (비트맵 이미지 부르는 메서드);
:     TImage* img = new TImage(this);
:     img->Parent = 폼;
:     img->(비트맵 뿌리는 메서드);
: }
:
: 이렇게 해서 일단은 이미지가 떳는데요... 문제는 이렇게 해놓으니까 img에
: 걸어둔 이벤트(OnMouseDown 등)이 안되는 겁니다.
:
: 바탕이 되는 Test이미지가 유리 처럼 이미지 위에 얹혀가지고 선택이 안되는데요..
: 어떻게 하면 저 안에서 불러온 이미지들이 전 처럼 이벤트 처리가 될까요?
:
: 그리고 img->Parent를 폼에 물리긴 했는데, Test이미지에 물리고 싶습니다.
: img이미지가 Test 이미지를 경계로 그 안에서만 둥둥 떠다닐 수 있도록요...
:
: 힌트라도 주시면 감사하겠습니다. 그럼...

+ -

관련 글 리스트
49324 TImage 질문 이미지 1031 2007/05/22
49326     Re:TImage 질문 장성호 1179 2007/05/22
49547         Re:Re:TImage 질문 이미지 863 2007/06/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.