各位朋友,现需要将rxRichEdit的内容转换成图片。因为RxRichEdit的内容不通过正常的在网上显示,因此转换为图片较为方便。我在网上找了半天,关于这方面的资料较为少。
我尝试通过剪贴板把信息导过来。但发现在rxRichEdit的内容拷到剪贴板中后,
剪贴板中的hasFormat表示只有CF_TExt类型的数据,无法转换成CF_BITMAP类型,因此无法ASsign给一个TJpegImage控件。无法达到目的。我在网上找到一段小程序,作者说可以将RichEdit转换成Image。但运行后得到一个空图像。跟踪显示运行不正确。
附后:\
uses richedit;
procedure TfrmDocument.Button10Click(Sender: TObject);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY: Integer;
begin
FillChar(Range, SizeOf(TFormatRange), 0);
with Image3, Range do
begin
LogX := GetDeviceCaps(Canvas.Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Canvas.Handle, LOGPIXELSY);
hdc := Canvas.Handle;
hdcTarget := hdc;
rc.right := Image3.ClientWidth * 1440 div LogX;
rc.bottom := Image3.ClientHeight * 1440 div LogY;
rcPage := rc;
LastChar := 0;
MaxLen := GetTextLen;
chrg.cpMax := -1;
repeat
chrg.cpMin := LastChar;
LastChar := SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 1,
Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
end;
SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 0, 0);
Image3.Refresh;
end;各位朋友,有无这方面的经验,恳请指教一二。谢。
我尝试通过剪贴板把信息导过来。但发现在rxRichEdit的内容拷到剪贴板中后,
剪贴板中的hasFormat表示只有CF_TExt类型的数据,无法转换成CF_BITMAP类型,因此无法ASsign给一个TJpegImage控件。无法达到目的。我在网上找到一段小程序,作者说可以将RichEdit转换成Image。但运行后得到一个空图像。跟踪显示运行不正确。
附后:\
uses richedit;
procedure TfrmDocument.Button10Click(Sender: TObject);
var
Range: TFormatRange;
LastChar, MaxLen, LogX, LogY: Integer;
begin
FillChar(Range, SizeOf(TFormatRange), 0);
with Image3, Range do
begin
LogX := GetDeviceCaps(Canvas.Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Canvas.Handle, LOGPIXELSY);
hdc := Canvas.Handle;
hdcTarget := hdc;
rc.right := Image3.ClientWidth * 1440 div LogX;
rc.bottom := Image3.ClientHeight * 1440 div LogY;
rcPage := rc;
LastChar := 0;
MaxLen := GetTextLen;
chrg.cpMax := -1;
repeat
chrg.cpMin := LastChar;
LastChar := SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 1,
Longint(@Range));
until (LastChar >= MaxLen) or (LastChar = -1);
end;
SendMessage(RichEdit1.Handle, EM_FORMATRANGE, 0, 0);
Image3.Refresh;
end;各位朋友,有无这方面的经验,恳请指教一二。谢。
RICHVIEW1.91 用RICHVIEW控件做图文混排很容易。
只能滿足你的一部分要求,如下:procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
ST, DT: TRect;
begin
ST.Left := RichEdit1.Left;
ST.Top := RichEdit1.Top;
ST.Right := RichEdit1.Left + RichEdit1.Width;
ST.Bottom := RichEdit1.Top + RichEdit1.Height; DT.Left := 0;
DT.Top := 0;
DT.Right := RichEdit1.Width;
DT.Bottom := RichEdit1.Height; Bitmap := TBitmap.Create;
try
Bitmap.Height := RichEdit1.Height;
Bitmap.Width := RichEdit1.Width;
Bitmap.Canvas.CopyRect(DT, Self.Canvas, ST);
Bitmap.SaveToFile('C:\Rich.BMP');
finally
Bitmap.Free;
end;
end;
其基本思路是通過窗體的Canvas將當前RichEdit的當前窗體拷貝下來