起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: lizehua1394

【结贴】获取文档预览图片遇到的问题

[复制链接]
 楼主| 发表于 2009-4-20 14:57:21 | 显示全部楼层
DocVIew的OpenMode设置为Preview时, DocView上的wincontrol控件,找到两个TPrintPreView和TPaperPreView两个对象, 但是 试了下他们的方法,都行不通
回复 支持 反对

使用道具 举报

发表于 2009-4-20 14:59:47 | 显示全部楼层
你现在的代码是什么样子的?并把操作界面的截图看下,是否是你抓图是正在加载,而界面显示时正常的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 15:03:57 | 显示全部楼层
这些都考虑到了,延迟了时间, 可以确定,加载预览图片是在窗体打开前是不执行的
回复 支持 反对

使用道具 举报

发表于 2009-4-20 15:06:21 | 显示全部楼层
No.12

你现在的代码是什么样子的?并把操作界面的截图看下。如果你问题很急,就配合下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 15:08:24 | 显示全部楼层
不好意思,我只是觉得问题已经很明确了,代码如下
procedure  TArchivsFromExist.SaveSheetPicToStream(ASheetName,ASheetURL: string;AList: TStringList);
var
  lBitMap: TBitMap;
  lJPG: TJPEGImage;
  lWidth,lHeight: Integer;
  lSheet: TSheetDoc;
  lDocID: string;
  lPaperView: TPaperPreView;
  lNextbtn: TSpeedButton;
  I:Integer;
begin
I := 1;
try
   lDocID := SysUtils.UpperCase(ASheetURL);
   jsCommon.splitStr(SysUtils.UpperCase(FInfoURL)+'\',lDocID);
   FForm.DocView.DocClassID := lDocID;
   lSheet := FForm.DocView.Doc as TSheetDoc;
   lPaperView := TWinControl(TWinControl(TWinControl(FForm.DocView.Controls[0]).Controls[0]).Controls[2]).Controls[0] as TPaperPreView;
   FForm.DocView.Width := lPaperView.Width;
   FForm.DocView.Height := lPaperView.Height;
   lNextbtn := FForm.DocViewBar.Controls[8] as TSpeedButton;
  // Borland.Delphi.Windows.SendMessage(FForm.Handle,Borland.Delphi.Messages.WM_SHOWWINDOW,0,0);
  // FForm.DocView.RefreshDoc(True);
   FForm.ShowModal;
   lBitMap := TBitMap.Create;
   lJPG := TJPEGIMage.Create;
   lBitMap.Width := lPaperView.PaperWidth;
   lBitMap.Height := lPaperView.PaperHeight;
   lBitMap.PixelFormat:=TPixelFormat.pfDevice;
   lPaperView.PaintTo(lBitMap.Canvas,0,0);
   lJPG.Assign(lBitMap);
   if lNextbtn.Enabled then
     AList.AddObject(ASheetName+'(1)',lJPG)
   else
     AList.AddObject(ASheetName,lJPG);
   while  lNextbtn.Enabled do
   begin
     I := I + 1;
     lNextbtn.OnClick(lNextbtn);
     FForm.ShowModal;
     lJPG := TJPEGIMage.Create;
     lPaperView.PaintTo(lBitMap.Canvas,0,0);
     lJPG.Assign(lBitMap);
     AList.AddObject(ASheetName+'('+sysUtils.IntToStr(I)+')',lJPG);
   end;
finally
   lBitMap.Free;
end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 15:12:59 | 显示全部楼层
关键是 预览加载完成的时机,如果能获取到就能解决了
回复 支持 反对

使用道具 举报

发表于 2009-4-20 15:20:25 | 显示全部楼层
你的代码加上:
DocView.Doc.Close;
  DocView.OpenView(TDocMode.dmEdit);//上面代码会重新加载文档,但时间不一定,需要看文档的复杂程度。
你操作docview的代码。
没有机会获得加载完毕的机会。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 15:42:42 | 显示全部楼层
DocView.Doc.Close;
  DocView.OpenView(TDocMode.dmPreView);//
我是预览模式,还是不行 无解~
回复 支持 反对

使用道具 举报

发表于 2009-4-20 15:47:03 | 显示全部楼层
只能做sleep延时了,估算个大概时间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-20 15:52:48 | 显示全部楼层
延时也不行的, 先结贴吧,谢谢lixy
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 06:34 , Processed in 0.041662 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表