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
[2721] Re:사용자 정의 컴포넌트에서의 오류 메시지.
박지훈.임프 [cbuilder] 3777 읽음    2000-01-14 00:00
임문환 님이 쓰신 글 :
: 안녕하세요?
:
: 사용자 정의 윈도우 컴포넌트에서의 오류 메시지에 관한 질문입니다.
: 아래의 컴포넌트를 등록하면 오류 없이 등록이 됩니다.
: 하지만 컴포넌트 팔레트에서 폼으로 찍어다 놓는 순간  "Invalid Image size"라는
: 오류메시지가 발생하고 폼에 놓여지지 않습니다.
: 오류는 이 글의 가장 아래 줄에 있는  FImageList->AddMasked(mBitmap,clBlue);
: 에서 발생하는 것으로 밝혀졌지만 왜 그런지는 도무지 알 수가 없군요.
:
: 이 마지막 줄은 디렉터리 목록에서 사용할 폴더의 비트맵을 이미지 목록에
: 등록하는 것이며, 오류가 발생하자 비트맵을 포기하고 컴포넌트를 다시
: 등록해보았더니 비트맵은 나타나지 않지만 다른 모든 것은 문제가 없습니다.
: 또한 이 컴포넌트를 그져 클래스로 만들지 않고 응용 프로그램의 폼에서 메서드로 사용하여 보았는데
: 비트맵 아이콘도 제대로 출력되고 아무런 문제 없이 돌아갑니다.
: 참고로 말씀드리면 비트맵의 크기는 16X16입니다.
:
: 컴포넌트 클래스:
: class TCustomDirectoryListBox: public TCustomListView
: {
:  TImageList *FImageList;
:  .
:  .
:  .
: }
:
:
: CPP 파일에서
: #pragma resource "DirListBox.res"
:
: TCustomDirectoryListBox::TCustomDirectoryListBox(TObject *Owner) : TCustomListBox(Owner)
: {
:
: }
:
: void __fastcall TCustomDirectoryListBox::CreateWnd()
: {
:  Graphics::TBitmap *mBitmap;
:
:  TCustomTreeView::CreateWnd();
:
:  Font->Size=10;
:  mBitmap->LoadFromResourceName((int)HInstance,"ClosedFolder");
:  FImageList = new TImageList(Application);
:  FImageList->DrawingStyle=dsTransparent;
:  Images=FImageList;
: //여기에서 오류("Invalid Image size")가 발생함.
:  FImageList->AddMasked(mBitmap,clBlue);
:  .
:  .
:  .
: }
:
: 감사합니다.



임펠리테리입니다.

단순한 코딩실수같군요. Graphics::TBitmap *mBitmap;라고 해서 포인터 선언은 했는데 정작
비트맵 객체를 생성하지 않았네요. 그리고는 리소스에서 읽어들이는 함수를 실행했는데, 왜
여기서 익셉션이 발생하지 않았는지 좀 이상하군요.

그리고.. 아래의 질문에서도 언급한 거지만, 동적으로 컴퍼넌트를 생성할 때 Owner를 어떤 것을
넘겨줄 것인가에 대해 잘 생각해보셔야 합니다. 보여주신 것처럼 이미지리스트를 생성할 때
어플리케이션 객체를 오너로 넘겨주면, 어플리케이션이 종료할 때까지 그 컴퍼넌트는 파괴되지
않습니다. 리소스의 낭비죠.

일반적으로는, this를 넘겨주는 것이 가장 안전합니다. 생성하고 있는 메소드가 파괴될 때 함께
파괴시키는 거죠. 만약 this외에 다른 값을 넘겨주어야 하는 경우라면 조금 주의하는 것이
좋습니다.

그럼 참고하시길...

+ -

관련 글 리스트
2718 [질문]사용자 정의 컴포넌트에서의 오류 메시지. 임문환 3699 2000/01/14
2721     Re:사용자 정의 컴포넌트에서의 오류 메시지. 박지훈.임프 3777 2000/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.