OSDN Git Service

businessのスペル修正
[gikonavigoeson/gikonavi.git] / BrowserRecord.pas
index ab6ee16..cd8ced2 100644 (file)
@@ -21,7 +21,7 @@ type
                FThread         : TThreadItem;
                FLastSize       : Integer;
                FRepaint        : Boolean;
-               FMovement       : string;                                                       ///< \83X\83N\83\8d\81[\83\8b\90æ\83A\83\93\83J\81[
+               //FMovement     : string;                                                       ///< \83X\83N\83\8d\81[\83\8b\90æ\83A\83\93\83J\81[
        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\82É\82Â\82¢\82Ä\82¢\82éFBrowser\82ð\8aO\82·
        procedure ReleaseBrowser( BRecord: TBrowserRecord);
 
 implementation
+
+uses
+       Forms, SysUtils;
+
 // *************************************************************************
 //! BrowserRecord\82É\82Â\82¢\82Ä\82¢\82éFBrowser\82ð\8aO\82·
 // *************************************************************************
@@ -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;
+// *************************************************************************
+//! \83u\83\89\83E\83U\82ð\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
+// *************************************************************************
+procedure TBrowserRecord.Move(const AName: string);
+var
+       top: Integer;
+       item: OleVariant;
+begin
+       //\83u\83\89\83E\83U\82ª\95t\82¢\82Ä\82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
+       if (Self.Browser <> nil) then begin
+               //\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Â
+               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;
+// *************************************************************************
+//! \83u\83\89\83E\83U\82ð\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
+// *************************************************************************
+procedure TBrowserRecord.Move(scroll: Integer);
+begin
+       //\83u\83\89\83E\83U\82ª\95t\82¢\82Ä\82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
+       if (Self.Browser <> nil) then begin
+               //\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Â
+               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\83A\83\93\83J\81[\92Ç\89Á
+procedure TBrowserRecord.IDAnchorPopup(Abody :string);
+const
+       OUTER_HTML = '<p id="idSearch"></p>';
+       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 := '<p id="idSearch" style="position:absolute;top:' + IntToStr(doc.Body.ScrollTop + 10) + 'px;right:5px;' //
+                                                       + 'background-color:window; border:outset 1px infobackground; z-index:10; overflow-y:auto; border-top:none">'
+                                                       + Abody + '</p>';
+                                               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 \8c\9f\8dõ\83_\83C\83A\83\8d\83O\8cÄ\82Ñ\8fo\82µ
+}
+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
+               //\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Â
+               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.