Турбо Паскаль 6.0

Чтение ресурса.


Получить ресурс из файла ресурса так же просто, как получить объект из потока: Вы просто вызываете функцию Get файла ресурса с ключем требуемого ресурса. Get возвращает указатель на PObject. Ресурс строки статуса, созданные в предыдущем примере, может быть получен:

program MyApp;

uses Objects, Drivers, Views, Menus, Dialogs, App;

var MyRez: TResourceFile;

type PMyApp = ^TMyApp; TMyApp = object(TApplication) constructor Init; procedure InitStatusLine; virtual; end;

constructor TMyApp.Init; var S: PStream; FileName: PathStr; Event: TEvent; const MyRezFileName: PathStr = 'MY.REZ'; begin MyRez.Init(New(PBufStream, Init(MyRezFileName, stOpen, 1024))); if MyRez.Stream^.Status <> 0 then Halt(1); TApplication.Init; end;

procedure TMyApp.InitStatusLine; begin StatusLine := PStatusLine(MyRez.Get('Waldo')); end;

Когда Вы читаете ресурс объекта, Вы должны знать о возможности получения nil указателя. Если индекс имени неверен (т.е. если нет ресурса с таким ключем) Get возвращает nil. Однако после того, как код ресурса будет отлажен, в дальнейшем не должно быть проблем. Вы можете считывать объект ресурса повторно. Вряд ли Вам понадобиться делать это со строкой статуса в нашем примере, но например диалоговое окно может быть считано пользователем много раз во время выполнения программы. Ресурс просто постоянно выдает объект при запросе. Это потенциально может приводить к проблемам с медленным дисковым В/В даже если файл ресурса буферизован. Вы можете увеличить буферизацию или скопировать поток в EMS поток, если EMS инсталлирована.



Содержание раздела