|
장성호 님이 쓰신 글 :
: 이유는 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;
: : }
|