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

原创 2002年09月22日 12:13:00

例程如下:

设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.

android中对剪贴板的简单操作

今天看到群里一个兄弟发了一个链接,是介绍Clipboard操作剪贴板的,感觉很有意思,就仔细阅读了下。 链接文章地址 下面,将自己的理解与例子记录一下。 对于剪贴板的操作,其实还是很简单的,只要...
  • chenguang79
  • chenguang79
  • 2016年11月16日 15:36
  • 1910

Delphi 操作剪贴板(1)

Delphi操作剪贴板 Windows使用剪贴板观察器和观察链。剪贴板观察器是一个显示剪贴板当前内容的窗口。             通常它应该至少能显示三种普通格式的内容:文字CF_TEXT...
  • lailai186
  • lailai186
  • 2013年04月12日 13:51
  • 1276

python3+PyQt5实现使用剪贴板做复制与粘帖

本文是对《Python Qt GUI快速编程》的第10章的例子剪贴板用Python3+PyQt5进行改写,分别对文本,图片和html文本的复制与粘帖,三种做法大同小异。...
  • xiaoyangyang20
  • xiaoyangyang20
  • 2017年01月24日 11:33
  • 1142

( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)

题目 : 完美正方形 如果一些边长互不相同的正方形,可以恰好拼出一个更大的正方形,则称其为完美正方形。 历史上,人们花了很久才找到了若干完美正方形。比如:如下边长的22个正方形 2 3 4 6 7 8...
  • Lonverce
  • Lonverce
  • 2016年05月17日 15:52
  • 6025

JS获取剪贴板的内容

这两天弄fckeditor粘贴功能,随着工作的深入和在网上查询资料,知道了在网页中一般是不允许访问“剪贴板”的,因为这样存在着很大的安全隐患,我自己也尝试着写了一个简单的demo   在IE和FF...
  • hbiao68
  • hbiao68
  • 2013年12月04日 09:53
  • 1394

HTML5实战与剖析之剪贴板事件

很多网站当复制粘贴的时候,都会出现有关剪贴板的相关提示,在刚刚入行前端工程师的时候,我还在一直纳闷,这是怎么实现的呢。如今,咱们再也不用纳闷了,因为已经有浏览器把剪贴板相关事件纳入标准了。...
  • LiMengXiaoLong
  • LiMengXiaoLong
  • 2014年02月14日 08:59
  • 22618

关于ios的剪贴板基本知识

在iOS中下面三个控件,自身就有复制-粘贴的功能:  1、UITextView  2、UITextField  3、UIWebView UIKit framework提供了几个类和协议...
  • likendsl
  • likendsl
  • 2013年05月21日 14:14
  • 16973

[疯狂Java]AWT剪切板:图像传递

1. 自己实现传递的图像的Transferable类:     1) JDK只给Transferable接口提供了StringSelection的实现类(即JDK只默认实现了文本传递),但没有提供图像...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年03月14日 14:30
  • 643

.NET web C#通过剪切板取出word中图片

.NET web C#通过剪切板取出word中图片 前台代码: 添加引用 后台实现代...
  • MajorMayer
  • MajorMayer
  • 2015年12月30日 16:01
  • 749

vc获取剪贴板文本内容

前言: 本文目前仅限于获取和设置剪贴板的文本内容,还未涉及到图片等资源; 示例: 一:设置剪贴板文本内容(支持一般符号,特殊符号未测试) bool SetClipBoardText(L...
  • qingzai_
  • qingzai_
  • 2015年04月03日 12:02
  • 2232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在RxRichEdit中插入图片的完美解决方法(不使用剪贴板)
举报原因:
原因补充:

(最多只允许输入30个字)