|
안녕하세요. heredity입니다.
1번 답변은 요청하신 형태로 사용할 경우 사용하기가 조금 번거롭게 느껴져서
2번 답변에 대해서만 설명하겠습니다.
unit3(이름은 아무 이름이나....)에 송호준 님이 만드신 MyClass(TMyClass로 사용함)을 만들고
Main Form에서 TMyClass의 Object를 아래와 같이 생성합니다.
pDraw = new TDraw(); // 생성 했으면 당근 해제하는 부분도 필요하겠죠!!!
// 알맞는 곳에 해제 처리부를 작성하세요.
각 Form에서 unit3.h를 include합니다.
각 Form에서 그리기 버튼(예: Button1)을 누루면
pDraw->Draw( Canvas );
를 넣어 줍니다.
인수로 넣어주는 Canvas는 각 Form상의 Canvas가 되므로 Form1->Canvas, Form2->Canvas와
같이 Form명을 넣지 않아도 됩니다.
아래는 TMyDrass Class의 한 예입니다.
행복하세요.
*** unit3.h ***
//---------------------------------------------------------------------------
#ifndef Unit3H
#define Unit3H
//---------------------------------------------------------------------------
class TMyDraw : TObject
{
public:
__fastcall TMyDraw( void ) {};
void __fastcall Draw( TCanvas *pCanvas ); // 2번의 키 포인트 입니다. 간단하죠!!! ^^;
};
extern TMyDraw *pDraw;
#endif
*** unit3.cpp ****
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TMyDraw *pDraw;
//---------------------------------------------------------------------------
void __fastcall TMyDraw::Draw( TCanvas *pCanvas )
{
if( pCanvas != NULL ) { // pCanvas는 각 Form의 Canvas가 될 것입니다.
// 그리기 처리부. 공통 Module이건 개별 Module이건 적당히 풀그래밍하세요.
// 일반적으로 각 Form에 공통적으로 그릴 일이 없을 듯 합니다만 질문하신 내용이기에
// 유사하게 작성해 봤습니다.
pCanvas->Ellipse( 100, 100, 200, 200 );
pCanvas->Rectangle( 400, 400, 500, 600 );
}
}
송호준 님이 쓰신 글 :
: 먼저 답변에 감사를 드립니다.
: 한참을 고민하면서 읽었는데 제가 아직 초보인 관계로
: 이해를 못하였습니다. 그래서 제가 질문하고 싶은 바를
: 다시 한번 명확하게 말씀드리겠습니다.
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: MyDraw();
: }
:
: void MyDraw()
: {
: Form1->Canvas->Ellipse(100,100,200,200);
: }
:
: 와 같이 코딩을 하면 MyDraw를 부르면 Form1에 항상 그려집니다.
: 그런데 저는 MyDraw를 Form1에만 국한하지 않고
: MyDraw를 부를때 Form2, Form3,...로 미리 지정하여
: 원하는 Form에 그림을 그리고 싶거든요. 제가 선택하고 싶은
: Form을 어떻게 MyDraw에 넘겨 주어야 하나요.
:
: 읽어주셔서 감사합니다.
:
:
: evergreen 님이 쓰신 글 :
: : 안녕하세요. heredity입니다.
: :
: : TForm엔 TCanvas란 Property가 있습니다. 아래와 같은 방법으로 이를 활용해 보세요.
: : 1. MyDraw Class에 Canvas란 Property를 두어 사용전에 해당 Form의 Canvas를 대입하도록 한 후 사용하거나
: : 2. Method의 Parameter로 사용될 Form의 Canvas를 넘겨 사용
: : 하시면 됩니다. 즉 MyDraw Class에서 자신이 알고 있는 Canvas에 그림을 그리면 되겠죠!
: : 단점은 Form의 Canvas는 무효화 영역을 사용자가 다시 그려줘야 한다는 겁니다.
: : 이것이 싫다면 TImage의 Canvas에 그려주세요.
: :
: : 행복하세요.
: :
: :
: : 송호준 님이 쓰신 글 :
: : : 짧은 지식으로 C++빌더를 사용하다보니 어려움이 많네요.
: : :
: : : 반복적인 그래픽 작업이 있어서
: : : MyDraw라는 클래스를 하나 만들었는데요
: : : 여기서 Canvas를 쓰거든요.
: : : 그런데 Form1, Form2,...등을 이 클래스로 넘겨서
: : : 지정된 Form에서 이 클래스가 동작하도록 하고 싶은데
: : : 어떻게 해야하나요. (용어들이 맞나 모르겠네요???)
: : :
: : : 부탁드립니다.
: : :
: : : 감사합니다.
|