|
꼼지락 님이 쓰신 글 :
: 감샤드립니다~ ^^ 헤헤 ^^
:
: #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
이렇게 하셨다구요.. 잘못하셨죠? ^^
그럼 참고하시길...
|