6 Windows, OleCtrls, ActiveX,
14 BoardGroup, HTMLDocumentEvent;
17 TBrowserRecord = class( TObject )
19 FBrowser : TWebBrowser;
20 FEvent: THTMLDocumentEventSink; ///<
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
21 FThread : TThreadItem;
24 //FMovement : string; ///<
\83X
\83N
\83\8d\81[
\83\8b\90æ
\83A
\83\93\83J
\81[
26 destructor Destroy; override;
27 property Event : THTMLDocumentEventSink read FEvent write FEvent;
28 property Browser : TWebBrowser read FBrowser write FBrowser;
29 property Thread : TThreadItem read FThread write FThread;
30 property LastSize : Integer read FLastSize write FLastSize;
31 property Repaint : Boolean read FRepaint write FRepaint;
32 //property Movement : string read FMovement write FMovement;
33 procedure Move(const AName: string); overload;
34 procedure Move(scroll: Integer); overload;
35 procedure IDAnchorPopup(Abody :string);
36 procedure OpenFindDialog;
38 // BrowserRecord
\82É
\82Â
\82¢
\82Ä
\82¢
\82éFBrowser
\82ð
\8aO
\82·
39 procedure ReleaseBrowser( BRecord: TBrowserRecord);
46 // *************************************************************************
47 //! BrowserRecord
\82É
\82Â
\82¢
\82Ä
\82¢
\82éFBrowser
\82ð
\8aO
\82·
48 // *************************************************************************
49 procedure ReleaseBrowser( BRecord: TBrowserRecord);
51 if BRecord <> nil then begin
52 BRecord.Browser := nil;
53 if BRecord.Event <> nil then begin
57 BRecord.Repaint := true;
60 // *************************************************************************
61 //! BrowserRecord
\82Ì
\83f
\83X
\83g
\83\89\83N
\83^
62 // *************************************************************************
63 destructor TBrowserRecord.Destroy;
67 if Self.FEvent <> nil then
69 if Self.FBrowser <> nil then begin
70 if Self.Thread <> nil then begin
71 //
\83^
\83u
\82Ì
\95\9c\8c³
\82Å
\95\9c\8c³
\82³
\82ê
\82½
\83X
\83\8c\82Í
\81A
\95`
\89æ
\82³
\82ê
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\82ª
\82 \82é
\82Ì
\82Å
72 //
\82»
\82Ì
\82Æ
\82«
\82Ì
\83X
\83N
\83\8d\81[
\83\8b\97Ê
\82ð
\95Û
\91¶
\82µ
\82Ä
\82µ
\82Ü
\82¤
\82Æ
\83g
\83b
\83v
\82É
\96ß
\82Á
\82Ä
\82µ
\82Ü
\82¤
\81B
73 if Self.FBrowser.OleObject.Document.documentElement.innerText <> '' then begin
74 doc := Idispatch( olevariant(Self.FBrowser.ControlInterface).Document) as IHTMLDocument2;
75 Self.Thread.ScrollTop := doc.Body.ScrollTop;
78 ShowWindow(Self.FBrowser.Handle, SW_HIDE);
82 // *************************************************************************
83 //!
\83u
\83\89\83E
\83U
\82ð
\83X
\83N
\83\8d\81[
\83\8b\82³
\82¹
\82é
84 // *************************************************************************
85 procedure TBrowserRecord.Move(const AName: string);
90 //
\83u
\83\89\83E
\83U
\82ª
\95t
\82¢
\82Ä
\82é
\82Æ
\82«
\82¾
\82¯
\8f\88\97\9d\82·
\82é
91 if (Self.Browser <> nil) then begin
92 //
\83u
\83\89\83E
\83U
\82ª
\83f
\81[
\83^
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\92\86\82Ì
\8e\9e\82Í
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\91Ò
\82Â
93 while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
94 (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
96 Application.ProcessMessages;
101 item := OleVariant( Self.Browser.Document as IHTMLDocument2)
102 .anchors.item(OleVariant(AName));
105 top := top + item.offsetTop;
106 item := item.offsetParent;
107 until AnsiCompareText(item.tagName, 'body' ) = 0;
108 OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop := top;
113 // *************************************************************************
114 //!
\83u
\83\89\83E
\83U
\82ð
\83X
\83N
\83\8d\81[
\83\8b\82³
\82¹
\82é
115 // *************************************************************************
116 procedure TBrowserRecord.Move(scroll: Integer);
118 //
\83u
\83\89\83E
\83U
\82ª
\95t
\82¢
\82Ä
\82é
\82Æ
\82«
\82¾
\82¯
\8f\88\97\9d\82·
\82é
119 if (Self.Browser <> nil) then begin
120 //
\83u
\83\89\83E
\83U
\82ª
\83f
\81[
\83^
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\92\86\82Ì
\8e\9e\82Í
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\91Ò
\82Â
121 while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
122 (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
124 Application.ProcessMessages;
128 OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop
129 := OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop
136 //ID
\83A
\83\93\83J
\81[
\92Ç
\89Á
137 procedure TBrowserRecord.IDAnchorPopup(Abody :string);
139 OUTER_HTML = '<p id="idSearch"></p>';
142 firstElement: IHTMLElement;
143 document: IHTMLDocument2;
144 docAll: IHTMLElementCollection;
148 if Self.Browser <> nil then begin
150 document := Self.Browser.Document as IHTMLDocument2;
152 if Assigned(document) then begin
153 docAll := document.all;
154 firstElement := docAll.item('idSearch', 0) as IHTMLElement;
155 if (Assigned(firstElement)) then begin
156 if Length(Abody) > 0 then begin
157 doc := Idispatch( olevariant(Self.Browser.ControlInterface).Document) as IHTMLDocument2;
158 nCSS := '<p id="idSearch" style="position:absolute;top:' + IntToStr(doc.Body.ScrollTop + 10) + 'px;right:5px;' //
159 + 'background-color:window; border:outset 1px infobackground; z-index:10; overflow-y:auto; border-top:none">'
161 firstElement.outerHTML := nCSS;
162 firstElement.style.visibility := 'visible';
164 firstElement.outerHTML := OUTER_HTML;
165 firstElement.style.visibility := HIDDEN;
167 end else if (Assigned(firstElement)) then begin
168 firstElement.outerHTML := OUTER_HTML;
169 firstElement.style.visibility := HIDDEN;
177 \brief
\8c\9f\8dõ
\83_
\83C
\83A
\83\8d\83O
\8cÄ
\82Ñ
\8fo
\82µ
179 procedure TBrowserRecord.OpenFindDialog();
181 CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
184 CmdTarget : IOleCommandTarget;
185 vaIn, vaOut: OleVariant;
188 if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin
189 //
\83u
\83\89\83E
\83U
\82ª
\83f
\81[
\83^
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\92\86\82Ì
\8e\9e\82Í
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\91Ò
\82Â
190 while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and
191 (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
193 Application.ProcessMessages;
198 PtrGUID^ := CGID_WebBrowser;
201 if Self.Browser.Document
202 .QueryInterface(IOleCommandTarget, CmdTarget)
204 if CmdTarget <> nil then begin
206 CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut);