Logo    
Деловая газета CitCity.ru citforum.ck.ua - все об Open Source Форумы Все публикации Учебный центр Курилка
CitForum    CITForum на CD    Подписка на новости портала Море(!) аналитической информации! :: citforum.ck.ua
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Friday, 14-Mar-2008 19:59:09 EET

Google
WWW citforum.ck.ua
Техническая конференция «Корпоративные базы данных-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.
В противоположность  этому  списку  строк,  который  можно   только
читать, создаваемый  список строк возможно только записывать.  Все,
что Вы  можете   делать   при   создании   списка   строк   -   это
инициализировать  список  строк,  последовательно записывать в него
строки и сохранить результирующий список в потоке.
                              Назад | Содержание | Вперед

 

 

\

Подписка на новости IT-портала citforum.ck.ua
(библиотека, citforum.ck.ua, CitCity)

Новые публикации:

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: ваш виртуальный ПК

    Приложения:

    • MyTop: top для MySQL

    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
  • Новая Дискуссия:
    • Нужен ли русский Linux?

    19 декабря

  • SQL Anywhere: встраиваемая СУБД
  • citforum.ck.ua:

  • В разделе Блогометки появились рубрики:
    • Десктопы
    • Приложения
    • Системы
  • Подробно о разделе: Блоги и блогометки: открываем сезон промывки
  • 13 декабря

    CitCity:

  • Microsoft и Барселона: сюрреализм?
  • citforum.ck.ua:

  • Открыт новый раздел Блогометки
  • ZFS в подробностях. 1. Былое и ныне
  • 5 декабря

  • Архитектура предприятия: основные определения
  • Архитектуры для государственных ведомств. Примеры
  • Обзор журнала Computer:

  • Высокопроизводительные встроенные системы
  • citforum.ck.ua:

  • Продолжение цикла Linux для начинающих:
    • Пользовательские интерфейсы
    • Файлы
    • Системы настройки

    Все публикации >>>




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

Информация для рекламодателей Пресс-релизы -
Послать комментарий
Информация для авторов
Rambler's Top100 хостинг от .masterhost This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2007 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...