31 个解决方案
#1
RichTextBox???
这是什么?
这是什么?
#2
是一个ocx控件,可以存放RTF可是的东西。
我的问题还是换个问法:如何将RTF格式转为bmp格式
我的问题还是换个问法:如何将RTF格式转为bmp格式
#3
通过内存stream不知道可不可以?
先存到内存中
然后再存成bmp
如果rtf可以直接saveas("...bmp")就好了
先存到内存中
然后再存成bmp
如果rtf可以直接saveas("...bmp")就好了
#4
er...
可以把那部分的屏幕截取出来,
再用bmp保存
可以把那部分的屏幕截取出来,
再用bmp保存
#5
可不可以在form上对应该richtextbox的位置new一个paintbox,然后CopyRect,save就方便了。
我上次在自己的程序中的form上new了一个paintbox,设置好parent,然后就可以
截取该部分的图像了。
我没有试一下你的这个行不行 :)
我上次在自己的程序中的form上new了一个paintbox,设置好parent,然后就可以
截取该部分的图像了。
我没有试一下你的这个行不行 :)
#6
就是
#7
比较简单的方法:
用CopyRect拷贝出rtf文件在Form上的坐标区间,再save成bmp.
同意二楼上。
玉笛书生
用CopyRect拷贝出rtf文件在Form上的坐标区间,再save成bmp.
同意二楼上。
玉笛书生
#8
大家都说用拷贝屏幕的方法,但是如果richtextbox有滚动条,那看不见的下半部分岂不是丢失了吗?
#9
garypeng(),能否贴上你的源程序?
#10
记不太清楚了,好像是
p = new TPaintBox(Form1);
p->Parent = Form1;
p->Left = ?
....
如果要保存其他部分,是否能试一下建一个内存中的bitmap,然后将richtext
输出到该bitmap上?
p = new TPaintBox(Form1);
p->Parent = Form1;
p->Left = ?
....
如果要保存其他部分,是否能试一下建一个内存中的bitmap,然后将richtext
输出到该bitmap上?
#11
是的,RichEdit1可以向打印机输出完整的内容,为什么不能完整地向画布Canvas输出呢?
关注!
关注!
#12
屏幕拷图的方式我也试过,滑动滚动条太麻烦了,
有没有办法一次就能生成.bmp,可行性还是有的,
因为RichEdit1->Print()是把整个图像输出到
打印机,为什么就不能顺便保存到文件呢?
继续关注!
有没有办法一次就能生成.bmp,可行性还是有的,
因为RichEdit1->Print()是把整个图像输出到
打印机,为什么就不能顺便保存到文件呢?
继续关注!
#13
有没有这样的虚拟打印机驱动程序:却把打印机的结果 送入一个图像文件中,如.bmp中
#14
如何模拟鼠标滑动滚动条?
#15
这个滑动方法的生bmp的程序,我2年前试过,要找一找;
整个程序又长又难理解,不满意,也寻求更好更简单的办法
整个程序又长又难理解,不满意,也寻求更好更简单的办法
#16
找到了,我的程序不是滑动RichEdit,而是滑动它的容器ScrollBox1,
不完美.
不完美.
#17
我的上面程序还有一个缺陷,必须先确定图像的长宽大小,太大了会空出好多,
太小则会切掉一部分;
我也想知道更好的方法!
太小则会切掉一部分;
我也想知道更好的方法!
#18
能否发给我?email adress:hjl2000@163.net
#19
干脆就贴出来了:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
static int x1m=2048,y1m=2048; //最大范围
static int x0s=0,y0s=0,x1s=2000,y1s=2000; //选定范围
RichEdit1->Align=alNone; //将RichEdit扩展开
RichEdit1->Height=y1m;
RichEdit1->Width=x1m;
RichEdit1->HideScrollBars=True;
RichEdit1->ScrollBars=ssNone;
RichEdit1->Refresh(); // 立即改变属性
int xi=ScrollBox1->ClientWidth; //滚动步长
int yi=ScrollBox1->ClientHeight;
ScrollBox1->HorzScrollBar->Range=x1s+xi;
ScrollBox1->VertScrollBar->Range=y1s+yi;
int SB_x0=ScrollBox1->ClientOrigin.x-ClientOrigin.x;
int SB_y0=ScrollBox1->ClientOrigin.y-ClientOrigin.y;
// 滚动窗口左上角坐标
Graphics::TBitmap *bitmap=new Graphics::TBitmap();
bitmap->Width=x1s-x0s;
bitmap->Height=y1s-y0s;
int Lx0=ScrollBox1->HorzScrollBar->Position;
int Ly0=ScrollBox1->VertScrollBar->Position;
for (int y=y0s;y<=y1s;y+=yi)
{
int h=min(y+yi,y1s);
ScrollBox1->VertScrollBar->Position=y;
for (int x=x0s;x<=x1s;x+=xi)
{
int w=min(x+xi,x1s);
ScrollBox1->HorzScrollBar->Position=x;
Application->ProcessMessages();
bitmap->Canvas->CopyRect(
Rect(x-x0s,y-y0s,w-x0s,h-y0s),Canvas,
Rect(SB_x0,SB_y0,SB_x0+w-x,SB_y0+h-y));
}
}
ScrollBox1->HorzScrollBar->Position=Lx0;
ScrollBox1->VertScrollBar->Position=Ly0;
if (SaveDialog1->Execute())
bitmap->SaveToFile(SaveDialog1->FileName);
delete bitmap;
RichEdit1->Align=alClient;
RichEdit1->HideScrollBars=False;
RichEdit1->ScrollBars=ssBoth;
RichEdit1->Refresh();
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
static int x1m=2048,y1m=2048; //最大范围
static int x0s=0,y0s=0,x1s=2000,y1s=2000; //选定范围
RichEdit1->Align=alNone; //将RichEdit扩展开
RichEdit1->Height=y1m;
RichEdit1->Width=x1m;
RichEdit1->HideScrollBars=True;
RichEdit1->ScrollBars=ssNone;
RichEdit1->Refresh(); // 立即改变属性
int xi=ScrollBox1->ClientWidth; //滚动步长
int yi=ScrollBox1->ClientHeight;
ScrollBox1->HorzScrollBar->Range=x1s+xi;
ScrollBox1->VertScrollBar->Range=y1s+yi;
int SB_x0=ScrollBox1->ClientOrigin.x-ClientOrigin.x;
int SB_y0=ScrollBox1->ClientOrigin.y-ClientOrigin.y;
// 滚动窗口左上角坐标
Graphics::TBitmap *bitmap=new Graphics::TBitmap();
bitmap->Width=x1s-x0s;
bitmap->Height=y1s-y0s;
int Lx0=ScrollBox1->HorzScrollBar->Position;
int Ly0=ScrollBox1->VertScrollBar->Position;
for (int y=y0s;y<=y1s;y+=yi)
{
int h=min(y+yi,y1s);
ScrollBox1->VertScrollBar->Position=y;
for (int x=x0s;x<=x1s;x+=xi)
{
int w=min(x+xi,x1s);
ScrollBox1->HorzScrollBar->Position=x;
Application->ProcessMessages();
bitmap->Canvas->CopyRect(
Rect(x-x0s,y-y0s,w-x0s,h-y0s),Canvas,
Rect(SB_x0,SB_y0,SB_x0+w-x,SB_y0+h-y));
}
}
ScrollBox1->HorzScrollBar->Position=Lx0;
ScrollBox1->VertScrollBar->Position=Ly0;
if (SaveDialog1->Execute())
bitmap->SaveToFile(SaveDialog1->FileName);
delete bitmap;
RichEdit1->Align=alClient;
RichEdit1->HideScrollBars=False;
RichEdit1->ScrollBars=ssBoth;
RichEdit1->Refresh();
}
#20
BCB(:)),你的办法好像可以,再让我试试
#21
BCB(:)),
你的方法可以,谢谢。另外,可以确定richedit一共有多少页,那就可以确定需要多大的作图区了。如果横向的长度一定,我可以算出面积大小,但是如果横向长度不定,我还不知道如何计算长度。
虽然,这种方法可行,但是我觉得它的效率太低,是否可以通过剪贴板实现,但是在剪贴板中的格式转换问题我不是太明白,你有没有兴趣探讨探讨?
你的方法可以,谢谢。另外,可以确定richedit一共有多少页,那就可以确定需要多大的作图区了。如果横向的长度一定,我可以算出面积大小,但是如果横向长度不定,我还不知道如何计算长度。
虽然,这种方法可行,但是我觉得它的效率太低,是否可以通过剪贴板实现,但是在剪贴板中的格式转换问题我不是太明白,你有没有兴趣探讨探讨?
#22
用剪贴板没信心
暂时没有更好的办法
暂时没有更好的办法
#23
RichTextBox.Copy()后,剪贴板中的格式有以下几种:
文本(CF_TEXT)
图片(CF_BITMAP)
OEM文本
Unicode文字
增强型图元文件
从剪贴板中读出CF_BITMAP格式的数据,这个不难吧,保存它为bmp文件,就OK啦。
文本(CF_TEXT)
图片(CF_BITMAP)
OEM文本
Unicode文字
增强型图元文件
从剪贴板中读出CF_BITMAP格式的数据,这个不难吧,保存它为bmp文件,就OK啦。
#24
bgsn,我是要将所有的内容都拷贝出来,不仅仅是CF_BITMAP的内容
#25
RichTextBox.SelectAll();
RichTextBox.Copy();
剪贴板里不就是整个RichTextBox内容的位图了吗?!
RichTextBox.Copy();
剪贴板里不就是整个RichTextBox内容的位图了吗?!
#26
hj12000,我想你有一个概念没搞清楚:
剪贴板里的CF_BITMAP格式数据就是整个RichTextBox内容的图形表示——包括文本 + 嵌入的位图 + 嵌入的ActiveX控件或者ActiveX文档的图形表示。
剪贴板里的CF_BITMAP格式数据就是整个RichTextBox内容的图形表示——包括文本 + 嵌入的位图 + 嵌入的ActiveX控件或者ActiveX文档的图形表示。
#27
bgsn(不告诉你),是吗?那么CF_TEXT难道是所有内容的图形表示吗?我想不对吧!
如果我仅仅copy一串字符,那在剪贴板中是不会有CF_BITMAP格式的数据的,你如何解释呢?
如果我仅仅copy一串字符,那在剪贴板中是不会有CF_BITMAP格式的数据的,你如何解释呢?
#28
to hjl2000:你错了,即使你只拷贝一串字符,RichTextBox也会同时向剪贴板中写入
CF_TEXT和CF_BITMAP两种格式的数据,不信你用剪贴板查看器看看。
CF_TEXT和CF_BITMAP两种格式的数据,不信你用剪贴板查看器看看。
#29
bgsn(不告诉你),你说的不对,我从记事本中copy了一段文字,在剪贴板的浏览器中有四种格式
1.Unknown Clipformat
2.Unknown Clipformat
3.CF_TEXT
4.CF_OEMTEXT
不信,你可以自己试试
1.Unknown Clipformat
2.Unknown Clipformat
3.CF_TEXT
4.CF_OEMTEXT
不信,你可以自己试试
#30
记事本用的是普通的EditBox,写字板用的才是RichTextBox
我把事情想的太简单了,RichTextBox的剪贴机制比较复杂,我会继续关注的。
我把事情想的太简单了,RichTextBox的剪贴机制比较复杂,我会继续关注的。
#31
我知道,我用的是RichTextBox。我只是据一个例子。
如果有进展通知我,上面有我的email地址。
如果有进展通知我,上面有我的email地址。
#1
RichTextBox???
这是什么?
这是什么?
#2
是一个ocx控件,可以存放RTF可是的东西。
我的问题还是换个问法:如何将RTF格式转为bmp格式
我的问题还是换个问法:如何将RTF格式转为bmp格式
#3
通过内存stream不知道可不可以?
先存到内存中
然后再存成bmp
如果rtf可以直接saveas("...bmp")就好了
先存到内存中
然后再存成bmp
如果rtf可以直接saveas("...bmp")就好了
#4
er...
可以把那部分的屏幕截取出来,
再用bmp保存
可以把那部分的屏幕截取出来,
再用bmp保存
#5
可不可以在form上对应该richtextbox的位置new一个paintbox,然后CopyRect,save就方便了。
我上次在自己的程序中的form上new了一个paintbox,设置好parent,然后就可以
截取该部分的图像了。
我没有试一下你的这个行不行 :)
我上次在自己的程序中的form上new了一个paintbox,设置好parent,然后就可以
截取该部分的图像了。
我没有试一下你的这个行不行 :)
#6
就是
#7
比较简单的方法:
用CopyRect拷贝出rtf文件在Form上的坐标区间,再save成bmp.
同意二楼上。
玉笛书生
用CopyRect拷贝出rtf文件在Form上的坐标区间,再save成bmp.
同意二楼上。
玉笛书生
#8
大家都说用拷贝屏幕的方法,但是如果richtextbox有滚动条,那看不见的下半部分岂不是丢失了吗?
#9
garypeng(),能否贴上你的源程序?
#10
记不太清楚了,好像是
p = new TPaintBox(Form1);
p->Parent = Form1;
p->Left = ?
....
如果要保存其他部分,是否能试一下建一个内存中的bitmap,然后将richtext
输出到该bitmap上?
p = new TPaintBox(Form1);
p->Parent = Form1;
p->Left = ?
....
如果要保存其他部分,是否能试一下建一个内存中的bitmap,然后将richtext
输出到该bitmap上?
#11
是的,RichEdit1可以向打印机输出完整的内容,为什么不能完整地向画布Canvas输出呢?
关注!
关注!
#12
屏幕拷图的方式我也试过,滑动滚动条太麻烦了,
有没有办法一次就能生成.bmp,可行性还是有的,
因为RichEdit1->Print()是把整个图像输出到
打印机,为什么就不能顺便保存到文件呢?
继续关注!
有没有办法一次就能生成.bmp,可行性还是有的,
因为RichEdit1->Print()是把整个图像输出到
打印机,为什么就不能顺便保存到文件呢?
继续关注!
#13
有没有这样的虚拟打印机驱动程序:却把打印机的结果 送入一个图像文件中,如.bmp中
#14
如何模拟鼠标滑动滚动条?
#15
这个滑动方法的生bmp的程序,我2年前试过,要找一找;
整个程序又长又难理解,不满意,也寻求更好更简单的办法
整个程序又长又难理解,不满意,也寻求更好更简单的办法
#16
找到了,我的程序不是滑动RichEdit,而是滑动它的容器ScrollBox1,
不完美.
不完美.
#17
我的上面程序还有一个缺陷,必须先确定图像的长宽大小,太大了会空出好多,
太小则会切掉一部分;
我也想知道更好的方法!
太小则会切掉一部分;
我也想知道更好的方法!
#18
能否发给我?email adress:hjl2000@163.net
#19
干脆就贴出来了:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
static int x1m=2048,y1m=2048; //最大范围
static int x0s=0,y0s=0,x1s=2000,y1s=2000; //选定范围
RichEdit1->Align=alNone; //将RichEdit扩展开
RichEdit1->Height=y1m;
RichEdit1->Width=x1m;
RichEdit1->HideScrollBars=True;
RichEdit1->ScrollBars=ssNone;
RichEdit1->Refresh(); // 立即改变属性
int xi=ScrollBox1->ClientWidth; //滚动步长
int yi=ScrollBox1->ClientHeight;
ScrollBox1->HorzScrollBar->Range=x1s+xi;
ScrollBox1->VertScrollBar->Range=y1s+yi;
int SB_x0=ScrollBox1->ClientOrigin.x-ClientOrigin.x;
int SB_y0=ScrollBox1->ClientOrigin.y-ClientOrigin.y;
// 滚动窗口左上角坐标
Graphics::TBitmap *bitmap=new Graphics::TBitmap();
bitmap->Width=x1s-x0s;
bitmap->Height=y1s-y0s;
int Lx0=ScrollBox1->HorzScrollBar->Position;
int Ly0=ScrollBox1->VertScrollBar->Position;
for (int y=y0s;y<=y1s;y+=yi)
{
int h=min(y+yi,y1s);
ScrollBox1->VertScrollBar->Position=y;
for (int x=x0s;x<=x1s;x+=xi)
{
int w=min(x+xi,x1s);
ScrollBox1->HorzScrollBar->Position=x;
Application->ProcessMessages();
bitmap->Canvas->CopyRect(
Rect(x-x0s,y-y0s,w-x0s,h-y0s),Canvas,
Rect(SB_x0,SB_y0,SB_x0+w-x,SB_y0+h-y));
}
}
ScrollBox1->HorzScrollBar->Position=Lx0;
ScrollBox1->VertScrollBar->Position=Ly0;
if (SaveDialog1->Execute())
bitmap->SaveToFile(SaveDialog1->FileName);
delete bitmap;
RichEdit1->Align=alClient;
RichEdit1->HideScrollBars=False;
RichEdit1->ScrollBars=ssBoth;
RichEdit1->Refresh();
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
static int x1m=2048,y1m=2048; //最大范围
static int x0s=0,y0s=0,x1s=2000,y1s=2000; //选定范围
RichEdit1->Align=alNone; //将RichEdit扩展开
RichEdit1->Height=y1m;
RichEdit1->Width=x1m;
RichEdit1->HideScrollBars=True;
RichEdit1->ScrollBars=ssNone;
RichEdit1->Refresh(); // 立即改变属性
int xi=ScrollBox1->ClientWidth; //滚动步长
int yi=ScrollBox1->ClientHeight;
ScrollBox1->HorzScrollBar->Range=x1s+xi;
ScrollBox1->VertScrollBar->Range=y1s+yi;
int SB_x0=ScrollBox1->ClientOrigin.x-ClientOrigin.x;
int SB_y0=ScrollBox1->ClientOrigin.y-ClientOrigin.y;
// 滚动窗口左上角坐标
Graphics::TBitmap *bitmap=new Graphics::TBitmap();
bitmap->Width=x1s-x0s;
bitmap->Height=y1s-y0s;
int Lx0=ScrollBox1->HorzScrollBar->Position;
int Ly0=ScrollBox1->VertScrollBar->Position;
for (int y=y0s;y<=y1s;y+=yi)
{
int h=min(y+yi,y1s);
ScrollBox1->VertScrollBar->Position=y;
for (int x=x0s;x<=x1s;x+=xi)
{
int w=min(x+xi,x1s);
ScrollBox1->HorzScrollBar->Position=x;
Application->ProcessMessages();
bitmap->Canvas->CopyRect(
Rect(x-x0s,y-y0s,w-x0s,h-y0s),Canvas,
Rect(SB_x0,SB_y0,SB_x0+w-x,SB_y0+h-y));
}
}
ScrollBox1->HorzScrollBar->Position=Lx0;
ScrollBox1->VertScrollBar->Position=Ly0;
if (SaveDialog1->Execute())
bitmap->SaveToFile(SaveDialog1->FileName);
delete bitmap;
RichEdit1->Align=alClient;
RichEdit1->HideScrollBars=False;
RichEdit1->ScrollBars=ssBoth;
RichEdit1->Refresh();
}
#20
BCB(:)),你的办法好像可以,再让我试试
#21
BCB(:)),
你的方法可以,谢谢。另外,可以确定richedit一共有多少页,那就可以确定需要多大的作图区了。如果横向的长度一定,我可以算出面积大小,但是如果横向长度不定,我还不知道如何计算长度。
虽然,这种方法可行,但是我觉得它的效率太低,是否可以通过剪贴板实现,但是在剪贴板中的格式转换问题我不是太明白,你有没有兴趣探讨探讨?
你的方法可以,谢谢。另外,可以确定richedit一共有多少页,那就可以确定需要多大的作图区了。如果横向的长度一定,我可以算出面积大小,但是如果横向长度不定,我还不知道如何计算长度。
虽然,这种方法可行,但是我觉得它的效率太低,是否可以通过剪贴板实现,但是在剪贴板中的格式转换问题我不是太明白,你有没有兴趣探讨探讨?
#22
用剪贴板没信心
暂时没有更好的办法
暂时没有更好的办法
#23
RichTextBox.Copy()后,剪贴板中的格式有以下几种:
文本(CF_TEXT)
图片(CF_BITMAP)
OEM文本
Unicode文字
增强型图元文件
从剪贴板中读出CF_BITMAP格式的数据,这个不难吧,保存它为bmp文件,就OK啦。
文本(CF_TEXT)
图片(CF_BITMAP)
OEM文本
Unicode文字
增强型图元文件
从剪贴板中读出CF_BITMAP格式的数据,这个不难吧,保存它为bmp文件,就OK啦。
#24
bgsn,我是要将所有的内容都拷贝出来,不仅仅是CF_BITMAP的内容
#25
RichTextBox.SelectAll();
RichTextBox.Copy();
剪贴板里不就是整个RichTextBox内容的位图了吗?!
RichTextBox.Copy();
剪贴板里不就是整个RichTextBox内容的位图了吗?!
#26
hj12000,我想你有一个概念没搞清楚:
剪贴板里的CF_BITMAP格式数据就是整个RichTextBox内容的图形表示——包括文本 + 嵌入的位图 + 嵌入的ActiveX控件或者ActiveX文档的图形表示。
剪贴板里的CF_BITMAP格式数据就是整个RichTextBox内容的图形表示——包括文本 + 嵌入的位图 + 嵌入的ActiveX控件或者ActiveX文档的图形表示。
#27
bgsn(不告诉你),是吗?那么CF_TEXT难道是所有内容的图形表示吗?我想不对吧!
如果我仅仅copy一串字符,那在剪贴板中是不会有CF_BITMAP格式的数据的,你如何解释呢?
如果我仅仅copy一串字符,那在剪贴板中是不会有CF_BITMAP格式的数据的,你如何解释呢?
#28
to hjl2000:你错了,即使你只拷贝一串字符,RichTextBox也会同时向剪贴板中写入
CF_TEXT和CF_BITMAP两种格式的数据,不信你用剪贴板查看器看看。
CF_TEXT和CF_BITMAP两种格式的数据,不信你用剪贴板查看器看看。
#29
bgsn(不告诉你),你说的不对,我从记事本中copy了一段文字,在剪贴板的浏览器中有四种格式
1.Unknown Clipformat
2.Unknown Clipformat
3.CF_TEXT
4.CF_OEMTEXT
不信,你可以自己试试
1.Unknown Clipformat
2.Unknown Clipformat
3.CF_TEXT
4.CF_OEMTEXT
不信,你可以自己试试
#30
记事本用的是普通的EditBox,写字板用的才是RichTextBox
我把事情想的太简单了,RichTextBox的剪贴机制比较复杂,我会继续关注的。
我把事情想的太简单了,RichTextBox的剪贴机制比较复杂,我会继续关注的。
#31
我知道,我用的是RichTextBox。我只是据一个例子。
如果有进展通知我,上面有我的email地址。
如果有进展通知我,上面有我的email地址。