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;
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·
// *************************************************************************
// *************************************************************************
destructor TBrowserRecord.Destroy;
var
- doc :OleVariant;
+ doc :IHTMLDocument2;
begin
if Self.FEvent <> nil then
Self.FEvent.Free;
+
if Self.FBrowser <> nil then begin
if Self.Thread <> nil then begin
//\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Å
//\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
- if Self.FBrowser.OleObject.Document.documentElement.innerText <> '' then begin
- doc := Idispatch( olevariant(Self.FBrowser.ControlInterface).Document) as IHTMLDocument2;
- Self.Thread.ScrollTop := doc.Body.ScrollTop;
- end;
+
+ try
+ doc := Self.FBrowser.ControlInterface.Document as IHTMLDocument2;
+ if Assigned(doc) then begin
+ if (doc as IHTMLDocument3).documentElement.innerText <> '' then begin
+ Self.Thread.ScrollTop := (doc.body as IHTMLElement2).scrollTop;
+ end;
+ end;
+ except
+ 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;
+ doc : OleVariant;
+begin
+ //\83u\83\89\83E\83U\82ª\95t\82¢\82Ä\82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
+ if not Assigned(Self.Browser) then
+ Exit;
+
+ //\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
+ doc := Self.Browser.OleObject.Document;
+ top := 0;
+ item := doc.anchors.item(OleVariant(AName));
+ item.focus();
+ repeat
+ top := top + item.offsetTop;
+ item := item.offsetParent;
+ until AnsiCompareText(item.tagName, 'body' ) = 0;
+ doc.body.scrollTop := top;
+ except
+ end;
+end;
+// *************************************************************************
+//! \83u\83\89\83E\83U\82ð\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
+// *************************************************************************
+procedure TBrowserRecord.Move(scroll: Integer);
+var
+ doc: IHTMLDocument2;
+begin
+ //\83u\83\89\83E\83U\82ª\95t\82¢\82Ä\82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
+ if not Assigned(Self.Browser) then
+ Exit;
+
+ //\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
+ doc := Self.Browser.ControlInterface.Document as IHTMLDocument2;
+ (doc.body as IHTMLElement2).scrollTop := (doc.body as IHTMLElement2).scrollTop + scroll;
+ except
+ 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;
+ doc : IHTMLDocument2;
+ nCSS : string;
+begin
+ if not Assigned(Self.Browser) then
+ Exit;
+
+ try
+ doc := Self.Browser.ControlInterface.Document as IHTMLDocument2;
+ if not Assigned(doc) then
+ Exit;
+
+ firstElement := doc.all.item('idSearch', 0) as IHTMLElement;
+ if not Assigned(firstElement) then
+ Exit;
+ try
+ if Length(Abody) > 0 then begin
+ nCSS := '<p id="idSearch" style="position:absolute;top:' + IntToStr((doc.body as IHTMLElement2).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;
+ except
+ firstElement.outerHTML := OUTER_HTML;
+ firstElement.style.visibility := HIDDEN;
+ end;
+
+ except
+ 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;
+begin
+ if Assigned(Self.Browser) then begin
+ try
+ CmdTarget := Self.Browser.ControlInterface.Document as IOleCommandTarget;
+ if Assigned(CmdTarget) then begin
+ CmdTarget.Exec(@CGID_WebBrowser, HTMLID_FIND, 0, vaIn, vaOut);
+ end;
+ except
+ end;
+ end;
+end;
end.