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
[49960] Re:Re:Paint가 계속 호출됩니다.
android [android] 1608 읽음    2007-07-19 11:46
빠른답변 감사합니다.

그러니까 TImage에서도 Paint이벤트를 발생시키므로 FormPaint안에쓰면 결국 무한루프가 되겠군요.
특이하네요. 왜 이렇게 만들었는지?

말씀해주신 PaintBox가 PictureBox 맞는거같습니다. 일단 이걸 사용해야겠군요.

Lock문제는 역시 스레드를 사용하지않는다면 불필요한 부분이군요.


장성호 님이 쓰신 글 :
: VC의 PictureBox를 써보진 않았지만
:    VC의 PictureBox는 CBuilder에서는 System탭에 있는 PaintBox가 아닐까 싶은데요..
:
:
: 1. Paint 이벤트가 계속 발생는 문제..
:    TImage는 Handle이 없습니다. HDC도 없구요
:    결론적으로 Form의 DC에다가 draw하는겁니다.
:   
:    그래서 Image에서 Draw하면 그것을 화면에 반영하기 위해 WM_PAINT 이벤트가 발생합니다.
:
:    TImage는 Canvas에 Draw한것을 기억합니다.
:
:    그러므로 아무때나 한번만 draw해주면 됩니다.
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender) // TImage에는 한번만..
: {
:     Image1->Canvas->TextOut(20,20,"하하하");
:     Image1->Canvas->MoveTo(0,0);
:     Image1->Canvas->LineTo(100,100);
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormPaint(TObject *Sender)   // Form의 Canva에 그리는것은?
: {
:     Canvas->TextOut(20,20,"하하하");
:     Canvas->MoveTo(0,0);
:     Canvas->LineTo(100,100);
: }
: //---------------------------------------------------------------------------
:
:
:
: 2. Lock / UnLock 문제
:    
:     그냥은  안해도 됩니다.
:
:     쓰레드가 여럿 있을때 ,  여러 쓰레드에서 Canvas에 접근할때 사용합니다.
:
:      vcl 소스에...
:      Lock      ==>  EnterCriticalSection(FLock);
:      UnLock  ==>  LeaveCriticalSection(FLock);
:
:      Lock()함수에 커서 갇다 두고 F1  Help를 보세요 설명이 나옵니다.
:
:
: 그럼...
:
:
: android 님이 쓰신 글 :
: : 빌더를 처음 사용하는지라 툴도 익힐겸 간단히 테트리스를 짜보려고 합니다.
: : VC의 PictureBox에 해당하는것이 TImage인가요?
: :
: : void __fastcall Form1Paint(Tobject *Sender)
: : {
: :     static int i=0;
: :     TRACE("Test = %d", i++);
: :
: :     Image1->Canvas->Lock();
: :     Image1->Canvas->TextOut(20,20,"하하하");
: :     Image1->Canvas->MoveTo(0,0);
: :     Image1->Canvas->LineTo(100,100);
: :     Image1->Canvas->Unlock();
: : }
: :
: : 두가지 질문입니다.
: :
: : 1.
: : Paint는 화면이 가려진다거나 했을때 호출되는건데 위의 소스는 계속 호출됩니다.
: : 그래서 매우 깜빡깜빡거리고 있고 TRACE문도 쉴새없이 실행되고있죠.
: : 아무래도 TImage 때문인거같은데.. 어떻게 끄나요?
: :
: : 2.
: : 스레드를 실행하는것도 아니고 TImage위에 선과 글씨만 쓰는건데 Lock, Unlock이 왜 필요합니까?
: : Q&A 검색해봤는데 대부분 그걸 쓰더군요.

+ -

관련 글 리스트
49954 Paint가 계속 호출됩니다. android 1068 2007/07/19
49956     Re:Paint가 계속 호출됩니다. 장성호 1362 2007/07/19
49960         Re:Re:Paint가 계속 호출됩니다. android 1608 2007/07/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.