|
Техническая конференция «Корпоративные базы данных-2008»
Москва, 24-25 апреля
ГЛАВА 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.
В противоположность этому списку строк, который можно только
читать, создаваемый список строк возможно только записывать. Все,
что Вы можете делать при создании списка строк - это
инициализировать список строк, последовательно записывать в него
строки и сохранить результирующий список в потоке.
Назад | Содержание | Вперед
\
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|
|
![](/pictures/1x1.gif) |
![](/pictures/1x1.gif) |
|
Новые публикации:
12 марта
- Восход и закат High Performance Fortran: наглядный урок истории (пересказ: С.Кузнецов)
citforum.ck.ua:
Новые Блогометки:
- Ccze: хорошее модульное средство подсветки логов
- PWSafe - кроссплатформенное средство для работы с паролями
- colordiff - подсветка для diff
- psmisc: рассмотрим ближе стандартный пакет
- Работа с сетью
- xkb, узелок на память
- ffmpeg-php
- debiannotes:desktop:prettyfonts
5 марта
citforum.ck.ua:
- Ричард Столлман в Москве
- О мудром доценте замолвите слово... (Интенсификация Малаховна)
Новые Блогометки:
- "Десктопизация" OpenBSD
- weather: проверяйте сводку и прогноз погоды из командной строки
- hpodder: клиент подкастов, который просто работает
- bc: язык численных расчетов с произвольной точностью
- Decibel: аудиоплеер для людей
- GNU Wget: загрузите весь понравившийся сетевой контент на локальный компьютер
- Deborphan: найдите ненужные пакеты
- Kivio: мощный и простой в использовании редактор блок-схем
- Cowsay: настраиваемая говорящая и думающая корова
- Thoggen: основанная на GTK+ программа для извлечения видео с DVD
28 февраля
- Подбор и развитие команд
Глава из книги «Руководство командой разработчиков программного обеспечения. Прикладные мысли» (С.Архипенков)
citforum.ck.ua:
Дискуссия об анонимусах:
- К комментаторам
- Windows против Linux - психологический портрет участников форумов
Новые Блогометки:
- Nokia N810 - Linux Inside
- LiMo - стандарты Linux для сотовых телефонов
- timer-applet: таймер для панели GNOME
- Debfoster: удалите пакет и все его зависимости
- GPW: генератор произносимых паролей
- AMOR: общество для рабочего стола
20 февраля
citforum.ck.ua:
Новые Блогометки:
- Кое-что о приложениях KDE 4
- Инструкция по установке KDE 4 в Ubuntu
- Настоящие мужчины ставят KDE из SVN!
- Начат переход Amarok на Qt 4.4
- Marble
- Dillo - сверхбыстрый браузер
- Создаем резервные копии настроек программ и важных файлов в Ubuntu LInux
- NTP: всегда вовремя
- VYM - простое средство зарисовки мыслей и планирования
- KBibTeX: простой и гибкий редактор библиографий для KDE
Дискуссия Windows vs Linux:
- Жил-был Мальчик, или Сказочка о Том, Откуда Берутся "КУЛХАЦКЕРЫ", ненавидящие Линукс и Юникс
13 февраля
- Терминологический словарь Wi-Fi
-
Задача проектирования базы данных методом нормализации
CitCity:
- Лучшие смартфоны начала 2008 года
citforum.ck.ua:
- Первый взгляд на Firefox 3.0
- Open Source на Белгородщине: семинар в Старом Осколе
- Что такое KDE?
Цикл о Slackware:
- Русский в консоли
- Быстрая настройка Иксов
- xorgconfig - консольный подход
6 февраля
citforum.ck.ua:
- Мобильный Linux – вчера, сегодня, завтра
- Чем записать диски в Linux? Попробуй Brasero!
- Консольные команды
- Рецепты. Кое-что о программе mplayer
- Slackware:
- Что такое Slackware?
- Установка Slackware - Загрузка
- Категории программного обеспечения
- Структура файловой системы
- Система инициализации Slackware Linux
- Скрипты инициализации уровня запуска
30 января
- Обзор алгоритмов MOLAP
CitCity:
- BI-технологии 2007. Итоги года
- Рынок СУБД для Хранилищ данных 2007. Итоги года, тенденции
- Обзор рынка BI (по результатам исследований IDC, OLAP Report, Gartner)
- Модель зрелости BI
citforum.ck.ua:
- Владимир Попов: За что я люблю Linux
- Священные войны
23 января
-
Data Mining от Oracle: настоящее и будущее
-
Комментарии к статье Ч.Бергера «Data Mining от Oracle: настоящее и будущее»
-
Байесовский классификатор и регрессионная модель в ORTD: практический пример
citforum.ck.ua:
Дискуссия Windows vs Linux:
- Программисты и фирмы: кто кого
- О "чистых пользователях"
Новые Блогометки:
- Почему Jabber, а не ICQ?
- Archlinux install quick
- Arch на IBM Z60m
- Arch + IBM R50e
- OpenBSD - сборка E17-cvs (или ещe одна маленькая победа разума)
- OpenBSD - всe для Человека и ради Человека...
- PekWM
- E17 и "прозрачность"
- E17 - приятные мелочи (multimedia)
- SuSE + Enlightenment = угробил целый день
16 января
- Вьетнам компьютерной науки (пересказ - С.Кузнецов)
- Пример построения автоматизированного управления дисками (ASM) (В. Пржиялковский)
CitCity:
- 2008 год: антипрогноз
citforum.ck.ua:
Новые Блогометки:
Сети и Интернет:
- Mozilla firefox. Шрифты в меню
- Screen tips
- Liferea: программа чтения RSS для GNOME
- HTTrack: скачивание и зеркалирование сайтов
- Clusterssh: работа с несколькими сеансами SSH через общий интерфейс
Десктопы:
- Fluxbox & xinitrc. Some new tips
- Как я конфигурировал xdm
Системы:
- SuSE 10.2: zypper - еще один способ установки пакетов
- cpipe: определите пропускную способность конвейера команд
- gddrescue: средство восстановления данных с поврежденных носителей
- VirtualBox: ваш виртуальный ПК
Приложения:
10 января
citforum.ck.ua:
Дискуссионный клуб:
- Краткое руководство по общению с никсофилами (Интенсификация Малаховна Сергина-Гейтс)
- О троллях
- Пещера горного короля: заметки о троллинге
Новые Блогометки:
Сети и Интернет:
- Делаем блог на Drupal
- Использование lftp
- Устанавливаем FTP сервер ProFTPd с TLS шифрованием
- Управляем файлами на FTP сервере с помощью FileZilla
Десктопы:
- fluxbox.autorun
- 15 человек на сундук мертвеца! (или песнь о зарытых сокровищах)
Системы:
- Живой Debian или рабочее место в кармане
- Разбивка hdd
Приложения:
- Cat Excel files
- Vim: меню выбора кодировок
26 декабря
citforum.ck.ua:
- В Блогометках открыты разделы:
- Софт для Windows
- Сети и Интернет
- dwm. От статики к динамике
- Установил Solaris
- Новая Дискуссия:
19 декабря
-
SQL Anywhere: встраиваемая СУБД
citforum.ck.ua:
- В разделе Блогометки появились рубрики:
- Десктопы
- Приложения
- Системы
- Подробно о разделе: Блоги и блогометки: открываем сезон промывки
13 декабря
CitCity:
- Microsoft и Барселона: сюрреализм?
citforum.ck.ua:
- Открыт новый раздел Блогометки
- ZFS в подробностях. 1. Былое и ныне
5 декабря
-
Архитектура предприятия: основные определения
-
Архитектуры для государственных ведомств. Примеры
Обзор журнала Computer:
-
Высокопроизводительные встроенные системы
citforum.ck.ua:
- Продолжение цикла Linux для начинающих:
- Пользовательские интерфейсы
- Файлы
- Системы настройки
Все публикации >>>
|
|
![](/pictures/1x1.gif)
![](/a/clocs.gif)
|
|
|