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
[1292] [답변] 청키/ panel에 그림을 그리려면/프포
박지훈.임프 [cbuilder] 3762 읽음    1999-04-29 05:39
안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.

TPanel 컨트롤에서 캔바스를 액세스할 방법은 없습니다. Canvas 프로퍼티는

TPanel이 상속받는 클래스들 중 TCustomControl 클래스에서 선언되어 있지만,

protected로 되어있어 상속받는 단계 중에서 public으로 재정의하지 않는 한은

당근 컴파일 에러가 납니다. 정상적으로 해결하는 방법은 두말할 필요도 없이

패널을 상속받는 새로운 컴퍼넌트를 만들고, Canvas를 public으로 재정의하는

것입니다.

한가지 편법이 있는데, 그리 권장하고 싶은 방법은 아닙니다만.. 꽤 오래전에

제가 빌더라운지에서 소개했던 트릭입니다. c++ 컴파일러에서 클래스의 액세스

지시자는 오직 헤더파일에서만 유효하므로, 오브젝트 파일이나 패키지 파일은

그대로 두더라도, 헤더파일에서만 해당 액세스 권한을 수정해주면 그대로 먹힌다는

것입니다. 간단히, TCustomControl의 선언이 있는 controls.hpp에서 클래스들 중

TCustomControl을 찾아서, 캔바스의 선언 앞에 public: 만 추가해주면 됩니다.

public:    // 추가할 라인.
    __property Graphics::TCanvas* Canvas = {read=FCanvas};

이 트릭이, 다른 특별한 문제는 없습니다. 컴파일시에도 아무런 에러도 생기지

않으며, 전체 프로그램의 흐름에도 영향을 미치지 않습니다만, 당연히

TCustomControl로부터 상속을 받는 모든 컨트롤은 Canvas가 액세스 가능하게

되어버리죠. 이런 웃기는 트릭은, 너무 남용하면 c++의 데이터 캡슐레이션이라는

개념을 통째로 무시하는 게 되어버리므로 주의해서 사용하는 것이 좋습니다.

꼭 필요할 때만 사용하는.. 최후의 트릭이라고 할 수 있죠.

참, OnPaint 이벤트도 같은 방법을 사용하면 액세스할 수 있습니다.

그럼 참고하시길...




임펠리테리 박지훈이었습니다.

(cbuilder, cbuilder@thrunet.com)



+ -

관련 글 리스트
1291 [질문] panel에 그림을 그리려면/프포 청키 3520 1999/04/28
1292     [답변] 청키/ panel에 그림을 그리려면/프포 박지훈.임프 3762 1999/04/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.