如何生成*.JPG圖片(200分)急!!! ( 积分: 100 )

  • 主题发起人 主题发起人 gndq
  • 开始时间 开始时间
G

gndq

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在delphi中開發實現把系統中的報表抓成*.JPG的圖片保存下來;
 
如何在delphi中開發實現把系統中的報表抓成*.JPG的圖片保存下來;
 
大多报表控件都支持,如果想自己写,可以按下面的代码

http://www.2ccc.com/article.asp?articleid=1423

原理类似,让报表滚动就可以了

procedure TForm1.Button1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
ViewObject: IViewObject;
sourceDrawRect: TRect;
a, getjpg: TBitMap;
i, m: integer;
pdest, psour: hbitmap;
jpg: tjpegimage;
begin
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); //跳到网页头
getjpg := TBitMap.Create();
getjpg.PixelFormat := pf24bit;
getjpg.Height := doc.Body.getAttribute('scrollHeight', 0);
getjpg.Width := doc.Body.getAttribute('scrollwidth', 0);
pdest := getjpg.Canvas.Handle;
m := Trunc(doc.Body.getAttribute('ScrollHeight', 0) / (doc.Body.getAttribute('offsetHeight', 0) - 20));
i := Trunc(doc.Body.getAttribute('Scrollwidth', 0) / (doc.Body.getAttribute('offsetwidth', 0) - 20));
for i := 0 to i do
begin
for m := 0 to m + 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('c:/test.jpg');
jpg.Free;
finally
ViewObject._Release;
end;
except
end;
end;
 
如果是FR3.0以上的报表,加上frxJPEGExport1控件后,就可直接另存出来就可以了
 
ReportMachine 支持此功能,可按屏幕出报表的
 
copy屏幕

-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
procedure TForm1.Button1Click(Sender: TObject);
var
dc:hdc;
mycanvas:TCanVas;
mybitmap:TBitmap;
begin
application.Minimize;
mycanvas:=TCanvas.Create;
mybitmap:=tbitmap.Create;
dc:=getdc(0);
try
myCanvas.Handle := DC;
with Screen do
begin
MyBitmap.Width := Width;
MyBitmap.Height := Height;
MyBitmap.Canvas.CopyRect(Rect(0,0,Width,Height),myCanvas,Rect(0,0,Width,Height));
image1.Picture.Bitmap.Assign(mybitmap);
end;
finally
releasedc(0,dc);
mycanvas.Free;
mybitmap.Free;
end;
application.Restore;
end;
 
无泪的还差一步,就是要滚屏,加上滚屏就完美了(但愿没说错,不知道Canvas里面包含了滚动条的东西没有)
 
我的報表是第三方控件下的水晶報表
 
那就想办法让报表滚动,然后用我转的办法,形成图片,你可以把那个例子下载下来,他就是滚动WebBrower,然后把里面的东西存出来的,手里没有水晶报表,你自己调一下,原理差不多
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部