제가 현재 하고있는작업은 어떠한 통신작업중 그를 중단하기 위한 중단폼을 띄운 상태에서 작업하다가 중단 버튼이 클릭되면 이의 실행을 중지하는 작업을 하고있습니다.
물론 중단 폼이 뜰때, 전역변수를 셋팅하고 중단버튼 클릭시 그 변수의 값을 변경함으로써 이를 해결할 수도 있으나 제가 하고픈 방법은 다음과 같습니다.
// Comm <- 공통모듈
EStopComm = class(exeception);
// Form1 <- 통신 작업을 하는 폼
try
ShowStopMessage; // 중단 폼 보여줌
try
// 통신하면서 데이터를 요청하고, 내려받은 데이터를 처리하는 루틴.
TcpOpen; // 통신 시작
...
...
except
on E : ETcpError do ShowMessage(E.Message); // 통신 오류시 메시지 출력
on E : EStopComm do ; // 중단버튼 클릭시 무시하고 빠져나감.
end;
finally
TcpClose; // 통신 끝
HideStopMessage; // 중단 폼 감춤
end;
// Form2 <- 중단 폼
On Stop Button Click Event;
procedure TStopForm.StopBtnClick(Sender: TObject);
begin
raise EStopComm.Create('통신을 종료하고있습니다.');
end;
위와같이 어떠한 통신작업중 중단버튼이 눌릴경우 중단폼이 exception을 발생시키고,
이 exception을 중단폼을 호출한 프로시져에서 받아서 그를 조용히 무시하고
루틴을 종료한다는 것이지요.
여기서의 문제는 exception 의 결과가 그를 "호출한" 쪽으로 되돌려 진다는 것인데,
여기서는 TStopForm이라는 객체에서 발생했으므로, 그 객체에게 exception이 돌려지고
그에 대한 핸들러가 존재하지않으므로 이것이 자연히 delphi에게로 넘어가서
messagebox에 에러메시지가 뜬다는 것입니다.
그러나 이 중단폼은 여러개의 폼에서 공유해야하므로, 반드시 그것을 처음 호츨한 프로그램에게 되돌려져야 합니다.
많은 고수님들의 조언을 부탁드립니다.
제가 너무 길게 썼나요? 제가 처한 상황을 자세히 알려드려야 할 것 같아서
긴 글이지만 올립니다. 그럼 KDDG의 무궁한 발전을 기원하며 20000....