想将网页上的内容直接转换成图片。
解决方案 »
- 加了UAC,却看不到盾牌标志
- delphi怎么使用API函数!!
- 我想让RICHEDIT中的第一行文字渐变,下面代码为何只能改变最后一个。谢谢。
- 动态增加菜单问题
- 求 Bold for Delphi 哪里有下载啊?????
- 6.27日CSDN账号yaos千日生日庆贺,散分1000祝贺
- 哪位大侠能提供tree的实例不?up有分,谢谢...
- google现在被黑了,快看。。爱因斯坦生日。
- 求救:有一个数组要在两个应用程序中传递?
- 关于TListItem.Data的问题,我搜索以前的帖子,没找到,请各位帮忙!!!
- DBGrid不能显示数据
- 关于在Delphi中动态设置rave报表的一些问题,我被卡住了,寝室难安..请大家帮忙呀.........
在窗体上放一个Twebbrowser,一个edit用于记录URL,然后放置3个按钮,分别对应 button1 NAVIGATOR到EDIT中记录的URL,BUTTON2 将TWEBBROWSER中的页面另存为HTML文件 BUTTON3将页面导出成BMP文件
代码如下:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
b: TWebBrowser;
Button3: TButton;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
Uses ActiveX,MSHTML, ComCtrls;{$R *.dfm}function CapturePage(var bitmap : TBitmap) : integer;
var
ViewObject:IViewObject;
sourceDrawRect:TRect;
begin
result := -1;
if not assigned(bitmap) then
exit;
with form1.b do
begin
if assigned(Document) then
begin
try
Document.QueryInterface(IViewObject,ViewObject);
except
showmessage('DOCUMENT QUERY INTERFACE ERROR!');
exit;
end; if ViewObject<>nil then
begin
try
bitmap.Width := form1.b.Width;
bitmap.PixelFormat := pf24bit;
bitmap.Height:= form1.b.Height;
sourceDrawRect:=Rect(0,0,form1.b.Width,form1.b.Height);
ViewObject.Draw(DVASPECT_CONTENT,1,nil,nil,0,bitmap.canvas.Handle,@sourceDrawRect,nil,nil,0);
result := 0;
finally
ViewObject._Release;
end
end
else
result:=0;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
b.Navigate(edit1.text);
end;procedure TForm1.Button2Click(Sender: TObject);
var
HTMLDocument: IHTMLDocument2;
PersistFile: IPersistFile;
begin
HTMLDocument := b.Document as IHTMLDocument2;
PersistFile := HTMLDocument as IPersistFile;
savedialog1.Filter := 'HTML|*.html;*.htm';
if savedialog1.Execute then
begin
PersistFile.Save(StringToOleStr(savedialog1.FileName), System.True);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
bmp : Tbitmap;
begin
bmp := Tbitmap.Create;
try
try
CapturePage(bmp);
except
showmessage('error occur when CapturePage');
end; savedialog1.Filter := 'BMP|*.bmp';
if savedialog1.Execute then
begin
bmp.SaveToFile(savedialog1.FileName);
end;
finally
bmp.Free;
end;
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, OleCtrls, SHDocVw, Sockets, ExtCtrls,MSHTML,
ActiveX, JPEG;type
TForm1 = class(TForm)
Panel1: TPanel;
TcpServer1: TTcpServer;
WebBrowser: TWebBrowser;
Label1: TLabel;
edtURL: TEdit;
btnNavigate: TBitBtn;
btnSave: TBitBtn;
procedure btnNavigateClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnNavigateClick(Sender: TObject);
begin
WebBrowser.Navigate(edtURL.Text);
end;procedure TForm1.btnSaveClick(Sender: TObject);
var
Doc: IHTMLDocument2;
ViewObject: IViewObject;
sourceDrawRect: TRect;
a, getjpg: TBitMap;
i,j,k,m: integer;
pdest, psour: hbitmap;
jpg: tjpegimage;
begin
//获取WebBrowser的文档
Doc := WebBrowser.Document as IHTMLDocument2;
if Webbrowser.Document <> nil then
try
//获取文档的接口
webbrowser.Document.QueryInterface(IViewObject, ViewObject);
if ViewObject <> nil then
try
Doc.Get_ParentWindow.Scroll(0, 0); //跳到网页头
//建立一个Bitmap
getjpg := TBitMap.Create();
getjpg.PixelFormat := pf24bit;
getjpg.Height := doc.Body.getAttribute('scrollHeight', 0);
getjpg.Width := doc.Body.getAttribute('scrollwidth', 0);
pdest := getjpg.Canvas.Handle; //getjpg的handle
j := Trunc(doc.Body.getAttribute('ScrollHeight', 0) /
(doc.Body.getAttribute('offsetHeight', 0) - 20));
k := Trunc(doc.Body.getAttribute('Scrollwidth', 0) /
(doc.Body.getAttribute('offsetwidth', 0) - 20));
for i := 0 to k do
begin
for m := 0 to j + 1 do
begin
a := TBitMap.Create();
a.Height := doc.Body.getAttribute('offsetHeight', 0);
a.Width := doc.Body.getAttribute('offsetwidth', 0);
psour := a.Canvas.handle;
sourceDrawRect := Rect(0, 0, a.Width, a.Height);
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle, a.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
bitblt(pdest, doc.Body.getAttribute('scrollLeft', 0), doc.Body.getAttribute('Scrolltop', 0), a.Width, a.Height, psour, 2, 2, srccopy);
Doc.Get_ParentWindow.Scroll(doc.Body.getAttribute('scrollLeft', 0), doc.Body.getAttribute('offsetHeight', 0) + doc.Body.getAttribute('Scrolltop', 0) - GetSystemMetrics(SM_CXVSCROLL) - 24);
a.Free;
end;
Doc.Get_ParentWindow.Scroll(doc.Body.getAttribute('offsetwidth', 0) + doc.Body.getAttribute('scrollLeft', 0) - GetSystemMetrics(SM_CXVSCROLL) - 24, 0);
end;
jpg := tjpegimage.Create;
jpg.Assign(getjpg);
getjpg.Free;
jpg.SaveToFile('test.jpg');
jpg.Free;
finally
ViewObject._Release;
end;
except
end;
end;end.