예외란 프로그램 자체의 문제나 프로그램 실행 중 사용자의 부적절한 조작으로 인해 발생하는 일시적인 오류를 말합니다.
프로그램 실행을 중지하고 잘못된 결과를 생성합니다. Delphi로 프로그램을 작성해 본 사람이라면 누구나 예외에 대해 확실히 잘 알고 있을 것입니다. 예외의 원인
널 포인터에 대한 참조, 범위를 벗어난 할당, 0으로 나누기 등으로 인해 예외가 발생할 수 있습니다. 비정상적인 상황에 대해 적절한 조치가 취해지지 않는 경우,
잘못 처리하면 전체 프로그램이 중단될 수 있습니다. 다행스럽게도 Delphi는 발생할 수 있는 거의 모든 예외를 자동으로 처리할 수 있습니다.
다루다.
1. 델파이가 자동으로 예외를 처리하는 간단한 예
1. Delphi(3.0) 통합 환경에서 Tools | Environment Options 메뉴를 선택하고 나타나는 Environment에서
옵션 창(왼쪽 아래)의 기본 설정 페이지에 예외 시 중단 옵션이 있습니다. 이 옵션은 기본적으로
델파이 통합 환경에서 프로그램 실행 시 예외가 발생하면 프로그램이 자동으로 중단되고 복귀하도록 상태가 선택되어 있습니다.
델파이 디버깅 상태에서는 프로그래머가 수정할 수 있도록 예외가 발생한 코드 위에 커서가 유지됩니다. 이제 이 옵션을 클릭하면 사용할 수 없게 됩니다.
확인하고 확인하세요.
2. 새 프로젝트를 생성하고 Excep.dpr로 저장하고(나중에 유용함) 해당 유닛을 Form1에 Excpunit.pas로 저장합니다.
그 안에 TmaskEdit 구성 요소를 넣고 EditMask 속성을 Date로 설정한 다음 Tbutton 구성 요소를 넣고 두 번 클릭합니다.
OnClick 이벤트를 다음과 같이 작성합니다.
절차 TForm1.BitBtn1Click(Sender: TObject);
var k:정수;
시작하다
k:=0;
k:=9 div k;{여기서 0으로 나누기 예외가 생성됩니다}
끝;
3. 프로그램을 저장하고 실행하십시오. MaskEdit1에 하나 또는 두 개의 숫자를 입력하고 Enter를 누르십시오. 그러면 깨어납니다.
예외가 발생하면 다음 창이 나타납니다.
이는 MaskEdit 상자에 입력된 불완전한 데이터로 인한 예외입니다.
"OK" 후에 프로그램은 계속 실행됩니다. Button1을 클릭하면 또 다른 유사한 창이 나타납니다.
0 예외로 나누기.
2. 비정상적인 상황에 대한 델파이의 프롬프트는 중국인이 사용하지 않는 영어로 되어 있으므로 이러한 예외를 차단하고 다음을 사용하여 구현할 수 있습니다.
중국어 팁. 구체적인 단계는 다음과 같습니다:
1. Button1의 OnClick 이벤트를 다음과 같이 수정합니다.
절차 TForm1.BitBtn1Click(Sender: TObject);
var k:정수;
시작하다
k:=0;
노력하다
k:=9div k;
제외하고
showmessage('제수는 0이 될 수 없습니다.');
끝;
끝;
2. 프로그램을 저장하고 실행하세요. Button1을 클릭하면 나타나는 프롬프트 상자가 "제수는 0이 될 수 없습니다."라는 중국어 메시지로 대체됩니다. 사용
try...out...end 문은 예외를 처리하는 일반적인 방법입니다. 예약어 try 다음의 문이 실행되는 경우입니다.
예외가 발생하면 예약어 Except와 end 사이의 명령문이 실행되고, 그렇지 않으면 end 뒤의 명령문이 실행되어 Delphi의 명령문을 대체합니다.
예외의 기본 처리. 또 다른 유사한 명령문은 try...finally...end입니다. 이는 try...out..과 동일합니다.
....end와의 차이점은 try 뒤의 문이 예외를 생성하는지 여부에 관계없이 finally 뒤의 문이 확실히 실행된다는 것입니다.
그러나 TmaskEdit 상자에서 생성된 것과 같은 예외의 경우 try 문을 사용하는 것은 무력합니다.
try 문을 작성하는 곳입니다. 다른 방법으로만 해결할 수 있습니다.
3. Delphi의 모든 프로젝트에는 보이지 않는 개체인 Tapplication 개체가 있습니다. 우리는 할 수 있다
OnException 이벤트를 수정하면 특별한 예외를 제어할 수 있습니다.
1. Form1 클래스에 MyException 프로세스를 선언합니다. 이 프로세스는 Tapplication의 OnException 이벤트와 관련됩니다.
동일한 매개변수:
공공의
{공개 선언}
프로시저 MyException(Sender:TObject;E:Exception);
2. 프로세스 코드를 작성합니다.
절차 TForm1.MyException(Sender:TObject;E:Exception);
시작하다
E가 EDBEditError이면 showmessage('입력이 규칙을 준수하지 않습니다')
또 다른
Application.ShowException(E); {기본 예외 처리 호출}
끝;
3. Form1의 OnCreate 이벤트에서 Tapplication의 OnException 이벤트에 값을 할당합니다.
절차 TForm1.FormCreate(Sender: TObject);
시작하다
Application.OnException :=MyException;
끝;
4. 프로그램을 저장하고 실행한 후 MaskEdit 상자에 하나 또는 두 개의 숫자를 입력하고 Enter를 누르면 중국어 프롬프트 상자가 나타납니다.
원래 영어 프롬프트 상자를 교체하십시오.
4. 여기에서 우리는 모든 사람들이 세 가지 사항에 주의를 기울일 것을 상기시키고 싶습니다:
1.Delphi는 모든 예외를 하나의 클래스, 즉 예외 클래스(Exception)로 요약합니다.
특별한 경우, c:program 파일 또는landDelphi 3source tlsys 디렉토리의 sysutils.pas
Exception 클래스에 대한 정의가 있습니다.
2. Tapplication 개체는 프로그램에서 발생한 처리되지 않은 오류를 처리하기 위해 HandleException 프로세스를 제공합니다.
예외 이벤트, Tapplication의 OnException 이벤트에 값을 할당하면 HandleException이 새 이벤트를 호출합니다.
기본 오류 메시지 표시를 교체하는 절차입니다. 우리는 Han을 달성하기 위해 자체 프로세스에 따라 표시되는 콘텐츠를 자유롭게 배열합니다.
변신 효과.
3. IF 판단문을 사용하여 지정된 예외를 얻습니다. 간단한 방법을 사용하여 지정된 예외의 이름을 얻을 수 있습니다.
기사 시작 부분의 예로 돌아가서 여기서는 예외 시 중단 옵션을 선택하고 프로그램을 다시 실행한 후 다음을 입력합니다.
잘못된 숫자로 인해 MaskEdit1이 예외를 생성하고 다음 창이 나타납니다.
창의 두 번째 행에 있는 EDBEditError는 예외의 이름입니다. 이 기사의 프로그램에 있는 코드는 다음과 같습니다.
E가 EDBEditError이면 showmessage('입력이 요구 사항을 충족하지 않습니다')
이 이름을 바탕으로 작성되었습니다. 예외의 정확한 이름을 모를 때 정보를 얻을 수 있는 곳입니다. 이것을 사용하여
Delphi의 기본 예외 처리를 대체했기 때문에 예외 이벤트를 처리할 때 주의하십시오.
이로 인해 시스템이 충돌할 수 있습니다.
위 프로그램은 Windows 95 Delphi 3.0에서 성공적으로 실행됩니다.