|
정말 감사합니다!!!
Show()로 하니깐 정상작동이 되네요!!
김시환 님이 쓰신 글 :
: 첫번째 방법 : 메인폼에서 서브폼을 열때 ShowModal() 로하지 말로 Show() 로 하면 됩니다.
: 두번째 방법 : 굳이 ShowModal() 을 써야 한다면 폼의 X 로하지 말고 별도의 버튼을 만들어서 Close() 함수를 통해
: 폼을 닫으세요..
:
: void __fastcall TForm2::Button2Click(TObject *Sender)
: {
: flag_form_close = 1 ;
: Close() ;
: }
:
:
:
:
:
:
: 임용태 님이 쓰신 글 :
: : 제가 설명이 많이 부족했네요.
: :
: : (1) 아래 코드가 메인폼에 있고 서브폼 닫을 때 아래 코드를 빠져 나오고 싶은 것인지?
: :
: : -> X
: :
: : (2) 아래 코드가 서브폼에 있고, 서브폼 닫을 때 아래 코드에서 빠져 나오고 싶은 것인지?
: :
: : -> 네. 이 부분입니다. 서브폼을 닫으려고 할 때 아래 코드에서 빠져 나오지 않습니다 ㅠ
: :
: : (3) 닫기 버튼이라는 것이 별도의 버튼인지 아니면 폼의 X 표시 닫기를 말하는 것인지?
: :
: : -> 폼의 X표시 닫기입니다.
: :
: : 폼의 X표시를 눌러서 서브폼만 끄고 싶은데 For문과 While문을 빠져나오지 않습니다 ㅠ
: : 명령어 exit(0)을 쓰면 폼이 닫히기는 하나 메인폼까지 전부 닫히기 때문에 문제해결이 안됩니다 ㅠ
: :
: :
: :
: : 김시환 님이 쓰신 글 :
: : : 그런데 MainForm이 아닌 다른 추가적으로 생성한 Form에서는 폼의 닫기 버튼을 눌렀을 경우 For문과 While문 안에서 빠져나오지 못하고 FormClose이벤트 안으로 들어오지 못했습니다. ( For문과 While문의 루프가 끝난 후 FormClose이벤트로 들어옴)
: : :
: : : 위의 내용의 의미를 잘 모르겠습니다.
: : :
: : : (1) 아래 코드가 메인폼에 있고 서브폼 닫을 때 아래 코드를 빠져 나오고 싶은 것인지?
: : : (2) 아래 코드가 서브폼에 있고, 서브폼 닫을 때 아래 코드에서 빠져 나오고 싶은 것인지?
: : : (3) 닫기 버튼이라는 것이 별도의 버튼인지 아니면 폼의 X 표시 닫기를 말하는 것인지?
: : :
: : : 뭐 이런 내용이 명확해야 방법을 알려 드릴 수 있겠네요..
: : :
: : :
: : :
: : : 임용태 님이 쓰신 글 :
: : : : 정말 감사합니다!
: : : :
: : : : 혹시 버튼이 아닌 폼 닫기 버튼을 눌렀을 경우에는 어떻게 하는지 궁금합니다!
: : : :
: : : : 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);
: : : : : : }
: : : : : : }
|