口令检查是用户在PassWord中输入口令并按下回车键后开始的实现代码在PassWord的OnKeyPress事件处理过程中
procedure TFormPassWordKeyPress(Sender: TObject; var Key: Char)
const
CurrentPassWord = Delphi;
begin
if Key = # then
begin
try
if PassWordtext <> CurrentPassWord then
raise EInvalidPassWordCreate;
LabelVisible := True;
InputEditVisible := True;
InputEditSetFocus;
PassWordVisible := False;
LabelVisible := False;
except
on EInvalidPassWord do
begin
PassWordtext := ;
raise;
end;
end;
Key:=#;
end;
end;
同样在InputEdit的OnKryPress事件处理过程中实现了输入数字的合法性检查
procedure TFormInputEditKeyPress(Sender: TObject; var Key: Char)
var
Res: Real;
Code: Integer;
begin
if Key = # then
begin
try
val(InputEdittextResCode)
if Code <> then
raise EInValidInputcreate()
if (Res > ) or (Res < ) then
raise EInValidInputcreate()
MessageDlg(Correct Input mtInformation[mbOk] )
Key := #;
except
on E:EInValidInput do
begin
InputEdittext := ;
MessageDlg(EMessage mtWarning[mbOk] )
end;
end;
end;
end;
由于异常响应后即被清除所以要显示异常信息需要另外的手段在以上两段程序中我们采用了两种不同的方法在口令合法性检查中利用异常重引发由系统进行缺省响应在输入数字合法性检查中通过异常实例来获取异常信息并由自己来显示它
以上所举的是一个非常简单的例子但从中已可以发现使用自定义异常编程为程序设计带来了很大的灵活性
利用异常响应编程
利用异常处理机制不仅能使程序更加健壮而且也提供了一种使程序更加简捷明了的途径事实上使用自定义异常类就是一种利用异常响应编程的方式这里我们再讨论几个利用标准异常类编程的例子
比如为了防止零作除数可以在进行除法运算前使用if…then…else语句但如果有一系列这样的语句则繁琐程度是令人难以忍受的这时候我们可能倾向于使用EDivByZero异常例如如下一段程序就远比用if…then…else实现简捷明了
function Calcu(xyzabc:Integer)Real;
begin
try
Result := x/a+y/b+z/c ;
except
on EDivByZero do
Result := ;
end;
end;
在()记录文件的打开与创建中就是利用异常响应来实现文件的打开或创建
procedure TRecFileFormOpenButtonClick(Sender: TObject)
begin
if OpenDialogExecute then
FileName := OpenDialogFileName
else
exit;
AssignFile(MethodFileFilename)
try
Reset(MethodFile)
FileOpened := True;
except
on EInOutError do
begin
try
if FileExists(FileName) = False then
begin
ReWrite(MethodFile)
FileOpened := True;
end
else
begin
FileOpened := False;
MessageDlg(文件不能打开mtWarning[mbOK])
end;
except
on EInOutError do
begin
FileOpened := False;
MessageDlg(文件不能创建mtWarning[mbOK])
end;
end;
end;
end;
if FileOpened = False then exit;
Count := FileSize(MethodFile)
if Count > then
ChangeGrid;
RecFileFormCaption := FormCaption+ +FileName;
NewButtonEnabled := False;
OpenButtonEnabled := False;
CloseButtonEnabled := True;
end;
总之利用异常响应编程的中心思想是虽然存在预防异常发生的确定方法但却对异常的产生并不进行事前预防而是进行事后处理并以此来简化程序的逻辑结构
[] [] [] []