| Код | unit unSumTriNum1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label5: TLabel; procedure FormDblClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
TSumDvaNum = class public a, b: Integer; function GetResult : Integer; virtual; end;
TSumTriNum = class(TSumDvaNum) public c: Integer; function GetResult : Integer; override; end;
var Form1: TForm1;
implementation
{$R *.dfm}
Function TSumDvaNum.GetResult : Integer; begin {Blok obrabotki isklucheniy 1} try a:=StrToInt(Form1.Edit1.Text); except if messageDlg('Neverno zadan perviy parametr!', mtError, [mbOk],0) = mrOK then Form1.Edit1.SetFocus; end; b:=StrToInt(Form1.Edit2.Text); Result := a+b; end;
Function TSumTriNum.GetResult : Integer; begin {blok obrabotki isklucheniy 2} try a:=StrToInt(Form1.Edit1.Text); except if messageDlg('Neverno zadan perviy parametr!', mtError, [mbOk],0) = mrOK then Form1.Edit1.SetFocus; end; b:=StrToInt(Form1.Edit2.Text); c:=StrToInt(Form1.Edit3.Text); Result := a+b+c; end;
procedure TForm1.FormDblClick(Sender: TObject); var sumnum: TSumDvaNum; begin if Edit3.Text = '' then begin sumnum := TSumDvaNum.Create; Label5.Caption := IntToStr(sumnum.GetResult); sumnum.Free; end else begin sumnum := TSumTriNum.Create; Label5.Caption := IntToStr(sumnum.GetResult); sumnum.Free; end; end;
end.
|
Имею элементарную программу с двумя классами и переопределенными методами. Вроде бы проблем нет. Но, если я оставляю пустым поле Edit1, то почему сразу не выполняется блок except: сначала идет стандартное сообщение Delphi об ошибке и только потом, после обращения к FormDblClick? Подскажите, кто-нибудь, как организовать блок обработки исключений, чтобы эти действия, находящиеся в части except выполнялись сразу? |