抓图---高手请进(100分)

  • 主题发起人 主题发起人 tg
  • 开始时间 开始时间
T

tg

Unregistered / Unconfirmed
GUEST, unregistred user!
本人正在用Deplhi的Servers下组件控制Word,希望对Word的Document进行拍照。
(不要把标题栏都拍照下来,只要拍照Word打开的Document部分)
详细的想实现这样一个功能:
用Deplhi的Servers下组件WordApplication打开Word.
WordApplication.Visible:=False,也就是让Word本身隐藏.
打开一个文档,对当前页(Page)进行"拍照"(就是变为图片),
Dephi提供了Servers组件XX.CopyAsPicture的功能,不过你不妨一试,拍下来的图片效果非常差,象是有损压缩的,
请问采用什么技术能把当前页抓拍下来? 幕后拍照.
请高手指点!
必有重谢!
 
自己写算法啊,抓图前计算好需要抓的区域就好了。
 
那么针对一个窗口进行拍照如何做?
进一步,对窗口中的子窗口(Word中的Document)如何计算?
再进一步,隐藏的窗口如何拍照?
 
直接显示出来不就OK了吗?何必多一个步骤呢!
 
借花献佛,我以前问过的帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1188472
 
我估计可能用到
BitBlt(

HDC hdcDest, // handle to destination device context
int nXDest, // x-coordinate of destination rectangle's upper-left corner
int nYDest, // y-coordinate of destination rectangle's upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
HDC hdcSrc, // handle to source device context
int nXSrc, // x-coordinate of source rectangle's upper-left corner
int nYSrc, // y-coordinate of source rectangle's upper-left corner
DWORD dwRop // raster operation code
);
这里的 nXSrc和nYSrc如果采用Word左上角的坐标,将拍照整个word,把标题栏都拍照进去了,希望能精确拍到打开的Document,如何计算这个坐标,以及大小。
 
等这么久了,这问题还真难道重英雄了吗?!!
我再加100分,相信重赏之下毕有勇士!
 
我再加100分,希望有人回答我的问题。
 
Delphi盒子上有一个类似的代码 www.2ccc.com 搜索下就有 不过现在网站在弄服务器 等会才能上的
 
我对这类问题有个代码,给我你的电邮,我发给你。
 
To wzhhzw:
hbliu008@163.com

非常感谢,我等了很久了。。
 
也发我一份吧
谢谢!
ajunshi@163.com
 
To wzhhzw:
等待您的来信。。。
 
To wzhhzw:
等待是种煎熬,真是望穿秋水啊。。。。
真希望您不是说说玩的。

还是希望哪位英雄赐教!
 
我也遇到类式的问题,正愁没有地方找人来解决!如果有大虾能提供一二信息,小弟在此感谢了!
我的 e-mail : hejunwu201@hotmail.com
再次感谢了!
 
再加100分!!我基分多,我给的起!
只要是能解决这问题的就300分奉送!
用拍照函数进行对Word拍照
这里的 nXSrc和nYSrc如果采用Word左上角的坐标,则将拍照整个word,把标题栏都拍照进去了,希望能精确拍到打开的Document,而不要那些标题栏等,如何计算这个坐标,以及大小。
或者采用别的办法,解决都可以给分!
 
给你一段代码抓指定窗口的图像
procedure ScreenShot(hWindow: HWND; bm: TBitmap);
var
Left, Top, Width, Height: Word;
R: TRect;
dc: HDC;
lpPal: PLOGPALETTE;
begin
if not IsWindow(hWindow) then Exit;
GetWindowRect(hWindow, R);
Left := R.Left;
Top := R.Top;
Width := R.Right - R.Left;
Height := R.Bottom - R.Top;
bm.Width := Width;
bm.Height := Height;
dc := GetDc(0);
if (dc = 0) the begin
Exit;
end;
if (GetDeviceCaps(dc, RASTERCAPS) and
RC_PALETTE = RC_PALETTE) then begin
GetMem(lpPal, SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)));
FillChar(lpPal^,SizeOf(TLOGPALETTE) +(255 * SizeOf(TPALETTEENTRY)),#0);
lpPal^.palVersion := $300;
lpPal^.palNumEntries := GetSystemPaletteEntries(dc,0,256,lpPal^.palPalEntry);
if (lpPal^.PalNumEntries <> 0) then begin
bm.Palette := CreatePalette(lpPal^);
end;
FreeMem(lpPal, SizeOf(TLOGPALETTE) + (255 * SizeOf(TPALETTEENTRY)));
end;
BitBlt(bm.Canvas.Handle,0,0,Width,Height,Dc,Left,Top,SRCCOPY);
ReleaseDc(0, dc);
end;
 
再补充一下将鼠标移到word的文档区,
var
p : point;
h : handle;
b : tbitmap;
begin
getcursorpoint(p);
h := getWindowFromPoint(P);
b := tbitmap.create;
ScreenShot(h,b);
end;
 
好贴子好问题
帮你顶,收藏
 
To Boot.ini:
首先感谢您热忱的解答我的问题,并且效果明显,在拍照Word的时候,如果是普通视图方式,可以说是十分满意,达到理想效果,即没有把标题栏,标尺拍摄进去。
但是在Word的“页面视图”方式下(也是我关键想要的效果),文档页面如果尺寸较小,那么窗口中除了,一页页的文档外,就是灰色的Word背景,我希望只针对一个特定的文档页面拍照,如果计算,如果拍照???还望不吝赐教!

(附:修正第二个函数的小错误
procedure TForm1.Timer1Timer(Sender: TObject);
var
p : TPoint;
h : Thandle;
Begin
Timer1.Enabled:=False;
getcursorpos(p);
h := WindowFromPoint(P); //修改BUG
ScreenShot(h,image1.Picture.Bitmap);
end;
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
901
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
961
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部