|
정말 감사합니다!
혹시 버튼이 아닌 폼 닫기 버튼을 눌렀을 경우에는 어떻게 하는지 궁금합니다!
MainForm에서는 김시환님께서 알려주신 방법으로 FormClose이벤트에 맴버변수를 1로 바꿔서 하는 방법을 사용하였는데 정상작동되는 것을 확인하였습니다.
그런데 MainForm이 아닌 다른 추가적으로 생성한 Form에서는 폼의 닫기 버튼을 눌렀을 경우 For문과 While문 안에서 빠져나오지 못하고 FormClose이벤트 안으로 들어오지 못했습니다. ( For문과 While문의 루프가 끝난 후 FormClose이벤트로 들어옴)
이 경우는 어떻게 해야되는지 알고싶습니다 ㅠㅠ
김시환 님이 쓰신 글 :
: 위에 분이 쓰레드를 쓰라고 하셨는데 뭐 가능은 하겠지만 이런 간단한 부분에 쓰레드 까지 사용한다는 것은 너무 코드 낭비처럼 보입니다. 또 이제 공부하는 분인데 쓰레드 구현도 쉽지 않을 것 같고요..
:
: 이런 경우 플래그를 사용하면 간단히 해결할 수 있습니다.
:
: 해당 폼 클래스에 private 멤버 변수로 flag 를 하나 선언해 주세요..
:
: int flag_form_close ; <-- 멤버 변수 선언 (폼 헤더파일 안에서 선언)
:
: void __fastcall TForm2:btn_close(TObject *Sender) <-- 폼을 닫기위한 버튼에대한 이벤트 함수
: {
: flag_form_close = 1 ;
: }
:
: void __fastcall TForm2::DelayTime(int nTime) //원하는 시간만큼 Delay를 주는 함수.
: {
: MSG message;
:
: clock_t clk = clock() + nTime;
: while(1) {
: Sleep(1);
: if(clock() > clk) break;
: if(flag_form_close == 1) break ;
: Application->ProcessMessages(); <-- 꼭 있어야 함..
: }
: }
:
: void __fastcall TForm2::btGoClick(TObject *Sender) // 버튼을 클릭하면 사각형을 순서대로 그리는 함수.
: {
: bGoStop = true;
: flag_form_close = 0 ;
:
: for (int i = 5; i < 35; i++) {
: Application->ProcessMessages(); // 다른 이벤트를 받아온다.
: Image1->Canvas->Rectangle(i,i,5*i,5*i);
: DelayTime(500);
:
: if( flag_form_close == 1) break ;
: }
: }
:
: 임용태 님이 쓰신 글 :
: : 빌더를 공부하는 초보입니다.
: :
: : For문과 While문을 처리하는 도중에 폼 닫기버튼을 누르면 닫히지 않습니다.
: :
: : 디버깅을 해본 결과 Main폼에서는 닫기 버튼을 누르면 FormClose()이벤트 안으로는 들어는 가는데 닫히지 않습니다.
: :
: : 그리고 Main폼이 아닌 다른 폼에서는 닫기 버튼을 눌러도 FormClose()이벤트 안으로 들어오지 않습니다. ㅠㅠ
: :
: : For문과 While문이 끝난 후에 프로그램이 종료됩니다 ㅠㅠ
: :
: : 어떻게 해야하나요? ㅠㅠ
: :
: : void __fastcall TForm2::DelayTime(int nTime) //원하는 시간만큼 Delay를 주는 함수.
: : {
: : MSG message;
: :
: : clock_t clk = clock() + nTime;
: : while(1) {
: : Sleep(1);
: : if(clock() > clk)
: : break;
: : }
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm2::btGoClick(TObject *Sender) // 버튼을 클릭하면 사각형을 순서대로 그리는 함수.
: : {
: : bGoStop = true;
: : for (int i = 5; i < 35; i++) {
: : Application->ProcessMessages(); // 다른 이벤트를 받아온다.
: : Image1->Canvas->Rectangle(i,i,5*i,5*i);
: : DelayTime(500);
: : }
: : }
|