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
[41071] Re:Re:Re:[질문]Form을 작성된 클래스로 전달하려면
evergreen [heredity] 784 읽음    2005-07-15 19:20
안녕하세요. 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에서 이 클래스가 동작하도록 하고 싶은데
: : : 어떻게 해야하나요. (용어들이 맞나 모르겠네요???)
: : :
: : : 부탁드립니다.
: : :
: : : 감사합니다.

+ -

관련 글 리스트
41060 [질문]Form을 작성된 클래스로 전달하려면 송호준 764 2005/07/15
41061     Re:[질문]Form을 작성된 클래스로 전달하려면 evergreen 762 2005/07/15
41069         Re:Re:[질문]Form을 작성된 클래스로 전달하려면 송호준 726 2005/07/15
41071             Re:Re:Re:[질문]Form을 작성된 클래스로 전달하려면 evergreen 784 2005/07/15
41171                 [냉무]감사합니다. 잘해결되었습니다. 송호준 671 2005/07/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.