Q&A

  • Form2 가 종료될때마다 저장할껀지 물어보는 방법..
안녕하세요^^
저기 제가 지금 만드는 메모장에서요 쪽지 폼이 Form2를 여러개 띄워놓은후에 MainForm 을 강제로 종료를 해버리면 강제로 종료가 될때
Form2 에 쪽지가 바뀐내용이 있으면 저장을 할수 있게 할려고 제가

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Form2.HandleAllocated then
     begin
       Form2.CheckFileSave;
     end;
end;

이런식으로 소스를 만들었는대요..한가지에 문제가 있어서 이렇게
질문을 드립니다.다름이 아니고 저런식으로 하니까 여러쪽지중에 하나만
저장할껀지 물어보고 나머지들은 바뀐내용이 있어도 저장을 할껀지
물어보지를 않아서 질문을 드립니다..
저기 Form2 가 여러개 있더라도 계속 확인하는 방법좀 갈켜주시면
감사드리겠습니다.^^
4  COMMENTS
  • Profile
    김경록 2002.03.18 10:18
    결론만 말씀드리께여..

    메인폼의 Close이벤트 말구여...
    CloseQuery이벤트인가?
    음.. 인스펙트상으로 Close이벤트 바로 밑에 있는 이벤트..
    저녁이라.. 갑자기 이벤트 이름이 생각이 가물하네여..  ^^;
    하여간.. 메인 폼의 이벤트 중에 CloseQuery 이벤트에
    해당 코드를 적어 주시면 되구여..
    For I := 0 To MDIChildCount-1 Do
    Begin
        //=======<<  이런식으로 코딩하시면 될것 같군여  >>========//
        자식폼(MDIChildren[I])의 변경된 내용이 저장되었는가?
             No이면, 저장하는 루틴

        해당 자식폼 Close
    End;

    그리구, CloseQuery의 이벤트에는
    매개변수 CanClose라는 변수가 있는데,
    CanClose에 True를 대입하면, 폼이 종료되며, False를 대입하면,
    해당 폼이 종료되지 않습니다..
    원하시는 답이었는지 모르겠네여..

                  최강의 프로그래머를 위하여~~~








  • Profile
    델.초 2002.03.18 14:26
    안녕하세요^^
    제가 님이 갈켜주신 소스를 참고해서 제 나름대로 수정을 해보았는대요..
    전혀 저장할껀지 물어보지도 않고 그냥 닫히거든요 ㅠ ㅠ
    흠.이 소스를 보시고 뭐가 잘못됬는지 지적좀 해주시면 감사드리겠습니다^^

    procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    var
    I : Integer;
    msg : String;
    SaveAnswer : Integer;
    begin
      msg := '파일에 내용이 변경되었습니다.'+#13+#13+'저장하시겠습니까?';
      For I := 0 To MDIChildCount -1 do
          begin
            if not TForm2(MDIChildren[I]).RichEdit1.Modified then
               Exit;
             SaveAnswer := MessageDlg(msg,mtConFirmation,mbYesNoCancel,0);
             case SaveAnswer of
                  idYes : Form2.HSaveClick(Self);
                  idCancel : Abort;
             end;
          end;
    end;

    저기 그리고 왜이렇게 해야돼는지좀 갈켜주세요..
    제가 정말 언어는 이 델파이가 처음이라서 뭐랄까..명령어 쪽을 거의
    잘 몰라요 ㅠ ㅠ 그래서 많이 보면서 이거는 이거다 하나하나 배우고
    있는 입장이거든요 ^^;; 꼭좀 부탁드리겠습니다^^


  • Profile
    김경록 2002.03.18 23:08
    결론적으로는 For문에서 Exit를 해 놓으면 어떻해여~~~
    Continue를 써 보세여..
    그럼.. 꾸냥.. FormCloseQuery를 나가버리잖아여..
    For문에서 For문을 계속 돌릴려면, Continue, For문 종료 Break 입니다..
    실제상으로 변경되지 않았으면, For문을 계속돌아야 하는거 아닌가여?
    개념상으로라도 말입니다.. 당근히, 다른 폼도 체크해야하니까..
    답이 되셨길..


                 최강의 프로그래머를 위하여~~~








  • Profile
    악마[영인] 2002.03.18 23:03
    프로그램이 종료될때

    마지막으로 이벤트를 타는곳이 CloseQurey 입니다.

    거기에서 CanClose 의 Boolean값을 가지고..

    Close를 마지막으로 체크합니다.

    내부적인..Close의 순서이지욤