X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=BrowserRecord.pas;h=cd8ced2cd4cf55d0de2e41fd93be9c84141e0317;hb=e2d10531cf11e545040d8b9cd764a5710cf0c437;hp=ab6ee163e190beba73d8258e4f618770fffbe808;hpb=437dd08c49f4c56911cec8db5c55c0e0a268dc89;p=gikonavigoeson%2Fgikonavi.git diff --git a/BrowserRecord.pas b/BrowserRecord.pas index ab6ee16..cd8ced2 100644 --- a/BrowserRecord.pas +++ b/BrowserRecord.pas @@ -21,7 +21,7 @@ type FThread : TThreadItem; FLastSize : Integer; FRepaint : Boolean; - FMovement : string; ///< ƒXƒNƒ[ƒ‹æƒAƒ“ƒJ[ + //FMovement : string; ///< ƒXƒNƒ[ƒ‹æƒAƒ“ƒJ[ public destructor Destroy; override; property Event : THTMLDocumentEventSink read FEvent write FEvent; @@ -29,12 +29,20 @@ type property Thread : TThreadItem read FThread write FThread; property LastSize : Integer read FLastSize write FLastSize; property Repaint : Boolean read FRepaint write FRepaint; - property Movement : string read FMovement write FMovement; + //property Movement : string read FMovement write FMovement; + procedure Move(const AName: string); overload; + procedure Move(scroll: Integer); overload; + procedure IDAnchorPopup(Abody :string); + procedure OpenFindDialog; end; // BrowserRecord‚ɂ‚¢‚Ä‚¢‚éFBrowser‚ðŠO‚· procedure ReleaseBrowser( BRecord: TBrowserRecord); implementation + +uses + Forms, SysUtils; + // ************************************************************************* //! BrowserRecord‚ɂ‚¢‚Ä‚¢‚éFBrowser‚ðŠO‚· // ************************************************************************* @@ -67,11 +75,146 @@ begin Self.Thread.ScrollTop := doc.Body.ScrollTop; end; end; - //TOleControl(Self.FBrowser).Visible := false; ShowWindow(Self.FBrowser.Handle, SW_HIDE); end; end; +// ************************************************************************* +//! ƒuƒ‰ƒEƒU‚ðƒXƒNƒ[ƒ‹‚³‚¹‚é +// ************************************************************************* +procedure TBrowserRecord.Move(const AName: string); +var + top: Integer; + item: OleVariant; +begin + //ƒuƒ‰ƒEƒU‚ª•t‚¢‚Ä‚é‚Æ‚«‚¾‚¯ˆ—‚·‚é + if (Self.Browser <> nil) then begin + //ƒuƒ‰ƒEƒU‚ªƒf[ƒ^‚̓ǂݍž‚Ý’†‚ÌŽž‚͓ǂݍž‚Ý‚ð‘Ò‚Â + while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and + (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin + Sleep(1); + Application.ProcessMessages; + end; + + try + top := 0; + item := OleVariant( Self.Browser.Document as IHTMLDocument2) + .anchors.item(OleVariant(AName)); + item.focus(); + repeat + top := top + item.offsetTop; + item := item.offsetParent; + until AnsiCompareText(item.tagName, 'body' ) = 0; + OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop := top; + except + end; + end; +end; +// ************************************************************************* +//! ƒuƒ‰ƒEƒU‚ðƒXƒNƒ[ƒ‹‚³‚¹‚é +// ************************************************************************* +procedure TBrowserRecord.Move(scroll: Integer); +begin + //ƒuƒ‰ƒEƒU‚ª•t‚¢‚Ä‚é‚Æ‚«‚¾‚¯ˆ—‚·‚é + if (Self.Browser <> nil) then begin + //ƒuƒ‰ƒEƒU‚ªƒf[ƒ^‚̓ǂݍž‚Ý’†‚ÌŽž‚͓ǂݍž‚Ý‚ð‘Ò‚Â + while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and + (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin + Sleep(1); + Application.ProcessMessages; + end; + + try + OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop + := OleVariant(Self.Browser.Document as IHTMLDocument2).body.scrollTop + + scroll; + except + end; + end; +end; +//IDƒAƒ“ƒJ[’ljÁ +procedure TBrowserRecord.IDAnchorPopup(Abody :string); +const + OUTER_HTML = '

'; + HIDDEN = 'hidden'; +var + firstElement: IHTMLElement; + document: IHTMLDocument2; + docAll: IHTMLElementCollection; + doc : Variant; + nCSS : string; +begin + if Self.Browser <> nil then begin + try + document := Self.Browser.Document as IHTMLDocument2; + + if Assigned(document) then begin + docAll := document.all; + firstElement := docAll.item('idSearch', 0) as IHTMLElement; + if (Assigned(firstElement)) then begin + if Length(Abody) > 0 then begin + doc := Idispatch( olevariant(Self.Browser.ControlInterface).Document) as IHTMLDocument2; + nCSS := '

' + + Abody + '

'; + firstElement.outerHTML := nCSS; + firstElement.style.visibility := 'visible'; + end else begin + firstElement.outerHTML := OUTER_HTML; + firstElement.style.visibility := HIDDEN; + end; + end else if (Assigned(firstElement)) then begin + firstElement.outerHTML := OUTER_HTML; + firstElement.style.visibility := HIDDEN; + end; + end; + except + end; + end; +end; +{ +\brief ŒŸõƒ_ƒCƒAƒƒOŒÄ‚яo‚µ +} +procedure TBrowserRecord.OpenFindDialog(); +const + CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}'; + HTMLID_FIND = 1; +var + CmdTarget : IOleCommandTarget; + vaIn, vaOut: OleVariant; + PtrGUID: PGUID; +begin + if (Self.Browser <> nil) and (Self.Browser.Document <> nil) then begin + //ƒuƒ‰ƒEƒU‚ªƒf[ƒ^‚̓ǂݍž‚Ý’†‚ÌŽž‚͓ǂݍž‚Ý‚ð‘Ò‚Â + while (Self.Browser.ReadyState <> READYSTATE_COMPLETE) and + (Self.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin + Sleep(1); + Application.ProcessMessages; + end; + vaIn := 0; + vaOut := 0; + New(PtrGUID); + PtrGUID^ := CGID_WebBrowser; + try + try + if Self.Browser.Document + .QueryInterface(IOleCommandTarget, CmdTarget) + = S_OK then begin + if CmdTarget <> nil then begin + try + CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut); + finally + CmdTarget._Release; + end; + end; + end; + except + end; + finally + Dispose(PtrGUID); + end; + end; +end; end.