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
[20688] Re:Re:[질문]또 질문을 하게 되네요.. (__)
이용주 [oyongjoo] 751 읽음    2002-08-08 10:13
김백일 님이 쓰신 글 :
: 이용주 님이 쓰신 글 :
: : canvas를 이용해서 그림을 그리는 작업을 하고 있습니다.
: : 실시간으로요~~
: : 쓰레드가 돌고 있는 상태에서는 별 무리없이 그림이 다시 뿌려지는데요..
: : 쓰레드가 돌지 않는 상태에서 다른 창이 위에 올라와 있으면 밑의 그림이 사라지네요..
: : 꽁수로 버튼을 하나 만들어서 다시 뿌려주게 하고 있는데염..
: : 현재 활성화된 창이 다른 창의 뒤에 있거든 최소화 되었을때 그것을 알수 있는 값이 있나요??
: : 그것을 알면 그걸 이용해서 다시 뿌려주면 될것 같은데.. 고수님들의 답변 부탁드립니다.
: : 어디를 어떻게 찾아야 할지 막연하네요 ㅠㅠ
: : 그럼 이만..
:
: 스레드에서 TForm::Canvas 에 직접 그려주면 안됩니다!
:
: TForm::Canvas는 폼이 OnPaint 이벤트를 받을 때마다 새로 그려줘야 합니다.
:
: TBitmap 객체를 동적 생성한 후,
:
: TBitmap *bmp = new TBitmap;

: 스레드에서는 이 bmp->Canvas에다 그려 넣으세요.
:
: 폼의 OnPaint 이벤트 핸들러에서
:
: Canvas->Draw(0, 0, bmp);
:
: 등으로 그려주시면 됩니다.

이론 이름이 깨져서 나오는군요 ㅠㅠ
저도 직접 적으로 그려주는건 아니구요..
메인 폼에 함수를 만들어서 그안에서 그려주고 쓰레드에서 계속 호출해주는 방식으로 하고 있습니다.
쓰레드 내에서 몇가지가 같이 돌아가기 때문에 쓰레드가 돌아가는데에는 별 문제가 없더군요..
님의 말씀대로 OnPaint 이벤트를 이용해서 시도를 했는데요. Refresh를 어디다가 넣어야지 폼이 최소화 되거나 비활성화 되었다가 다시 활성화 되면 이 순간에만 refresh를 호출해서 다시 그려주게 해야할지 모르겠군요.. (__)
이런식으로 한번해보았습니다.
void __fastcall TEtcTestForm::FormPaint(TObject *Sender)
{
   EtcTestForm->Refresh();

   gRePaint_flag = true;
   //DrawRect();
}
//---------------------------------------------------------------------------

void __fastcall TEtcTestForm::FormResize(TObject *Sender)
{
   EtcTestForm->Refresh();
   TRect Rect(26,5,640, 184);
   int pre_rxcolcounter = 25, pre_rxrowcounter = 175;
   int pre_adjrowcounter = 128, pre_txrowcounter = 99;

   /* 바탕화면을 그려주는 부분 */
   dgPowerResult->Canvas->Pen->Color = clBlack;    //바탕 라인색지정.
   dgPowerResult->Canvas->Rectangle(25,5,639, 185);
   dgPowerResult->Canvas->Brush->Color = clCream;  //바탕색 지정.
   dgPowerResult->Canvas->FillRect(Rect);
   //ADJust 값의 범위 지정..
   dgPowerResult->Canvas->Font->Color = clGreen;
   dgPowerResult->Canvas->TextOut(11,0,"64");
   dgPowerResult->Canvas->TextOut(8,128,"-64");
   dgPowerResult->Canvas->Pen->Color = clGreen;  //펜의 색 지정.
   dgPowerResult->Canvas->MoveTo(25,133);        //범위 기준선.
   dgPowerResult->Canvas->LineTo(29,133);
}
이렇게 하니까 refresh에 의해서 끊임없이 폼이 열려있는 상태에서 그려주더군요.. 일단 resize는 되는걸 확인했습니다. 비활성 되었다가 다시 활성화 될 경우에는 어떻게 해야할지..
저도 열심히 후벼파는 중인데 혹시 아시는분 있으면 답변 부탁드릴께요
시간이 좀 촉박해서 이렇게 부탁드립니다.
그럼 수고하십시요..

+ -

관련 글 리스트
20677 [질문]또 질문을 하게 되네요.. (__) 이용주 739 2002/08/07
30330     Re:[질문]또 질문을 하게 되네요.. (__) 이용주 726 2002/08/07
30329     Re:[질문]또 질문을 하게 되네요.. (__) 류현 810 2002/08/07
20690     Re:[질문]또 질문을 하게 되네요.. (__) 이용주 657 2002/08/08
20678     Re:[질문]또 질문을 하게 되네요.. (__) 김백일 657 2002/08/07
20688         Re:Re:[질문]또 질문을 하게 되네요.. (__) 이용주 751 2002/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.