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
[4289] Re:Re:Re:Re:Re:불러올 이미지의 정보를 아는 방법좀 알려주세요
박지훈.임프 [cbuilder] 3551 읽음    2000-10-19 00:00
꼼지락 님이 쓰신 글 :
: 감샤드립니다~ ^^ 헤헤 ^^
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "ChildWin.h"
: #include "Main.h"
: #include "NIG.h"
: //---------------------------------------------------------------------
: #pragma resource "*.dfm"
: //---------------------------------------------------------------------
: __fastcall TMDIChild::TMDIChild(TComponent *Owner)
:     : TForm(Owner)
: {
:   if(MainForm->NorO == 'N')
:   {
:   ClientWidth = StrToInt(NIGW->ComboBox5->Text);
:   ClientHeight = StrToInt(NIGW->ComboBox6->Text);
:   MainForm->ToolButton4->Enabled = true;
:   MainForm->ToolButton5->Enabled = true;
:   }
:   else if(MainForm->NorO == 'O')
:   {
: //  ClientHeight = Image1->Height;
: //  ClientWidth = Image1->Width;
:   }
: }
: //---------------------------------------------------------------------
: void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
: {
:     Action = caFree;
:   MainForm->MENUCOU--;
:   MainForm->ToolButton4->Enabled = false;
:   MainForm->ToolButton5->Enabled = false;
:   }
: //---------------------------------------------------------------------
: void __fastcall TMDIChild::FormDestroy(TObject *Sender)
: {
:   if(MainForm->MENUCOU == 0)
:   {
:     MainForm->Menu = MainForm->MainMenu1;
:   }
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TMDIChild::FormCreate(TObject *Sender)
: {
:   MainForm->Edit2->Text = IntToStr(Image1->Picture->Width);
:   MainForm->Edit3->Text = IntToStr(Image1->Picture->Height);
: }
:
: 위에 머가 잘못됐죠?
: 메인폼에 크기를 찍어 봤는데 0 0 찍히더군여..
:
: 알려주신데로 (TJPEGImage*)Image1->Picture->Graphic->Width)를 써봤는데..
:
: 바루 뻑납니다. 멀 잘못한건지 알수 없는 꼼지락이었습니다.
:
: jpeg.hpp 는 Main.h에 포함시켜놨구.. 여기에두 포함시켜봤는데 영향없는거 같던데여
:


임펠리테리입니다.

Form의 OnCreate 핸들러에 들어오는 시기에는 아직 이미지를 불러오기 전입니다. jpg를 포함한 폼이 뜰 때 보면 폼이 나타나고 jpg 파일을 불러오는 시간이 약간 걸리지요? 그러니 당연히 0이 나올 수밖에 없죠.

일반적으로 폼이 초기화될 때 실행되어야 할 작업들중 몇가지는 폼의 OnCreate 이벤트를 이용하면 안됩니다. 이 이벤트는 폼이 생성된 직후에 발생하므로 다른 컴퍼넌트들이 아직 초기화가 되지 않았을 수도 있습니다. 바로 이 경우처럼요.

만약 이미지가 로드된 직후에 나오게 하고 싶으시다면 폼의 OnCreate 이벤트가 아니라 TImage의 OnProgress 이벤트의 핸들러를 이용해야 합니다. 다음과 같이 해보세요.
void __fastcall TForm1::Image1Progress(TObject *Sender, TProgressStage Stage,
    BYTE PercentDone, bool RedrawNow, const TRect &R, const AnsiString Msg)
{
    if(Stage == psEnding)
        ShowMessage(Image1->Picture->Width);
}

그리고 두번째, TJPEGImage로 캐스팅하는 부분. 제가 알려드린대로 하지 않으셨군요. 저는 다음과 같이 캐스팅하라고 했습니다.
((TJPEGImage *)Image1->Picture->Graphic)->Width
그런데 꼼지락님이 작성하신 코드에는 엉뚱하게도,
(TJPEGImage*)Image1->Picture->Graphic->Width
이렇게 하셨다구요.. 잘못하셨죠? ^^

그럼 참고하시길...

+ -

관련 글 리스트
29745                 Re:Re:Re:Re:불러올 이미지의 정보를 아는 방법좀 알려주세요 황태우 3432 2002/08/02
4282                 Re:Re:Re:Re:불러올 이미지의 정보를 아는 방법좀 알려주세요 꼼지락 3175 2000/10/18
4289                     Re:Re:Re:Re:Re:불러올 이미지의 정보를 아는 방법좀 알려주세요 박지훈.임프 3551 2000/10/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.