| 首页 | 电脑常识 | 程序设计 | 操作系统 | 语法 | 病毒安全 | 软件教程 | 硬件 | 数据库 | 多媒体 | 认证 | 下载 | 
首页>>程序设计 >>控件使用
在RxRichEdit中插入图片的完美解决方法(不使用剪贴板)

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

电脑学习网,xuef.com,最全最新最权威的电脑知识网站.
免费计算机学习教程,电脑入门指南.

例程如下:

设Form1上控件RxRichEdit1和Button1。

InsertBitmapIntoRxRichEdit使用方法请见Button1Click方法。

unit Unit1;

interface

uses
  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;

implementation
uses
  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.

相 关 文 章
  • TreeView使用笔记

  • 用HtmlHelp组件在Delphi应用程序中实现Html帮助

  • 平滑SpeedButton

  • 沉默的异常--Delphi帮助寻宝之一

  • 设计模式、用Delphi实现---->Wrapperpattern

  • 在delphi中使用flash控件

  • TNotifyIcon控件1.01

  • 改良控件-Delphi自带控件Bug的消除

  • 用Delphi制作个性化的菜单

  • listbox多选状态下的自拖与互拖

  • 学府网电脑学习的乐园
    中国电脑教学网,电脑爱好者的乐园,做最好最全的计算机学习网站.