Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование блока обработки исключений 
V
    Опции темы
Aleks26
  Дата 9.11.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Код

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 выполнялись сразу?  smile 
PM MAIL   Вверх
bems
Дата 9.11.2012, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



они выполняются сразу, с точки зрения программы.
а перехват исключений отладчиком можно отключить в самой среде


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Aleks26
Дата 9.11.2012, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 12.3.2010

Репутация: нет
Всего: нет



Цитата(bems @  9.11.2012,  15:00 Найти цитируемый пост)
они выполняются сразу, с точки зрения программы.
а перехват исключений отладчиком можно отключить в самой среде

Большое спасибо.  smile 
PM MAIL   Вверх
superVad
Дата 9.11.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Цитата(Aleks26 @  9.11.2012,  13:30 Найти цитируемый пост)
Но, если я оставляю пустым поле Edit1, то почему сразу не выполняется блок except: сначала идет стандартное сообщение Delphi об ошибке и только потом, после обращения к FormDblClick?

Если запускать программу не через Делфи - то все будет норм.

Цитата(bems @  9.11.2012,  14:00 Найти цитируемый пост)
а перехват исключений отладчиком можно отключить в самой среде

Наверное, все таки - не надо этого делать.
PM MAIL   Вверх
bems
Дата 9.11.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(superVad @  9.11.2012,  20:08 Найти цитируемый пост)
Наверное, все таки - не надо этого делать. 

делается отдельно для разных классов, так что вполне можно себе позволить


--------------------
Обижено школьников: 8
PM MAIL   Вверх
northener
Дата 9.11.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(superVad @  9.11.2012,  20:08 Найти цитируемый пост)
Наверное, все таки - не надо этого делать. 

В целом не надо, но иногда очень нужно при отладке. Например если нормально обработанное исключение может возникать многократно при отладке данного фрагмента программы. 


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
bems
Дата 10.11.2012, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



вообще, если в программе нигде нет мест, где глушатся все исключения подряд, то можно делать и наоборот - выключить перехват дебагером, и включать только если где-то возникает непредусмотренное исключение


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.