Использование 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 для реализации вашей собственной строки состояния.

Загрузить  IEOCX.ZIP (271K)


Back to my home page, my Clarion page, or send me mail at paula@attglobal.net

 

1