Использование IE OCX в программах Clarion
Интернет Эксплорер 4.0 (может быть даже 3.0) и выше
поставляется с IE OCX, который вы можете
использовать в приложениях Clarion. Для чего вы
будете его использовать (просмотр веб-а и
реализация HTML-помощи это первое что приходит в
голову), это зависит от вас. Вы можете
использовать его в любом окне Clarion программы.
IE OCX это чистый браузер - нет панели инструментов,
нет меню, нет кнопок back/forward/home/search. Это
остается для вас, если вы решите их реализовать.
Микрософт полностью документировал все его
свойства, методы и события в MSDN и в веб-е по адресу
http://msdn.microsoft.com/workshop/browser/WebBrowser/RefList_VB.asp
, или на CD версии: Platform SDK-> Web Services -> Workshop -> Reusing
Browser Technology -> Using the WebBrowser control.
Браузер, в его простейшей форме, является обычным
OLE контролом в окне Clarion:
Window WINDOW('Alt-F4 to exit'),AT(,,311,216),CENTER,IMM,TIMER(100),GRAY,RESIZE
OLE,AT(0,19,310,161),USE(?Ole1),CREATE('Shell.Explorer.2'),COMPATIBILITY(020H),AUTOSIZE
END
END
Вы можете вызывать его методы и свойства при помощи обычного (головоломного) синтаксиса Clarion OCX:
?ole1{'Property'} = Value
?ole1{'MethodName'}
В моем примере, я не использую никаких OCX callback
процедур, потому что имею отрицательный опыт
работы с ними в течении нескольких лет, и не верю,
что они работают как надо. Вы можете, конечно,
реализовать их, либо обойтись без них - я оставляю
выбор за вами.
Первое, что мы должны сделать, это включить OCX.CLW в
наш global map. Хотя мы и не собираемся вызывать
никаких подключаемых при этом процедур,
некоторые OCX, которые я применял раньше, не
работают если не сделать этого.
program
map
include('ocx.clw')
end
После этого мы обьявляем глобальную переменную для хранения имени URL и затем обьявляем окно. Обьявление окна содержит также поле ввода для ручного ввода URL, и несколько кнопок для того чтобы показать некоторые методы OCX.
loc:url string(200) Window WINDOW('Alt-F4 to exit'),AT(,,311,216),CENTER,IMM,TIMER(100),GRAY,RESIZE ENTRY(@s200),AT(36,5,228,10),USE(Loc:URL) BUTTON('&Go'),AT(273,5,32,11),USE(?Go) PROMPT('Address'),AT(3,5),USE(?Prompt1) OLE,AT(0,19,310,161),USE(?Ole1),CREATE('Shell.Explorer.2'),COMPATIBILITY(020H),AUTOSIZE END BUTTON('&Back'),AT(5,191,32,14),USE(?GoBack) BUTTON('&Forward'),AT(39,191,32,14),USE(?GoForward) BUTTON('&Home'),AT(72,191,32,14),USE(?GoHome) BUTTON('&Search'),AT(106,191,32,14),USE(?Search) BUTTON('&Quit'),AT(277,191,32,14),USE(?Quit) END
Код для запуска окна довольно прост. Но сначала несколько замечаний:
1) Я поставил в окне 1-секундный таймер, чтобы изменять поле ввода с URL текущей страницы, так чтобы после перехода по ссылке URL также изменялся.
2) Когда окно открывается, я принимаю стартовое положение браузера (в данном случае это бастион всемирного сбора новостей, CNN).
3) Когда ввод в поле ввода завершается, или пользователь нажимает кнопку 'Go', мы заставляем OCX открыть новое окно
code
open(window)
accept
case event()
of event:timer
if field() <> ?loc:url
loc:url = ?ole1{'LocationURL'}
display(?loc:url)
end
of event:openwindow
loc:url = 'www.cnn.com'
post(event:accepted,?Loc:url)
of event:accepted
case accepted()
of ?quit
break
of ?go
post(event:accepted,?Loc:url)
of ?loc:url
?ole1{'Navigate(URL="' & Clip(loc:url) & '",Flags=14)'}
of ?Search
?ole1{'GoSearch'}
of ?gohome
?ole1{'GoHome'}
of ?goback
?ole1{'GoBack'}
of ?goforward
?ole1{'GoForward'}
end
end
end
close(window)
Пока в нашем приложении нет статус-бара,
который полезен для отображения процесса
загрузки больших страниц. Вы можете использовать
OCX callback с событиями ProgressChange / DocumentComplete и DownloadBegin /
DownloadComplete для реализации вашей собственной
строки состояния.
Back to my home page, my Clarion page, or send me mail at paula@attglobal.net