怎么将RichViewEdit打印成一张张bmp图片(bmp长宽要自定义)

hyz_cs 2013-04-30 12:06:58
看了这个,但不知道在cb中要怎么用.谁能帮忙改一下,比如我要一页页打印成200*50这么大的bmp.

http://blog.csdn.net/qq752923276/article/details/7869711



1:var wmf: TMetafile;
Canvas: TMetafileCanvas;
Width, Height: Integer;
begin
RVReportHelper1.Init(Self.Canvas, 200 {width});
while RVReportHelper1.FormatNextPage(VERYLARGEVALUE) do;

wmf := TMetafile.Create;
wmf.Width := 200;
wmf.Height := RVReportHelper1.EndAt;

Canvas := TMetafileCanvas.Create(wmf, 0);
RVReportHelper1.DrawPage(1,Canvas,True,RVReportHelper1.EndAt);
Canvas.Free;

Image2.Picture.Graphic := wmf;
wmf.Free;
end;
2:var wmf: TMetafile;
Canvas: TMetafileCanvas;
Width, Height: Integer;
begin
RichView1.HScrollPos := 0;
RichView1.VScrollPos := 0;
RichView1.Deselect;
RichView1.Invalidate;
Width := RichView1.RVData.DocumentWidth RichView1.LeftMargin RichView1.RightMargin;
Height := RichView1.RVData.DocumentHeight;

wmf := TMetafile.Create;
wmf.Width := Width;
wmf.Height := Height;

Canvas := TMetafileCanvas.Create(wmf, 0);
Canvas.Brush.Color := clWindow;
Canvas.FillRect(Rect(0,0,Width,Height));
RichView1.RVData.PaintTo(Canvas, Rect(0,0,VERYLARGEVALUE,VERYLARGEVALUE));
Canvas.Free;

Image1.Picture.Graphic := wmf;
wmf.Free;
end;

...全文
218 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
w88529593 2013-12-23
  • 打赏
  • 举报
回复
请问如何解决的richview内容转BMP?
hyz_cs 2013-05-02
  • 打赏
  • 举报
回复
引用 13 楼 qq752923276 的回复:
http://download.csdn.net/detail/qq752923276/5322562 RichView文本内容转Bmp
下午这个问题解决了,另外还有个问题,如果要实现分页转成bmp怎么实现,比如分成128*64这样的一幅幅小图片,但是不允许一行文字在前一张图片和后一张图片中各出现一半的情况.
hyz_cs 2013-05-02
  • 打赏
  • 举报
回复
引用 13 楼 qq752923276 的回复:
http://download.csdn.net/detail/qq752923276/5322562
RichView文本内容转Bmp





这个函数跟你的不一样,可能是richview版本不同的原因吧,比你多4个参数.我用0,0,0,100出来的图片是一片黑色的.
hyz_cs 2013-05-02
  • 打赏
  • 举报
回复
引用 13 楼 qq752923276 的回复:
http://download.csdn.net/detail/qq752923276/5322562 RichView文本内容转Bmp
不止文本吧,表格,图片这些也都可以的吧,是richview文档转bmp吗?
__lhy 2013-05-02
  • 打赏
  • 举报
回复
hyz_cs 2013-05-02
  • 打赏
  • 举报
回复
引用 10 楼 qq752923276 的回复:
[quote=引用 8 楼 qq752923276 的回复:] http://download.csdn.net/detail/qq752923276/4500801 这个demo中有附带转为bcb6的
搞错了 没有添加上去[/quote] 写个例子呗,也算造福大家了,这里就你对这个控件比较熟悉一些.
hyz_cs 2013-05-02
  • 打赏
  • 举报
回复
引用 8 楼 qq752923276 的回复:
http://download.csdn.net/detail/qq752923276/4500801 这个demo中有附带转为bcb6的
这个里面没有把RichViewEdit转为图片的吧,另外 RVReportHelper1 也没用到.
__lhy 2013-05-02
  • 打赏
  • 举报
回复
引用 8 楼 qq752923276 的回复:
http://download.csdn.net/detail/qq752923276/4500801 这个demo中有附带转为bcb6的
搞错了 没有添加上去
缘中人 2013-05-02
  • 打赏
  • 举报
回复
__lhy 2013-05-02
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/qq752923276/4500801 这个demo中有附带转为bcb6的
hyz_cs 2013-04-30
  • 打赏
  • 举报
回复
没有原来的完整代码,只是上面博客中这两段,看上面两段代码似乎没有关联. 第一段全是 RVReportHelper1 的, 而第二段是 RichView1 而我文档编辑是在一个RichViewEdit1中.
ccrun.com 2013-04-30
  • 打赏
  • 举报
回复
Init函数中的Canvas参数,在Delphi代码中是Self.Canvas,相当于C++Builder中的this->Canvas,默认应该是窗体类的Canvas对象。 至于VERYLARGEVALUE,你需要在原来的Delphi代码中查找其真实的值,然后define或const定义一下就行了。
hyz_cs 2013-04-30
  • 打赏
  • 举报
回复
是执行这一行时出错. rvrprthlpr1->Init(Canvas, 200); 是这是这个Canvas ?
hyz_cs 2013-04-30
  • 打赏
  • 举报
回复



自己填个500,运行时出错,应该是其它地方还有问题吧.
hyz_cs 2013-04-30
  • 打赏
  • 举报
回复
引用 2 楼 ccrun 的回复:
以上代码纯手工翻译,无环境,没有测试。
额..找不到这个 VERYLARGEVALUE 在哪定义的..
ccrun.com 2013-04-30
  • 打赏
  • 举报
回复
以上代码纯手工翻译,无环境,没有测试。
ccrun.com 2013-04-30
  • 打赏
  • 举报
回复
翻译后大概是这个样子:
RVReportHelper1->Init(Canvas, 200);  
while (RVReportHelper1->FormatNextPage(VERYLARGEVALUE));

TMetafile *wmf = new TMetafile();
wmf->Width = 200;  
wmf->Height = RVReportHelper1->EndAt;  
   
TMetafileCanvas *pCanvas = new TMetafileCanvas(wmf, 0);  
RVReportHelper1->DrawPage(1, pCanvas, true, RVReportHelper1->EndAt);  
delete pCanvas;  
   
Image2->Picture->Graphic = wmf;  
delete wmf;  
RichView1->HScrollPos = 0;  
RichView1->VScrollPos = 0;  
RichView1->Deselect();  
RichView1->Invalidate();  
int nWidth = RichView1->RVData->DocumentWidth - RichView1->LeftMargin - RichView1->RightMargin;  
int nHeight = RichView1->RVData->DocumentHeight;  
   
TMetafile *wmf = new TMetafile();  
wmf->Width = nWidth;  
wmf->Height = nHeight;  
   
TMetafileCanvas *pCanvas = new TMetafileCanvas(wmf, 0);  
pCanvas->Brush->Color = clWindow;  
pCanvas->FillRect(Rect(0, 0, nWidth, nHeight));  
RichView1->RVData->PaintTo(pCanvas, Rect(0, 0, VERYLARGEVALUE, VERYLARGEVALUE));  
delete pCanvas;
   
Image1->Picture->Graphic = wmf;  
delete wmf;

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧