在RxRichEdit中插入图片的完美解决方法(不使用剪贴板)

    技术2022-05-11  123

    例程如下:

    设Form1上控件RxRichEdit1和Button1。

    InsertBitmapIntoRxRichEdit使用方法请见Button1Click方法。

    unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ComCtrls, RxRichEd;type  TForm1 = class(TForm)    Button1: TButton;    RxRichEdit1: TRxRichEdit;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;implementationuses  JPEG;{$R *.dfm}function ConvertBitmapToRTF(const Bitmap: TBitmap): string;var  bi, bb: string;  bis, bbs: Cardinal;  achar: string[2];  Buffer: string;  I: Integer;type  PWord = ^Word;begin  GetDIBSizes(Bitmap.Handle, bis, bbs);  SetLength(bi, bis);  SetLength(bb, bbs);  GetDIB(Bitmap.Handle, Bitmap.Palette, PChar(bi)^, PChar(bb)^);  SetLength(Buffer, (Length(bb) + Length(bi)) * 2);  i := 1;  for bis := 1 to Length(bi) do  begin    achar := IntToHex(Integer(bi[bis]), 2);    PWord(@Buffer[i])^ := PWord(@achar[1])^;    inc(i, 2);  end;  for bbs := 1 to Length(bb) do  begin    achar := IntToHex(Integer(bb[bbs]), 2);    PWord(@Buffer[i])^ := PWord(@achar[1])^;    inc(i, 2);  end;  Result := '{/rtf1 {/pict/dibitmap ' + Buffer + ' }}';end;procedure InsertBitmapIntoRxRichEdit(const Bitmap: TBitmap; const RxRichEdit:  TRxRichEdit); overload;begin  RxRichEdit.SelText := ConvertBitmapToRTF(Bitmap);  RxRichEdit.SelLength := 0;  RxRichEdit.SelStart := RxRichEdit.SelStart + 1;end;procedure InsertBitmapIntoRxRichEdit(const GraphicFileName: string; const  RxRichEdit: TRxRichEdit); overload;var  Bitmap: TBitmap;  Graphic: TPicture;begin  Graphic := TPicture.Create;  try    Graphic.LoadFromFile(GraphicFileName);    if Graphic.Graphic is TBitmap then      Bitmap := Graphic.Bitmap    else    begin      Bitmap := TBitmap.Create;      Bitmap.Assign(Graphic.Graphic);    end;    InsertBitmapIntoRxRichEdit(Bitmap, RxRichEdit);  finally    if Bitmap <> Graphic.Bitmap then      FreeAndNil(Bitmap);    FreeAndNil(Graphic);  end;end;procedure TForm1.Button1Click(Sender: TObject);begin  //InsertBitmapIntoRxRichEdit('C:/Temp/Untitled.bmp', RxRichEdit1);  InsertBitmapIntoRxRichEdit('C:/Temp/Untitled-8.jpg', RxRichEdit1);  RxRichEdit1.SetFocus;end;end.


    最新回复(0)