C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[546] 패널 캔버스에 그림을 그리자.
김태선 [jsdkts] 9699 읽음    2005-12-19 11:25
TPanel 은 Canvas 가 없는 컴포넌트입니다.
가끔 패널에 그림을 그려야 할 경우 조금 난감합니다.
결국 이미지 컴포넌트를 위에 올리는 방법을  쓰는 경우가 대부분 일 것입니다.
하지만 원래 캔버스가 없던 것은 아니었습니다.

TPanel 컴포는 TCustomPanel 을 상속 받았는데 TCustomPanel 도 캔버스가 없습니다.
하지만 TCustomPanel 이 TWinControl을 상속 받았는데 여기에는 Canvas 가 있습니다.
그래서 그것을 사용할 수 있도록 하려면 TPanel을 상속받아 클래스를 하나 만들면서
Canvas 프로퍼티를 활성화 시켜주면 됩니다.

아래에 TCanvasPanel 이 그것입니다.
이것을 컴포넌트로  등록시켜 놓고 사용해도 되고..
아래처럼 그냥 패널 클래스로 캐스팅해서 사용해도 됩니다.
그것 각자 알아서 하시기를..

이 팁은 TWinControl 후손 중에서 캔버스가 없는 컴포에 캔버스를 갖게 하는 방법이기도 합니다.
//---------------------------------------------------------------------------
// 캔버스를 가진 패널 클래스.

class TCanvasPanel : public TPanel
{
public:
    __property Canvas;
};
//---------------------------------------------------------------------------
// 일반 Panel1 에 사각형을 그리는 예제.

void __fastcall TForm1::Button4Click(TObject *Sender)
{
    TCanvasPanel *pCanvasPanel = (TCanvasPanel *)Panel1;
    pCanvasPanel->Canvas->Rectangle(1,1,101,101);
}
//---------------------------------------------------------------------------
김태선 [jsdkts]   2005-12-21 17:43 X
TCanvasPanel *pCanvasPanel = static_cast<TCanvasPanel *>(Panel1);
이렇게 하는게 정석이지만 에러의 가능성이 없고 관계가 명확할 때는
간편한 캐스팅을 하는 관계로.. ㅡ..ㅡ;
이정구 [appleii]   2007-04-30 17:21 X
Canvas property 가 있는 것은 TCustomControl 의 후손이 아닌가요? 똑같은 TWinControl 후손이지만 TButtonControl 에는 Canvas property 가 없습니다.
김태선 [cppbuilder]   2007-05-01 15:05 X
예. 그런거 같군요. 당시에 확인을 정확하게 못한거 같습니다.

+ -

관련 글 리스트
546 패널 캔버스에 그림을 그리자. 김태선 9699 2005/12/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.