Экономичная аренда стойки в ЦОДе Москва

3. Файл включается в программу указанием директивы $r, например {$Rmystrings. res}.

Чтобы совместно использовать константы-номера ошибок в файле ресурсов и в коде на Delphi, вынесем их в отдельный включаемый файл с расширением inc:

const IOError = 100 0;
FileOpenError = IOError + 1;
FileSaveError = IOError + 2 ;
InternetError = 2 0 00;
NoConnectionError = InternetError + 1;
ConnectionAbortedError = InternetError + 2 ;

Взглянув на файл, вы увидите, что ошибки в нем сгруппированы по категориям. Советуем вам поступить так же, разделив константы категорий промежутком в 1000 или даже 10 000.

Сам файл ресурсов может выглядеть так:

#include "strids.inc"

STRIICTABLE

{

FileOpenError, "File Open Error" FileSaveError, "File Save Error" NoConnectionError, "No Connection" ConnœtionAtortedError, "Connection Aborted" }

"Вытащить" строку из ресурсов можно несколькими способами, но самый простой из них - просто по числовому идентификатору, переданному в функцию Loadstr (модуль SysUtils). Код

ShowMessage(LoadStr(NoConnectionError)); покажет сообщение "NO Connection".

Если же строка используется при возбуждении ИС, то место идентификатору-в перекрываемом конструкторе Exception.CreateRes, один из вариантов которого работает подобно функции Loadstr:

if FileOpen('с: \myfile.txt", fmOpenRead) = 1>^АШ_11АШ1£_\М1]Е then raise EMyException.CreateRes(FileOpenError);

Таким образом, решена половина проблемы: возможным исключительным ситуациям присвоены номера, им в соответствие поставлен текст. Теперь о второй половине - как в обработчике ИС этот номер использовать.

Ясно, что нужно объявить свой класс ИС, включающий в себя свойство-код ошибки.

EExceptionWithCode = class(Exception)

private FErrCode : Integer;

public

constructor CreateResCode (ResStringRec: PResStringRec) ;
property ErrCode: Integer read FErrCode write FErrCode;
end ;

Тогда любой обработчик сможет к нему обратиться:

if Е is EExceptionWithCode then

ShowMessage('Error cede: '+ IntToStr(EExceptionWithCode (E) .ErrCode) +

#13#10

+ 'Error text: ' + E,Message); Присвоить свойству ErrCode значение можно двумя способами:

1. Добавить к классу ИС еще один конструктор, содержащий код в качестве дополнительного параметра:

constructor EExceptionWithCode.CreateResCode(Ident: Integer);
begin
F^ErrCode := Ident;
inherited CreateRes (Ident) ;
end;

2. Присвоить значение свойства в промежутке между созданием объекта ИС и его возбуждением:

var Е: EExceptionWithCode;
begin
Е := EExceptionWithCode.CreateRes(NoConnectionError);
E.ErrCode := NoConnectionError;
Raise E;
end;

Вот, казалось бы, последний штрих. Но как быть тем, кто заранее не заготовил файл ресурсов, а работает со строками, описанными в PAS-файлах? Если вы используете оператор resourcestring, то помочь вам можно.

Начнем с рассмотрения ключевого слова resourcestring. Вслед за ним описываются текстовые константы. Но, в отличие от ключевого слова const, эти константы размещаются не в сегменте данных программы, а в ресурсах, и подгружаются оттуда по мере необходимости. Каждая такая константа воспринимается и обрабатывается как обычная строка. Но за каждой из них на самом деле стоит такая структура:


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс