各位朋友,现需要将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;各位朋友,有无这方面的经验,恳请指教一二。谢。

解决方案 »

  1.   

    恩,自己去盒子或者FANS下一个
    RICHVIEW1.91 用RICHVIEW控件做图文混排很容易。
      

  2.   

    我這裡有一個比較簡單一點的
    只能滿足你的一部分要求,如下: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的當前窗體拷貝下來