Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Корректное создание и вывод сообщений об исключительных ситуациях


Cosinus ©   (2004-08-17 11:32:00) 

Как правильно работать с исключениями? Точнее как правильно создавать и выводить сообщения о них? Вот как делаю я

procedure ErrorListCreate;
begin
 ErorList:=TStringlist.Create;
 ErrorList.Add('File open failure');         // index:=0
 ErrorList.Add('File save failure');
 ......
 ErrorList.Add('Create backup file failure');// index:=16
end;

procedure TMain.FormCreate(Sender: TObject);
begin
 ErrorListCreate;
end;

procedure Error(ErrorIndex:word);
begin
 ShowMessage(ErrorList.Strings[ErrorIndex]+
             ' with ErrorCode: '+IntToStr(GetLastError));
end;

function OpenBinFile(Filename:string):boolean;
begin
 Result:=true;
 try
   Assignfile(BinFile,Filename);
   Reset(BinFile);
   ...............
 except
   Result:=false;
 end
end;

procedure ProcName;
begin
 ............
 if not OpenBinFile then
 begin
   Error(0); // file open failure
   .........
 end;
 ............
end;


Не могли бы вы подсказать, корректно ли это и если нет, то как надо?
 И еще вопрос. Хотелось бы сделать так, чтобы в сообщении об ошибке был мой текст + код ошибки(GetLastError) + интерпритация этой ошибки Виндой. Т.е. что то вроде 'File open failure with ErrorCode: 5 (Access denied)'. Где храняться соответствия между кодами ошибки и их строковыми представлениями?


Cosinus   (2004-08-17 12:30:00) [1]

>>Семен Сорокин ©  
Да, это именно то, что было нужно, спасибо.
>> Skyle ©
О SysErrorMessage(GetLastError) не знал... Спасибо.


Skyle   (2004-08-17 11:57:00) [2]


> интерпритация этой ошибки Виндой

ShowMessage(SysErrorMessage(GetLastError));?


Семен Сорокин   (2004-08-17 11:52:00) [3]

try
 // генерация исключения
except
 on E: Exception do {либо специфический (зависит от блока в try), например EBDEEngineError, EMyException etc}
   MessageDlg('Моё сообщение' + #13#10 + E.Message {сформированное сообщение}, ...)
end


загляни в Help там довольно неплохо расписан механизм генерации исключений.


Наверх

Титульная страница Поиск, карта сайта Написать письмо