Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2011, 17:42   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Ошибка обработки исключений try...except

procedure TForm1.FormCreate(Sender: TObject);
var
a,b,c,d: string;
rbb: integer;
begin
try
dir := GetCurrentDir;
fn:= 'C:\CNC SS v4.02\Config\Auto';
AssignFile(f,fn);
Reset(f);
readln(f,a);
Form1.ComboBox1.Text:= a;
readln(f,b);
Form1.ComboBox2.Text:= b;
readln(f,c);
Form1.ComboBox3.Text:= c;
readln(f,d);
Form1.ComboBox4.Text:= d;
closefile(f);
SelLang;
Form1.Timer1.Enabled:= True;
except
On EFilerError do
begin
rbb:=MessageDlg('Ошибка установки.Переустановите приложение заново.', mtError, [mbOk], 0) ;
exit;
end;
end;
end;

Не понимаю, что не так? Программа при создании формы должна открывать файл, если он не обнаружен то вывести сообщение и не запускаться. А она все равно запускается и вылетает ошибка Нет доступа к файлу и виснет потом.

Файл на месте всегда, это для исключения, если его не будет
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 18:37   #2
A-IX-2
Форумчанин
 
Аватар для A-IX-2
 
Регистрация: 08.10.2010
Сообщений: 101
По умолчанию

Даже если с exe`шника запустить?
"Думаешь, будет трудно? Конечно, будет! Но, только закаляя дух, людьми становятся люди!"
A-IX-2 вне форума Ответить с цитированием
Старый 02.06.2011, 18:40   #3
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от A-IX-2 Посмотреть сообщение
Даже если с exe`шника запустить?
Для проверки я и запускаю с ехе-шника, предварительно специально убрав этот файл. Компилирую когда файл на месте. Мне и нужно с ехе-шника.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 19:12   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скажите а зачем вы специализируете обработчик исключения?
да и знаете ли зачем служит тип EFilerError?
Цитата:
On EFilerError do
уберите, вам тут не нужна специализация.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.06.2011, 19:17   #5
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
скажите а зачем вы специализируете обработчик исключения?
да и знаете ли зачем служит тип EFilerError?

уберите, вам тут не нужна специализация.
убрал, не помогает, она все равно начинает загружаться и искать файл. потом ошибка Что файл не найден и висит все
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 20:09   #6
)Игнат(
Форумчанин
 
Регистрация: 06.01.2008
Сообщений: 180
По умолчанию

Уважаемый, оператором Exit; вы вышли из процедуры/функции.
Вам же нужно что-то вроде Halt;
)Игнат( вне форума Ответить с цитированием
Старый 02.06.2011, 20:44   #7
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от )Игнат( Посмотреть сообщение
Уважаемый, оператором Exit; вы вышли из процедуры/функции.
Вам же нужно что-то вроде Halt;
мне нужно завершить процедуру Form1.Create и завершить приложение не запуская дальше
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 02.06.2011, 20:58   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
мне нужно завершить процедуру Form1.Create и завершить приложение не запуская дальше
Exit это завершить ТОЛЬКО процедуру. приложение оставить работать.
Halt это завершить приложение. Если завершаем приложение, то естественно будет завершена работа ВСЕХ процедур.
Application.terminate другой способ завершения приложения.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.06.2011, 22:01   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Надо быстрее код дать, пока "специалисты" не насоветовали:

Код:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  protected
    function HandleCreateException: Boolean; override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  raise Exception.Create('Going down!');
end;

function TForm1.HandleCreateException: Boolean;
begin
  Result := False;
end;
Если хочется показывать сообщение "красивше", чем сама Delphi, то:

Project/View Source:
Код:
program Project1;

uses
  Windows,
  SysUtils,
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  try
    Application.Initialize;
    Application.MainFormOnTaskbar := True; // <- только для новых Delphi
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  except
    on E: Exception do
      Application.MessageBox(PChar(E.Message), PChar(String(E.ClassName)), MB_ICONSTOP or MB_OK);
  end;
end.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 02.06.2011, 22:03   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от )Игнат( Посмотреть сообщение
Уважаемый, оператором Exit; вы вышли из процедуры/функции.
Вам же нужно что-то вроде Halt;
Он не вышел. В его коде Exit не выполняется.

Цитата:
Сообщение от evg_m Посмотреть сообщение
Exit это завершить ТОЛЬКО процедуру. приложение оставить работать.
Halt это завершить приложение. Если завершаем приложение, то естественно будет завершена работа ВСЕХ процедур.
Application.terminate другой способ завершения приложения.
В его коде Exit не выполняется. Следовательно, его замена на Halt/Terminate ничего не даст.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
обработка исключений user666 Помощь студентам 36 27.08.2010 18:00
ошибка при закрытии формы после обработки в потоке furstenberg Общие вопросы Delphi 7 05.07.2010 12:19
Обработка исключений _-Re@l-_ Общие вопросы Delphi 3 17.06.2010 08:53
WebBrowser и ошибка 404, идея ее обработки celovec Работа с сетью в Delphi 3 22.02.2009 19:40