Создание электронной книги в среде PureBasic

Автор: Пользователь скрыл имя, 21 Ноября 2012 в 08:03, курсовая работа

Описание работы

Код программы

; Пример электронного учебника.
; Компилятор PureBasic

Procedure NavigationCallback(Gadget, Url$) ; В этой процедуре перехватываем клики в браузере-навигаторе.

Работа содержит 1 файл

Создание электронной книги в среде PureBasic.docx

— 1.03 Мб (Скачать)

Создание  электронной книги в среде  PureBasic

 

Код программы

 

; Пример электронного  учебника.

; Компилятор PureBasic

 

Procedure NavigationCallback(Gadget, Url$) ; В этой процедуре перехватываем клики в браузере-навигаторе.

  If Url$<>""

    ; Url$=LCase(Url$)

    ; Возвращает исходную строку, преобразованную в нижний регистр (если это

    ; возможно).

    ; Эта функция также поддерживает символы с диакритическим знаками, так что

    ; если находится  большая 'Й',

    ; она преобразовывается в 'й'

    Url$=LCase(Url$)

    pos=FindString(Url$,"about",1)

    ; Синтаксис:

    ; Position.l = FindString(String.s, StringToFind.s, StartPosition.l)

    ; Попытаться найти строку 'StringToFind$' внутри данной строки 'String$'

    ; начиная с  данной позиции

    ; 'StartPosition'. Если строка найдена, возвращается её позиция

    ; (в виде смещения, начиная с 1).

    ; Если строка не найдена, возвращается 0.

    ; about:blank - Показывает пустой HTML документ

    If pos>0

      Url$=Right(Url$,Len(Url$)-pos-5)

      ; Синтаксис  Result$ = Right(String$, Length)

      ; Возвращает последние 'Length' символов с правого края строки.

      ; Эта функция  безопасна для использования даже если для параметра

      ; 'Length'

      ; заданы  выходящие за границы значения, в этом случае она просто

      ; возвращает  результат, который даёт наилучшее совпадение.

      ; Синтаксис  Length = Len(String$)

      ; Описание - Возвращает длину строки в  символах.  Пример:

      ; a = Len("This is Art") ; a будет равно 11

    EndIf

   

    Select Url$ ; Узнаём какую страничку загрузить из памяти в браузер

        ; Оператор Select можно считать прямым дополнением к "IF".

        ; Он удобен только  если необходимо проверить несколько условий.

        Case "ch1.html" ; выбран html-файл под названием ch1.html

           SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch1, ?ch1End-?ch1))

           ; Синтаксис SetGadgetItemText(#Gadget, Item, Text$ [, Column])

          ; Изменяет текст элемента заданного гаджета #Gadget.

           ; Это универсальная функция, работающая почти со всеми гаджетами,

           ; которые манипулируют множеством элементов.

           ;

          ; Со значением #PB_Web_HtmlCode параметра 'Item' изменяет код html в

           ; гаджете.

         ;

          ; Синтаксис Text$ = PeekS(*MemoryBuffer [, Length [, Flags]])

          ; Для опытных программистов. Полезна для чтения строки с заданного

           ; адреса памяти.

          ; Строка должна заканчиваться нулевым символом, иначе функция будет

           ; читать память пока не встретит нулевой символ.

          ; Можно задать необязательный параметр

           ; 'Length' - длину строки (в символах).

          ; Если не задан параметр 'Flags', строка читается как уникодная

           ; если программа скомпилирована в режиме уникода,

           ; иначе строка читается как ascii.

         ; С помощью функции PeekS производится загрузка текста из памяти

           ; (html код это текст).

         ; Адрес памяти и длина памяти вычисляется с помощью меток перед и

           ; после оператора IncludeBinary, о чём писалось выше. Для получения

           ; адреса метки, перед её именем нужно поставить символ ?.

           ; Для электронного учебника указываются все html страницы для выбора

           ; отображения

     EndSelect

   EndIf

    

  ProcedureReturn 0 ; Запрет открытия ссылки браузером

EndProcedure

 

  ; Открываем окно

If OpenWindow(0, 0, 0, 1000, 500, "Автоматизированные системы контроля и управления: Методические указания к лабораторным работам", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)

; размер и название общего окна

    WebGadget(0, 10, 10, 230, 480, "")

; Браузер-навигатор

; размер малого окна

; Синтаксис  Result = WebGadget(#Gadget, x, y, Width, Height, URL$ [, Flags])

; Создаёт гаджет Веб-страница (WebGadget) в текущем списке гаджетов.

; Если для параметра '#Gadget' задано значение #PB_Any, в 'Result' возвращается

; номер нового гаджета.

; Значение параметра #Gadget будет возвращаться из функции EventGadget().

; SetGadgetItemText(0,#PB_Web_HtmlCode,PeekS(?h, ?hEnd-?h)

; Загрузка из памяти странички навигации, в данном случае загрузка html-файла

; h.html

    SetGadgetAttribute(0,#PB_Web_NavigationCallback,@NavigationCallback())

; Установка процедуры-перехватчика  кликов по ссылкам

; для того, чтобы в большом окне появилась страничка

; Синтаксис SetGadgetAttribute(#Gadget, Attribute, Value)

; Изменяет значение атрибута 'Attribute' для заданного гаджета #Gadget.

; Эта функция работает со всеми гаджетами, поддерживающими атрибуты:

    WebGadget(1, 250, 10, 880-140, 480, "")

; Браузер, отображающий  выбираемые странички

; размер большого окна

    SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch1, ?ch1End-?ch1))

; загруска стартового html-файла ch1.html

    SetGadgetAttribute(1,#PB_Web_NavigationCallback,@NavigationCallback())

; для того, чтобы в большом окне появилась страничка

; если необходимо загрузить с ссылки большого окна html-файл в том же окне

 

    HideWindow(0,0) ; Отображение окна

 

   

    Repeat ; Это главный цикл прогаммы - обработчик событий. Мы отслеживаем только закрытие окна

    Until WaitWindowEvent() = #PB_Event_CloseWindow

 

  EndIf

End ; Типа всё, программа завершает работу

 

; Вот этот код при  компиляции загружает файлы в  исполняемый файл.

; Доступ к файлам как  к памяти получаем с помощью  меток

; Здесь разместим ссылки на файлы лекций и лабораторных работ

 

 DataSection

  h:

    IncludeBinary "h.html"

  hEnd:

 

  ch:

    IncludeBinary "main.html"

  chEnd:

 

  ch1:

    IncludeBinary "ch1.html"

  ch1End:

 

EndDataSection

 

Для создания книги необходимо скопировать код  в среду PureBasic (желательно версии 4.60). Использовать текст книги в форме html-файла. Изменить и добавить в коде программы названия html-файлов (см. комментарии кода).

 

Отображение изображений

 

В коде прописаны  только единичные файлы html-страничек. Если в страничке имеется картинка, которая расположена в той же директории или поддиректории, что и html-страничка, то изображение не загрузится. Это из-за того, что файлы картинок не загружены в памяти программы. Наиболее легким способом решить проблему можно путем внедрения картинки непосредственно в html-файл. Это возможно благодаря использованию ссылки следующего вида

 

<img src=”data:image/gif;base64, <!—Здесь код картинки в формате base 64 --> ”>

 

Получение из картинки jpg или bmp кода base64 можно с помощью подпрограммы Total Commander. Для этого в одном окне открываем путь, куда сохранить файл кода картинки, а другом окне просто выделяем нужный файл картинки. Далее переходим в панели инструментов «Файлы→Кодировать (MIME, UUE, XXE)». Появилось окошко, в котором прописан каталог, куда надо сохранить код, и формат кодирования. Нас интересует MIME (Base64). Нажимаем «Ок». Видим, что в первом окне появился файл с одноименным названием картинки и расширением .b64. Выделяем этот файл, нажимаем «F3» и копируем только код (ряд символов, неподдающиеся чтению). Далее вставляем их в ссылку в html-файле вместо <!—Здесь код картинки в формате base 64 --> (см. выше).

У этого метода есть небольшой недостаток, связанный  с версией IE. В современных компьютерах на Windows 7 с обновлением стоит IE9, что без проблем открывает емкие рисунки. У версии ниже есть ограничение в размере кода картинки в 32Кб. При этом сама картинка занимает размер на 30% меньше, чем код, т.е. максимально допустимый размер картинки составляет порядка 20Кб. Решить эту проблему можно путем сильного сжатия рисунка (уменьшение качества, размера, цветов и т.д.), а так же просто разделение одной картинки на несколько ее составляющих, которые можно соединить в html-коде. Программ редактирования рисунков много. В Photoshop есть специальный web компрессор, с помощью которого можно подобрать оптимальные качество и размер, а также здесь можно легко «разрезать» картинку.

Ниже изображены рисунки, показывающие последовательность действий кодирования рисунка.

 

 

 

 

 

 

 


Информация о работе Создание электронной книги в среде PureBasic