RE:如何正确编写 Try..Finally..Except 语句?
我仍然对OP的原始问题感到困惑。具体来说,读取“Screen.Cursor:=crDefault”的过程的最后一行(try..finally..end 之外)。
我的理解是,在 try..except|finally..end 块中引发的任何异常都将在“try”的“end”之后执行代码。
procedure TForm1.Button1Click(Sender: TObject);
var
Obj: TSomeObject;
begin
Screen.Cursor := crHourGlass;
Obj := TSomeObject.Create;
try
// do something
finally
Obj.Free;
end;
Screen.Cursor := crDefault;
end;
在上面的例子中,我看不出“Screen.Cursor:=crDefault”不会被执行的任何原因。如果我错了,请纠正我。
作为另一个示例,我编译了这段代码来帮助说明。运行代码时,将显示三 (3) 个 ShowMessage() 对话框。第一个“异常引发”,第二个“最终”和第三个“结束”。
procedure TForm1.Button1Click(Sender: TObject);
begin
try
try
showMessage(format('%s', [12]));
except
showMessage('Exception raised');
end;
finally
showMessage('finally');
end;
showMessage('at end');
end;
所以,我很困惑为什么他的“Screen.Cursor:=crDefault”没有以原始形式和代码运行。有人可以详细说明吗?