|
[문제점]
님의 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 이미지를 경계로 그 안에서만 둥둥 떠다닐 수 있도록요...
:
: 힌트라도 주시면 감사하겠습니다. 그럼...
|