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
[71311] [질문] 화면의 Repaint 한 번에 하기...
땅주인 [heaven2] 3202 읽음    2014-05-14 18:35
Tool : C++ Builder XE5

화면에 Bitmap 이미지 몇 장을 번갈아 가면서 보여주면서 간단한 애니메이션을 구현했는데요..
애니메이션으로 보여주어야 할 이미지가 전부 4개라 4개의 이미지를 애니메이션으로 표시하면서
돌리니, 저사양 PC에서는 버벅 거리다가 프로그램이 Hangup되어 버리네요.
(4개의 이미지를 애니메이션으로 보여주어야 할 상황)

애니메이션용 스레드를 정지시키고 돌리면 죽지않고 쭉 가는 것으로 보아서는 그런 것 같습니다.

알기로는 화면의 Repaint를 잠시 멈춰두고 이미지 작업을 하고 이미지 작업이 다 끝나면
한 번에 화면을 Repaint하는 것이 있는 것으로 알고 있는데 어떻게 하는 지 ...??

가령 아래와 같은 형태의 코드

// 화면 Repaint 잠금
RepaintStop();

// 이미지 작업..
// 이미지 작업..
...
..
// 화면 Repaint
Repaint();

이식의 구성을 ..

재가 사용중인 코드는 아래와 같습니다.

void __fastcall TAniThread::Execute()
{
	TWaitResult Result;
	while ( FormMain->m_bAniThread ) {
		Result = GAniEvent->WaitFor(500);	// Wait 0.5 second
		if ( bIconFirst ) {	// First Icon
			TBitmap *pBitmap = new TBitmap();
			FormMain->ImageList->GetBitmap(m_iIndex,pBitmap);
			FormMain->Image->Picture->Bitmap = pBitmap;
			delete pBitmap;
			m_iIndex++;
			if ( m_iIndex > 8 ) m_iIndex = 0;
		}
		if ( bIconSecond )  {	// Second Icon
			TBitmap *pBitmap = new TBitmap();
			FormMain->ImageListCM->GetBitmap(m_iIndex2,pBitmap);
			FormMain->ImageHydro1->Picture->Bitmap = pBitmap;
			delete pBitmap;
			m_iIndex2++;
			if ( m_iIndex2 > 10 ) m_iIndex2 = 0;
		}
		if ( bIconThird ) {	// Third Icon
			// ...	
		}
		if ( bIconForth ) {	// Forth Icon 
			// ...
		}
		//Sleep(500);	// Sleep을 써보기도 했는데 마찬가지
	}
}



+ -

관련 글 리스트
71311 [질문] 화면의 Repaint 한 번에 하기... 땅주인 3202 2014/05/14
71313     Re:[질문] 화면의 Repaint 한 번에 하기... kylix 3292 2014/05/14
71318         Re:Re:[질문] 화면의 Repaint 한 번에 하기... 땅주인 3331 2014/05/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.