C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[168] Splash 윈도우 만들기
박지훈.임프 [cbuilder] 10027 읽음    2001-08-04 12:38
이 팁은 오효섭님(천리안 XGEN)님이 1999년 11월 17일에 천리안 프로그래머포럼에 올리신 것입니다.
수정없이 배포는 가능하다는 말씀에 따라 전제하여 올립니다.
───────────────────────────────────────

고려대학교 전자공학과 영상통신 연구실
오효섭(fred@dali.korea.ac.kr), http://dali.korea.ac.kr/~fred
1999.11.17

주의1: 제 홈에 오시면 그림과 함께 보실 수 있어요
주의2: 수정없이 배포하는 건 자유입니다.

1. Splash 윈도우의 필요성
Splash 윈도우는 프로그램이 실행되기 전에 화면에 나타나서 간단한 그림을 보여주고
살아지는 윈도우를 가리킨다. Splash
윈도우는 세 가지 목적에서 사용된다. 가장 중요한 목적은 프로그램이 로딩되는 시간을
벌어준다. 리소스를 할당하고 실행하
도록 코드를 읽어 들이는 시간을 벌어주는 것이다. 두 번째 이유는 사용자에게
실행되는 사이에 무료함을 덜어주면서 자기 제
품을 광고할 수 있다. 세 번째 이유는 가장 쉽게 자기 프로그램을 예쁘게 만들어
준다. C++ Builder를 시작할 때, Builder3에서
는 건물 짓는 모양이 나오고 Builder4에서도 마찬가지지만 C라는 글자가 예쁘게
등장한다.

2. Splash 만들기
너무 빨리 시작하는 것 같지만(1시간도 안돼서 끝나면 안되는데...) 다른 일 할게
없으니까 시작하자. ^.^
new Form을 만든다. 이름을 SplashUnit이라고 하자. Splash 윈도우에는 타이틀 바와
다른 아이콘이 등장하서는 안되니까 다
음과 같이 Form속성을 맞쳐준다. BorderStyle = bsDialog BorderIcons = []
(아무것도 선택하지 않는다) FormStyle =
fsStayOnTop(항상 다른 Form보다 위에), Position = poScreenCenter (중앙에
나타나도록) 한다. 그 다음 보여줄 그림이 있어
야 할테니.. 간단하게 TImage를 하나 올려둔다. 이름은 Image1으로 그냥 하자.
(귀찮다) 꽉 차서 그려지면 좋을 테니, Image1
의 Align = alClient로 조정한다. 예쁜 그림을 골라서 Image1에 Load시켜둔다.
아참, 일정 시간후에 폼을 죽여야 할테니, TTimer를 가져다 두고 이름은 그냥
Timer1으로 하자. Form이 생성되자 마자 Timer
가 돌아가야 할테니, Timer1의 Enabled = ture로 하고 Interval = 2000 으로 해서
2초후에 자동적으로 죽이자. Timer가 완료됐을
경우의 함수에 Close()만 넣어주면 되겠죠!

//---------------------------------------------------------------------------
void __fastcall TSplashForm::Timer1Timer(TObject *Sender)
{
    Close();    
}
//--------------------------------------------------------------------------- 

이렇게 하면 다끝난 것이다. 10분도 안지났다. 흑흑흑.. 어떻게 1시간을 채운담?
으흠.. Project->Option을 열어 SplashUnit을
available form으로 바꿔준다. 동적으로 생성하고 죽일 목적이기 때문이다. 그 다음
Splash 윈도우를 불려줄 부분을 WinMain
안에 넣어주자. 실행과 동시에 실행되어야 하니까. 아래에 예를 소개한다. auto-
Create Form으로 해도 문제는 없지만 Splash
윈도우의 특성으로 볼 때 처음 밖에 쓸모가 없을 것이니까 메모리를 잡아먹지 않도록
배려해야죠..

//---------------------------------------------------------------------------
#include 
#pragma hdrstop
#include "Splash.h" // 꼭 include해준다. 
USERES("ips.res");
USEFORM("MControl.cpp", ControlCenter);
USEFORM("progress.cpp", ProcessProgress);
USEFORM("SeqView.cpp", SeqViewer);
USEUNIT("sequenceFile.cpp");
USEUNIT("ImageBuffer.cpp");
USEUNIT("choisUtil.cpp");
USEUNIT("imageDisplay.cpp");
USEUNIT("choisAlgo.cpp");
USEFORM("Splash.cpp", SplashForm);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
     try
     {
         Application->Initialize();
         SplashForm = new TSplashForm( Application ); // 요 아래 세줄이 Splash 윈도우 생성시키는 부분
         SplashForm->Show();
         SplashForm->Update();
         Application->CreateForm(__classid(TControlCenter), &ControlCenter);
         Application->CreateForm(__classid(TProcessProgress), &ProcessProgress);
         Application->CreateForm(__classid(TSeqViewer), &SeqViewer);
         Application->Run();
     }
     catch (Exception &exception)
     {
         Application->ShowException(&exception);
     }
     return 0;
}
//---------------------------------------------------------------------------

이 정도면 다 끝난 듯 보인다. 하지만 약간 장난을 더 쳐보자.. splash 윈도우가
Close될 때 메모리를 확실하게 free해야겠다.
FormClose() 이벤트에서 다음과 같이 해주면 Form pointer를 완벽하게 Release
시켜줄 수 있다.

//---------------------------------------------------------------------------
void __fastcall TSplashForm::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    Action = caFree; // to free Form pointer    
}

그 다음 Splash 윈도우 Form Property에서 설정했지만 Param 을 이용하면 이렇게 할
수 있다.

//---------------------------------------------------------------------------
void __fastcall TSplashForm::CreateParams( TCreateParams &Params )
{
    TForm::CreateParams( Params ); // to call basic class
    Params.Style &= ~WS_CAPTION; // remove Caption
}
//---------------------------------------------------------------------------


흑 벌써 끝났네. 에구.. 오늘은 20분 강좌에서 맞쳐야 할듯..
다음에는 더욱 재미있는 강좌를 준비해야겠네요.

+ -

관련 글 리스트
168 Splash 윈도우 만들기 박지훈.임프 10027 2001/08/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.