{"id":787,"date":"2008-05-27T09:21:04","date_gmt":"2008-05-27T09:21:04","guid":{"rendered":"http:\/\/6teen.ru\/?p=724"},"modified":"2008-05-27T09:21:04","modified_gmt":"2008-05-27T09:21:04","slug":"7868","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=787","title":{"rendered":"\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b \u0438\u0437 TWebBrowser"},"content":{"rendered":"<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b \u0438\u0437 TWebBrowser<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b \u0438\u0437 TWebBrowser\n\nTWebBrowser.Document \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f IPersistStreamInit \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 Save(). \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u044d\u0442\u043e \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u0432 IStream. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f TStreamAdapter.\n\n\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b IPersistStreamInit \u0438 IStream \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432\u043d\u0443\u0442\u0440\u0438 ActiveX\nunit main;\n\ninterface\n\nuses\n  Windows, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, OleCtrls,\n  SHDocVw, ExtCtrls;\n\ntype\n  TForm1 = class(TForm)\n    WebBrowser1: TWebBrowser;\n    SaveDialog1: TSaveDialog;\n    Panel1: TPanel;\n    Button1: TButton;\n    Edit1: TEdit;\n    Label1: TLabel;\n    procedure WebBrowser1NavigateComplete2(Sender: TObject;\n      const pDisp: IDispatch; var URL: OleVariant);\n    procedure WebBrowser1BeforeNavigate2(Sender: TObject;\n      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,\n      Headers: OleVariant; var Cancel: WordBool);\n    procedure Edit1KeyDown(Sender: TObject; var Key: Word;\n      Shift: TShiftState);\n    procedure WebBrowser1StatusTextChange(Sender: TObject;\n      const Text: WideString);\n    procedure WebBrowser1TitleChange(Sender: TObject;\n      const Text: WideString);\n    procedure Button1Click(Sender: TObject);\n  private\n    procedure DoNavigateURL(const URLString: string);\n    procedure SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser);\n  end;\n\nvar\n  Form1: TForm1;\n\nimplementation\n\nuses ActiveX;\n\n{$R *.DFM}\n\nprocedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;\n  const pDisp: IDispatch; var URL: OleVariant);\nbegin\n  Button1.Enabled := True;\nend;\n\nprocedure TForm1.WebBrowser1BeforeNavigate2(Sender: TObject;\n  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,\n  Headers: OleVariant; var Cancel: WordBool);\nbegin\n  Button1.Enabled := False;\nend;\n\nprocedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;\n  const Text: WideString);\nbegin\n  Label1.Caption := Text;\nend;\n\nprocedure TForm1.WebBrowser1TitleChange(Sender: TObject;\n  const Text: WideString);\nbegin\n  Caption := Text;\nend;\n\nprocedure TForm1.DoNavigateURL(const URLString: string);\nvar\n  VUrl: OleVariant;\nbegin\n  if URLString = '' then\n    Exit;\n  VUrl := URLString;\n  WebBrowser1.Navigate2(VUrl);\nend;\n\nprocedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;\n  Shift: TShiftState);\nbegin\n  if Key = VK_RETURN then\n  begin\n    Key := 0;\n    TEdit(Sender).SelectAll;\n    DoNavigateURL(TEdit(Sender).Text);\n  end;\nend;\n\nprocedure TForm1.SaveHTMLSourceToFile(const FileName: string; WB: TWebBrowser);\nvar\n  PersistStream: IPersistStreamInit;\n  FileStream: TFileStream;\n  Stream: IStream;\n  SaveResult: HRESULT;\nbegin\n  PersistStream := WB.Document as IPersistStreamInit;\n  FileStream := TFileStream.Create(FileName, fmCreate);\n  try\n    Stream := TStreamAdapter.Create(FileStream, soReference) as IStream;\n    SaveResult := PersistStream.Save(Stream, True);\n    if FAILED(SaveResult) then\n      MessageBox(Handle, 'Fail to save HTML source', 'Error', 0);\n  finally\n    { we are passing soReference to TStreamAdapter contructor parameter,\n      it is our reponsibility to destroy the stream object. }\n    FileStream.Free;\n  end;\nend;\n\nprocedure TForm1.Button1Click(Sender: TObject);\nbegin\n  if SaveDialog1.Execute then\n    SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1);\nend;\nend.\n\n\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u043c \u0432\u0441\u0435\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (.CSS, JPG, GIF Etc..):\n\ntry\n       WebBrowser1.ExecWB(4, 0);\n     except\n       on E: Exception do  msError:=true;\n     end;\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b \u0438\u0437 TWebBrowser<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[169,386],"tags":[592,991,1773,1029],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/787"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=787"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/787\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=787"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}