Браузер на PureBasic
Не
много переработанный код Web_browser из CodeArchiv.
Добавлен пункт "Избранные" ссылки.
Добавлен поиск, с
возможностью выбора Google и
Яндекс.
Отображение нового адреса ссылки при
переходе.
Скачать
архивКод браузера для версии PureBasic 4.40 :
;------------------------------------------------------
; Браузер
;
; 2010 год
;
; PureBasic 4.40
;
;-------------------------------------------------------
UsePNGImageDecoder() ; инициализация PNG декодера
UseJPEGImageDecoder() ; инициализация JPEG декодера
Enumeration
#Window_0
#Strin_1
#Strin_2
#poisk
#web
#But
#But_1
#But_2
#But_3
#Imag
#Imag_1
#GO_Search
EndEnumeration
Global text.s , zapros.s
;{--Эта процедура определяет находится ли курсор мышки над заданым окном или гаджетом-------
Procedure IsMouseOver(wnd)
GetWindowRect_(wnd,re.RECT)
GetCursorPos_(pt.POINT)
Result.l = PtInRect_(@re, pt\x | (pt\y<<32) )
ProcedureReturn Result
EndProcedure
;}------------------------------------------------------------------------------------------
;{----------- курсор рука над изоброжением--------------------------------------------------
Procedure Search(Event)
Static Button, Buton_DOWN
If Event=#WM_MOUSEMOVE ; Переместилась мышка
If IsMouseOver(GadgetID(#Imag))
myCursor=LoadCursor_(0,#IDC_HAND) ; курсор рука
SetCursor_(myCursor) ; курсор рука
EndIf
EndIf
EndProcedure
;}------------------------------------------------------------------------------------------
;{-------загрузаем в #Strin_1 полученый адрес новой ссылки при переходе---------------------
Procedure NavigationCallback(Gadget, Url$)
SetGadgetText(#Strin_1, Url$)
ProcedureReturn #True
EndProcedure
;}------------------------------------------------------------------------------------------
;{----------------Процедура поиск-----------------------------------------------------------
Procedure Poisk()
text.s = GetGadgetText(#poisk) ; какой выбран поиск (yandex или google)
zapros.s = GetGadgetText(#Strin_2)
If text = "Яндекс"
SetGadgetState(#Imag,ImageID(4)) ; изменяем текущее состояние изображенния
SetGadgetText(#web, "http://yandex.ua/yandsearch?text=" + zapros)
ElseIf text = "Google"
SetGadgetState(#Imag,ImageID(5)) ; изменяем текущее состояние изображенния
SetGadgetText(#web, "http://www.google.com/search?hl=ru&q=" + zapros)
EndIf
EndProcedure
;}-----------------------------------------------------------------------------------------
;{--------Дуйствие, если курсор над поиском по кнопке "Enter"------------------------------
Procedure Strin_2(hwnd, msg, wParam, lParam)
*PointOldEditFunc=GetWindowLong_(hWnd,#GWL_USERDATA)
If msg=258
If wParam=13
msg=0
Poisk()
EndIf
EndIf
ProcedureReturn CallWindowProc_(*PointOldEditFunc,hwnd, msg, wParam, lParam)
EndProcedure
;}-----------------------------------------------------------------------------------------
CatchImage(0, ?Im0, ?Im0End -?Im0 )
CatchImage(1, ?Im1, ?Im1End -?Im1 )
CatchImage(2, ?Im2, ?Im2End -?Im2 )
CatchImage(3, ?Im3, ?Im3End -?Im3 )
CatchImage(4, ?Im4, ?Im4End -?Im4 )
CatchImage(5, ?Im5, ?Im5End -?Im5 )
CatchImage(6, ?Im6, ?Im6End -?Im6 )
OpenWindow (#Window_0, 0, 0, 1000, 800, "Браузер на PureBasic", #PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered |#PB_Window_SizeGadget)
SetWinBackgroundImage(WindowID(0), ImageID(3) )
SmartWindowRefresh(#Window_0 ,1) ; для уменьшения мигания окна при изменении размера
StringGadget(#Strin_1, 125, 3, 580, 20, "http://purebasic.info/")
ButtonImageGadget(#But_1,10,2,22,22,ImageID(1)) ; браузер <<<
ButtonImageGadget(#But, 35,2,32,22,ImageID(0)) ; обновить браузер
ButtonImageGadget(#But_3,70,2,22,22,ImageID(6)) ; стоп браузер
ButtonImageGadget(#But_2,95,2,22,22,ImageID(2)) ; браузер >>>
WebGadget(#web, 5,30,990,740, "")
SetGadgetAttribute(#web, #PB_Web_NavigationCallback, @NavigationCallback()) ; для получения нового URL
StringGadget(#Strin_2, 722, 6, 175, 16, "Поиск",#PB_String_BorderLess)
ImageGadget(#Imag, 900, 5, 16, 16,ImageID(4)) ; лого поиска
ComboBoxGadget(#poisk, 925, 3, 65, 20)
AddGadgetItem (#poisk, -1, "Яндекс")
AddGadgetItem (#poisk, -1, "Google")
SetGadgetState(#poisk, 0) ; начальное положение
;----------------нажатие 'Enter' в поиске------------------------------
*Old_PointOldEditFunc=GetWindowLong_(GadgetID(#Strin_2), #GWL_WNDPROC)
SetWindowLong_(GadgetID(#Strin_2),#GWL_USERDATA, *Old_PointOldEditFunc)
SetWindowLong_(GadgetID(#Strin_2), #GWL_WNDPROC, @Strin_2())
;----------------------------------------------------------------------
SetGadgetText( #web, GetGadgetText(#Strin_1)) ; загружаем при старте браузер
a=101
;------------------Меню--------------------
If CreateMenu(1, WindowID(#Window_0))
MenuTitle("Файл")
MenuItem(1, "Открыть")
MenuItem(2, "Сохранить")
MenuItem(3, "Выход")
MenuTitle("Избранное")
MenuItem(0, "Создать ссылку" )
MenuItem(00, "" )
MenuItem(333, "Удалить загруженную ссылку" )
MenuItem(00, "" )
MenuBar()
MenuItem(100, "" )
If OpenPreferences("url.pcs")
PreferenceGroup("адрес")
If ExaminePreferenceKeys()
While NextPreferenceKey()>0 ; пока в группе "адрес" есть записи
keyValue$ = PreferenceKeyValue()
keyValue$ = ReplaceString(keyValue$, "~", "=") ; заменяем "~" на "="
MenuItem(a, keyValue$ ) ; создаём меню с 101 позиции и записываем адреса по порядку
a=a+1
Wend
EndIf
ClosePreferences()
EndIf
MenuTitle("Информация")
MenuItem(4, "Помощь")
MenuItem(4, "О программе")
EndIf
;------------------------------------------
Repeat
Event = WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
If Event=#PB_Event_SizeWindow ; Изменяем размер браузера при изменении размеров окна
ResizeGadget(#Web,#PB_Ignore,#PB_Ignore, WindowWidth(#Window_0)-10, WindowHeight(#Window_0)-60)
EndIf
Select Event
Case #PB_Event_Gadget
Select EventGadget()
;----------------------------------Поиск---------------------------------------
Case #Imag ; при нажатии на изображение
Poisk()
;-------------------------------------------------------------------------------
Case #poisk ; выбор поиска
If EventType()=1
text.s = GetGadgetText(#poisk)
zapros.s = GetGadgetText(#Strin_2)
If text = "Яндекс"
SetGadgetState(#Imag,ImageID(4)) ; изменяем текущее состояние изображенния
ElseIf text = "Google"
SetGadgetState(#Imag,ImageID(5)) ; изменяем текущее состояние изображенния
EndIf
EndIf
;-------------------------------------------------------------------------------
Case #But_1
SetGadgetState(#Web, #PB_Web_Back) ; вернуться на шаг назад в браузере
Case #But
SetGadgetText(#web, GetGadgetText(#Strin_1)) ; обновить браузер
Case #But_2
SetGadgetState(#Web, #PB_Web_Forward); вернуться на шаг вперёд в браузере
Case #But_3
SetGadgetState(#Web, #PB_Web_Stop) ; Stop браузер
EndSelect
EndSelect
Menu=EventMenu() ; Узнаём идентификатор пункта меню
If Event= #PB_Event_Menu ; Обрабатываем события от меню.
Select Menu
Case 0
url.s = GetGadgetText(#Strin_1) ; получаем адрес
url.s = ReplaceString(url.s, "=", "~") ; заменяем перед записью "=" на "~"
If url.s > "" ; если строка не пустая
OpenPreferences("url.pcs") ; открыть файл с настройками
PreferenceGroup("адрес") ; раздел адрес
WritePreferenceString(url.s, url.s) ; запись нового адреса
ClosePreferences()
a =a+1 ; увеличиваем номер пустой закладки
EndIf
InsertMenu_(MenuID(1), 100, #MF_BYCOMMAND , a, url.s) ; api функция добавляет новый пункт меню, перед 101 пунктом
DrawMenuBar_(WindowID(#Window_0)) ; перирисовка
;-----------16 заготовок под закладки------------
Case 101 To 116
Text.s = GetMenuItemText(1, EventMenu())
SetGadgetText( #web, Text) ; загружаем адрес закладки в браузер
SetGadgetText( #Strin_1, Text) ; загружаем адрес закладки в #Strin_1
;-----------------------------------------------
Case 3 ; выход из программы
End
Case 333
del.s = GetGadgetText(#Strin_1)
del.s = ReplaceString(del.s, "=", "~") ; заменяем перед удалением "=" на "~"
If OpenPreferences("url.pcs")
PreferenceGroup("адрес")
RemovePreferenceKey(del.s) ; удаляем пункт, который загружен в #Strin_1
ClosePreferences()
EndIf
MessageRequester("Ссылка удалена !", " Внимание ! "+Chr(10)+"Возможно востановить ссылку, пока она"+Chr(10)+" загруженна в браузер", #MB_OK|#MB_ICONQUESTION)
EndSelect
EndIf
Search(Event) ; курсор рука над лого: поиск
If Event = #PB_Event_CloseWindow
Break
EndIf
ForEver
DataSection
Im0:
IncludeBinary "arrow_refresh.png"
Im0End:
Im1:
IncludeBinary "назад_1.png"
Im1End:
Im2:
IncludeBinary "вперёд_1.png"
Im2End:
Im3:
IncludeBinary "fon.png"
Im3End:
Im4:
IncludeBinary "yandex.png"
Im4End:
Im5:
IncludeBinary "google_1.png"
Im5End:
Im6:
IncludeBinary "cross.png"
Im6End:
EndDataSection