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
[60219] Re:Re:Re:Re:이미지 동적생성시 보이질 않습니다.
장성호 [nasilso] 1161 읽음    2010-02-10 16:07
동적 생성한 Control 또는 Component 라 하더라도
생성할때 Owner만 제대로 정해주면 굳이 명시적으로 free해주지 않아도 됩니다.
왜냐하면 Owner컴포넌트가 free될때 자식들을 알아서 free해주니까요

더구나
Control인경우 생성자에 Owner를 NULL로 주었다 하더라도
Control의 Parent만 설정되어있으면 명시적으로 free해주지 않아도 되구요
Owner가 없다고 하더라도 Parent가 있으면 Parnet가 free될때 자신위에 올려진 control들을 모두 free해주거든요

메인폼이면 FormClose가 폼의 free로 이어지지만
메인폼이 아닌경우 FormClose가 반드시 폼이 free되지는 않죠

그래서 FormClose때 동적으로 생성한 Control을 free하는것이 문제가 발생할수도 있습니다.

걍  제 생각에는
   동적으로 생성한 컴포넌트, 컨트롤이라도 생성자에 Owner를  제대로 주고,
   명시적으로 free하지 않는것이 바람직 하지 않나 하는것이 제 생각입니다.

그럼..



제리압빠. 님이 쓰신 글 :
: 아..제가 코드를 잘 못 봤군요. TImage11을 list에 넣는 걸로 착각을 했었습니다..
:
: 자... TImage11은 전역 변수 이겠군요.( 지역이면 동적 할당 한거 날려 버리면 없어 져 버리겠지요... )
:
: 헤더에 TImage * img; 이라고 public 에 선언이 됐다고 가정하겠습니다.
: 초기화를 위해서 폼 생성자에
: __fastcall TForm1::TForm1(TComponent* Owner)
:     : TForm(Owner)
: {
:     img = NULL;
: }
: 이렇게 세트 하였습니다.( 동적 할당 받았으면 더이상 할당 안하도록 하기 위해서 )
: 버튼이 클릭되면 이미지 리스트에서 2번째 항목을 읽어 오는 루틴을 처리 했습니다.
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:     if( img == NULL )  // img 가 초기 상태인 경우만 할당 합니다.
:     {
:         img = new TImage(this);
:         ShowMessage( "생성됨");
:         img->Left   = 0;
:         img->Top    = 0;
:         img->Width  = 100;
:         img->Height = 100;
:         img->Parent  = Form1;
:     }
:
:     imgList1->GetBitmap( 1 , img->Picture->Bitmap );
:   
:     //--------- TImageList의 Width = 100 , Height = 100 이라고 가정 하고 아래 주석을 풀면
:     // 검정 사각형이 보이면 TImage는 생성 된겁니다.
:    /*
:     img->Picture->Bitmap->Canvas->Brush->Color = clBlack;
:     img->Picture->Bitmap->Canvas->FillRect( Rect( 0 , 0 , img->Width, img->Height ) );         
:    */
:
: }
: // 폼이 종료 될때 동적 할당 된 정보 삭제 합니다.
: void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
: {
:    delete img; // 혹은 if( img ) delete img;
: }
:
: ImageList를 사용할 경우 ImageList 자체에 Width 와 Height 가 있습니다. 이부분 설정 해보시구요.
: 이미지가 찌부러 들지요... 사이즈가 작으면.
: 그리고 이미지를list에 로드 할때 보면 Trasparent Color라는 콤보박스가 활성화 되면 투명색 처리된 부분은
: clWhite가 투명색이면 clWhite는 TImage에 찍히지 않습니다.
:
: 종합해보면. 이미지가 찍히긴 찍혔는데 그 값이 투명색 때문에 보이지 않은 듯 합니다.
:
: 아울러 동적할당 하는 경우 동적할당 할 넘을 전체 어플리케이션에서 핸들링 할수 있도록 위에
: 전역의 TImage *img ; 처럼 선언 후 사용하시는 걸 추천 합니다.
: 프로그램이 종료 될때 꼭 img를 날려줘야 하기 때문에 그렇습니다.
:
: 참고로 실제로 돌려보았습니당.~~~!
:
: 수고하세염
:
: 동적생성 님이 쓰신 글 :
: : 우선 답변 감사합니다~(__
: : ImageList1->GetBitmap(b,Image11->Picture->Bitmap);
: : 위에소스와 같이 이미지 리스트에 bmp이미지들을 넣어서 그 이미지를 동적생성한 Image11에 넣고싶은데요
: : 저렇게 하면 안되는 건가요??
: :
: :
: :
: :
: :
: : kamizen 님이 쓰신 글 :
: : : 아래 코드에서 Image11에 이미지를 로드하는 루틴이 모이지 않습니다만...ㅡ.ㅡ;
: : : Image11->Picture->LoadFromFile 이게 삽입 되어야 될거 같습니다...( 혹은 타 리소스에서 Picture 정보에 다른 값을 복사해주시던가. )
: : : 동적 생성인 관계로..Image11의 포인터가 지역 변수라면 ImageList1에 GetBitmap 하신담에  비트맵 확보해주시고...
: : : 꼭 delete Image11; 해주셔야 할 겁니다.
: : :
: : :
: : : 동적생성 님이 쓰신 글 :
: : : : TImage *Image11;
: : : :
: : : :    Image11 = new TImage(this);
: : : :    Image11->Parent = Form1;
: : : :    Image11->Width = 70;
: : : :    Image11->Height = 50;
: : : :    Image11->Left = 100;
: : : :    Image11->Top = 100;
: : : :    ImageList1->GetBitmap(b,Image11->Picture->Bitmap);
: : : :
: : : : 이렇게 동적으로 생성한후에 이미지 리스트에 있는 이미지로 출력하려고 하는데요.
: : : : 보이질 않습니다.
: : : :
: : : : 버튼을 동적생성하여 보면 분명히 잘 나오는데 이미지만 안나오네요. 도와주세요

+ -

관련 글 리스트
60204 이미지 동적생성시 보이질 않습니다. 동적생성 1186 2010/02/10
60206     Re:이미지 동적생성시 보이질 않습니다. kamizen 1151 2010/02/10
60207         Re:Re:이미지 동적생성시 보이질 않습니다. 동적생성 1210 2010/02/10
60218             Re:Re:Re:이미지 동적생성시 보이질 않습니다. 제리압빠. 1233 2010/02/10
60219                 Re:Re:Re:Re:이미지 동적생성시 보이질 않습니다. 장성호 1161 2010/02/10
60220                     Re:Re:Re:Re:Re:이미지 동적생성시 보이질 않습니다. 제리압빠. 1361 2010/02/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.