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
[45847] 아~~~그렇군요...너무 감사합니다.....
보라색파리 [zeuskdw] 751 읽음    2006-07-26 13:20
장성호 님이 쓰신 글 :
: 이유는 TimerTimer함수가 끝날때까지 Window가  RePaint되지 않았기 때문입니다.
:
:  void __fastcall TForm1::Timer1Timer(TObject *Sender)
:  {
:
:     Panel1->Caption = ++i;

:     Sleep(1000);
:
:     Button1->Caption = ++a;
:  }
:
: Panel1의 Caption을 수정하고
: Sleep(1000)으로 1초있다가 Button1->Caption을 수정하지만
: 그후에야 Panel1가 Button1의 Paint가 일어나거든요
: 화면에는 동시에 바뀔수 밖에 없습니다.
:
: 만약 그렇게 하고자 한다면
: [방법1]
:
: 그냥 로직으로
: Timer를 1초 걸어놓고 한번은 Panel을 ++하고 한번은 Button1을 ++하는방법이 있구요
:
: [방법2]
:
: Panel1->Caption을 ++한뒤에 강제로 Repaint해주는 방법이 있습니다.
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
:
:     Panel1->Caption = ++i;
:     Panel1->Repaint();
:     Sleep(1000);
:     Button1->Caption = ++a;
: }
: //---------------------------------------------------------------------------
: 그러나 만약 timer를 1초로 해둑고 위와같이 코딩하면
: 또 동시에 바뀌는것럼 보입니다.
: 단 이때는 숫자가 다르게 나타나죠
: 왜냐하면 타이머가 1초 걸려있는데 Sleep(1000)에서 1초 쉬었기 때문에
: Button1->Caption이 바뀐뒤바로  그다음 Timer이벤트가 일어나서 Panel1->Caption이 바뀌죠
:
: 타이머를 2초로 해두고 위와같이 코딩하면 차례차례 1씩 증가되는것을 볼수 있습니다.
:
: 만약 타이머를 1초로 두고 그렇게 하고싶다면
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
:
:     Panel1->Caption = ++i;
:     Panel1->Repaint();
:     Sleep(500);
:     Button1->Caption = ++a;
:     Button1->Repaint();
:     Sleep(500);
: }
: //---------------------------------------------------------------------------
: 위와 같이 하시면 됩니다.
:
: 또한
: Repaint()함수 대신에
: Application->ProcessMessages(); 를 이용할수도 있습니다.
: 이경우 프로그램의 Window에서 일어나는 모든 메세지를 처리해주기 때문에
: TimerTimer 함수가 끝나기 전에 또 이벤트가 발생할수 있습니다.
: 충분히 Timer의 시간이 길면 괜찮지만요....
:
:
: 그럼
:
:
:
:
: 보라색파리 님이 쓰신 글 :
: : 간단하게 타이머 하나만 사용해서 테스트를 해봤는데요.. 아래와 같이 i, a 각각 0으로 시작해서 i가 바뀌고 나서
: :
: : 1초후에 a가 바뀌게 했는데..디버깅 할때는 예상대로 들어가는데...실행모드로 들어가면 패널과 버튼 캡션이
: :
: : 동시에 똑같이 증가되서 나오거든요...왜그럴까여..? 참고로 타이머 인터벌은 1로 하였습니다...
: :
: : 간단하니 님들도 테스트점 해봐주세요....
: :
: :
: :
: : __fastcall TForm1::TForm1(TComponent* Owner)
: :    : TForm(Owner)
: : {
: :
: :    i = 0;
: :    a = 0;
: :
: :    Panel1->Caption = i;
: :
: :    Button1->Caption = a;
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::Timer1Timer(TObject *Sender)
: : {
: :
: :    Panel1->Caption = ++i;
: :
: :    Sleep(1000);
: :
: :    Button1->Caption = ++a;
: : }

+ -

관련 글 리스트
45845 타이머 관련해서 질문드립니다..... 보라색파리 797 2006/07/26
45846     Re:타이머 관련해서 질문드립니다..... 장성호 886 2006/07/26
45847         아~~~그렇군요...너무 감사합니다..... 보라색파리 751 2006/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.