Код:
; Пример электронного учебника.
; Компилятор PureBasic
Procedure NavigationCallback(Gadget, Url$) ; В этой процедуре перехватываем клики в браузере-навигаторе.
If Url$<>""
Url$=LCase(Url$)
pos=FindString(Url$, "about:blank",1)
If pos>0
Url$=Right(Url$,Len(Url$)-pos-10)
EndIf
Select Url$ ; Узнаём какую страничку загрузить из памяти в браузер
Case "ch1.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch1, ?ch1End-?ch1))
Case "ch2.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch2, ?ch2End-?ch2))
Case "ch3.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch3, ?ch3End-?ch3))
Case "ch4.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch4, ?ch4End-?ch4))
Case "ch5.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch5, ?ch5End-?ch5))
Case "ch6.html"
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch6, ?ch6End-?ch6))
EndSelect
EndIf
ProcedureReturn 0 ; Запрет открытия ссылки браузером
EndProcedure
; Открываем окно
If OpenWindow(0, 0, 0, 800, 500, "WebGadget", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
WebGadget(0, 10, 10, 150, 480, "") ; Браузер-навигатор
SetGadgetItemText(0,#PB_Web_HtmlCode,PeekS(?h, ?hEnd-?h)) ; Загрузка из памяти странички навигации
SetGadgetAttribute(0,#PB_Web_NavigationCallback,@NavigationCallback()) ; Установка процедуры-перехватчика кликов по ссылкам
WebGadget(1, 180, 10, 780-180, 480, "") ; Браузер, отображающий выбираемые странички
SetGadgetItemText(1,#PB_Web_HtmlCode,PeekS(?ch1, ?ch1End-?ch1)) ; Загрузка из памяти начальной странички
HideWindow(0,0) ; Отображение окна
Repeat ; Это главный цикл прогаммы - обработчик событий. Мы отслеживаем только закрытие окна
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
End ; Типа всё, программа завершает работу
; Вот этот код при компиляции загружает файлы в исполняемый файл.
; Доступ к файлам как к памяти получаем с помощью меток
DataSection
h:
IncludeBinary "h.html"
hEnd:
ch1:
IncludeBinary "ch1.html"
ch1End:
ch2:
IncludeBinary "ch2.html"
ch2End:
ch3:
IncludeBinary "ch3.html"
ch3End:
ch4:
IncludeBinary "ch4.html"
ch4End:
ch5:
IncludeBinary "ch5.html"
ch5End:
ch6:
IncludeBinary "ch6.html"
ch6End:
EndDataSection
Теперь разберёмся как этот код работает.