Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

ГЛАВА 9. РЕСУРСЫ.

     Файл ресурса  -  это  объект  Turbo  Vision,   который   будет
сохранять объекты,  а  затем  выдавать их по имени.  Ваша программа
может получать затем эти объекты  из  ресурса  вместо  того,  чтобы
инициализировать их.  Таким  образом  Ваша  программа  вместо того,
чтобы инициализировать используемые объекты,  может использовать их
из ресурса, который создан отдельной программой.
     Этот механизм достаточно прост:  файл  ресурсов  работает  как
поток с   прямым   доступом,  обращаясь  к  объектам  по  ключам  -
уникальным строкам, идентифицирующим ресурсы.
     В отличие  от  других  частей Turbo Vision Вам,  вероятно,  не
потребуется изменять механизма  ресурсов.  Ресурсы, предоставляемые
Turbo Vision, гибки и надежны. Вам необходимо просто изучить их.


Для чего используются ресурсы?

Использование файла ресурса дает ряд преимуществ. Использование ресурсов позволяет Вам настраивать Вашу программу не изменяя код. Например, текст диалоговых окон, метки элементов меню, цвета видимых элементов могут быть получены из ресурса. Вы можете уменьшить код, поместив Init всех Ваших объектов в отдельную программу. Инициализация часто бывает достаточно сложной и содержит вычисления и другие операции, которые Вы можете вынести из Вашего кода. Вам остается только использовать Load для каждого объекта в Вашей программе, но загрузка всегда значительно проще, чем Init. Вы можете уменьшить Ваш код от 8 до 10 процентов, используя ресурс. Использование ресурса так же упрощает поддержку версий Вашей программы, настраиваемой на различные языки. Ваша программа загружает объекты по имени, а язык, на котором они отображают, заключен в них. Если Вы хотите предоставить версии программы с различными возможностями, Вы можете, например, разработать 2 набора меню, один из которых предоставляет доступ ко всем возможностям, а другой предоставляет доступ только к ограниченному набору функций. Для этого Вам не требуется переписывать весь код и Вам не нужно бояться случайно удалить нужную часть кода. Вы можете настраивать программу на полную функциональность предоставлением только нового ресурса вместо замены всей программы. Короче, ресурс изолирует представление объектов Вашей программы и упрощает ее изменение.

Что в ресурсе?

До того, как рассматривать детали ресурсов, Вы должны хорошо освоить потоки и коллекции, поскольку механизм ресурса широко использует их. Вы можете использовать ресурсы не зная как они работают, но если Вы собираетесь изменить их, Вам требуется это знать. TResourсeFile содержит отсортированную коллекцию строк и поток. Строки в коллекции - это ключи к объектам в потоке. TResourceFile имеет метод Init, который берет поток и метод Get, который берет строку и возвращает объект.

Создание ресурса.

Создание файла ресурса выполняется в 4 этапа. Вам необходимо открыть поток, инициализировать файл ресурса с этим потоком, сохранить один или более объектов с их ключами и закрыть ресурс. Следующий код создает простой файл ресурса MY.REZ, содержащий один ресурс: строку статуса с ключем 'Waldo': program BuildResourse; uses Drivers, Objects, Views, App, Menus; type PHaltStream = ^THaltStream; THaltStream = object(TBufStream) procedure Error(Code, Info: Integer);virtual; end; var MyRez: TResourceFile; MyStrm: PHaltStream; procedure THaltStream.Error(Code, Info: Integer); begin Writeln('Stream error: ', Code, ' (', Info, ')'); Halt(1); end; procedure CreateStatusLine; var StatusLine: PStatusLine; begin StatusLine := New(PStatusLine, Init( 0,$FFFF, NewStatusItem('~Alt-X~ Exit', AltX, cmQuit, NewStatusItem('~F3~ Open', F3Key, cmNewDlg, NewStatusItem('~F5~ Zoom', F5Key, cmZoom, NewStatusItem('~Alt-F3~ Close', AltF3, cmClose, nil)))) )); MyRez.Put(StatusLine, 'Waldo'); Dispose(StatusLine, Done); end; begin MyStrm := New(PHaltStream, Init('MY.REZ', stCreate, 1024)); MyRez.Init(MyStrm); CreateStatusLine; MyRez.Done; end.

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

Получить ресурс из файла ресурса так же просто, как получить объект из потока: Вы просто вызываете функцию 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 инсталлирована.

Список строк.

В дополнение к стандартному механизму ресурса, Turbo Vision предоставляет пару специализированных объектов для управления списками строк. Список строк - это специальный ресурс, который позволяет Вашей программе обращаться к строковым ресурсам по номерам (обычно представленными целыми константами) вместо строковых ключей. Это позволяет программе сохранять строки в файле ресурса для упрощения настройки. Например, IDE Turbo Pascal использует объект списка строк для всех сообщений об ошибках. Это означает, что программа может просто вызвать сообщение об ошибке по номеру и различные версии в различных странах будут выбирать различные строки из их ресурсов. Объект списка строк спроектирован не очень гибко, но очень быстр и удобен при правильном использовании. Объект TStringList используется для доступа к строкам. Чтобы создать список строк, необходимо использовать объект TStrListMaker. Записи регистрации для этих объектов имеют одинаковый номер типа объекта. Объект списка строк не имеет метода Init. Используется единственный констрактор - метод Load, поскольку списки строк существуют только в файлах ресурса. Аналогично, поскольку список строк - это ресурс только для чтения, он имеет функцию Get, но не имеет процедуры Put.

Создание списков строк.

Тип объекта TStrListMaker используется для создания списка строк в файле ресурса для последующего использования с TStringList. В противоположность этому списку строк, который можно только читать, создаваемый список строк возможно только записывать. Все, что Вы можете делать при создании списка строк - это инициализировать список строк, последовательно записывать в него строки и сохранить результирующий список в потоке.
                              Назад | Содержание | Вперед

 

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...