Если не ошибаюсь, так - реализовывать абстрактные методы-события.
Код:
MODULE TestWeb;
IMPORT
Web := CtlSHDocVw, CtlT, StdLog;
TYPE
BrowserEvents = POINTER TO RECORD (Web.DWebBrowserEvents2) END;
VAR
w: Web.WebBrowser;
wEvents: BrowserEvents;
PROCEDURE (this: BrowserEvents) StatusTextChange* (Text: ARRAY OF CHAR);
BEGIN
StdLog.String("Statusbar text changed to " + ' "' + Text + '"');
StdLog.Ln;
END StatusTextChange;
PROCEDURE (this: BrowserEvents) ProgressChange* (Progress: INTEGER; ProgressMax: INTEGER), EMPTY;
... - все абстр. методы д.б. реализованы
PROCEDURE (this: BrowserEvents) PrivacyImpactedStateChange* (bImpacted: BOOLEAN), EMPTY;
PROCEDURE (this: BrowserEvents) NewWindow3* (VAR ppDisp: CtlT.Object; VAR Cancel: BOOLEAN; dwFlags: INTEGER; bstrUrlContext: ARRAY OF CHAR; bstrUrl: ARRAY OF CHAR);
(* A new, hidden, non-navigated WebBrowser window is needed. *)
BEGIN
StdLog.String("(NewWindow3): New WebBrowser is needed. ");
StdLog.String("Flags = "); StdLog.Int(dwFlags);
StdLog.String(', UrlContext = "' + bstrUrlContext + '"');
StdLog.String(', Url = "' + bstrUrl + '"');
StdLog.Ln;
END NewWindow3;
PROCEDURE Do*;
BEGIN
w.PUTVisible(TRUE);
w.Navigate("http://oberoncore.ru/", NIL, NIL, NIL, NIL);
END Do;
PROCEDURE T1*;
BEGIN
w := Web.NewInternetExplorer();
NEW(wEvents);
CtlT.Connect(wEvents, w);
END T1;
CLOSE
CtlT.Disconnect(wEvents, w)
END TestWeb.
^Q TestWeb.T1
^Q TestWeb.Do