Самоучитель по Delphi 7 для профессионалов


Коды ошибок в исключительных ситуациях - часть 3


PResStringRec = ^TResStringRec;

 TResStringRec = packed record 

Module: ^Cardinal;

 Identifier: Integer;

 end;

Если вы еще раз посмотрите на список конструкторов объекта Exception, вы увидите, что те из них, которые работают с ресурсами, имеют перегружаемую версию с параметром типа pResstringRec. Вы угадали правильно: они — для строк из resourcestring. А взглянув на приведенную выше структуру, вы увидите в ней поле identifier. Это то, что нам надо.

Чтобы у программиста, пользующегося resourcestring, голова не болела об уникальных идентификаторах ресурсных строк, среда Delphi берет на себя заботу об этом. Номера назначаются компилятором, начиная от 65 535 (SmallInt (-D) и ниже (если рассматривать номер как тип (SmallInt, то выше): 65 534, 65 533 и т. п. Сначала в этом списке идут несколько сотен resourcestring-констант, описанных в VCL (из модулей, чье имя заканчивается на const или consts: sysconst, DBConsts и т. п.). Затем очередь доходит до пользовательских констант (рис. 3.3).

С одной стороны, отсутствие лишних забот — это большой плюс; с другой стороны, разработчик не может задать строкам те номера, какие хочет.

Все остальное почти ничем не отличается от работы с "самодельными" ресурсами. Так выглядит перегружаемая версия конструктора нашего объекта EExceptionWithCode:

constructor EExceptionWithCode.CreateResCode(ResStringRec:

PResStringRec);

begin

FErrCode := ResStringRec^.Identifier;

inherited CreateRes(ResStringRec); 

end;

А так — возбуждение самой ИС:

resourcestring sErrorl = 'Error  1';

Raise EExceptionWithCode.CreateResCode

(PResStringRec(@sErrorl));

 Результат обработки показан на рис. 3.3.

Рис. 3.3. Результат обработки ИС типа EExceptionWithCode

 




- Начало -  - Назад -  - Вперед -