|
빠른답변 감사합니다.
그러니까 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 검색해봤는데 대부분 그걸 쓰더군요.
|