在RxRichEdit中插入图片的完美解决方法(不使用剪贴板) andykang(原作)
2007-01-12 11:19
429 查看
例程如下:
设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.
设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.
相关文章推荐
- 在RxRichEdit中插入图片的完美解决方法(不使用剪贴板)
- eWebeditor在IE8、IE9中插入图片按钮不能使用问题的解决方法
- 使用Markdown编辑器插入图片只显示连接的解决方法
- 触发器在插入时更新此条新记录 错误it is already used by statement which invoked this stored functiontrigger的解决方法
- Ubuntu12.04无法使用vim系统剪贴板解决方法
- Ubuntu下使用Eclipse和PyDev搭建完美Python开发环境 (eclipse中不显示pydev插件解决方法)
- 【转载】【完美解决系列】解决在Android中使用background时导致图片被拉伸的问题
- word插入图片显示不完整的解决的方法
- 【Vegas原创】访问owa,图片和js脚本不能正常显示和使用的解决方法
- 使用POI生成Excel文件及使用POI在EXCEL文件中插入图片的方法
- 使用PDO连接数据库 查询和插入乱码的解决方法
- Vue项目使用swiper做轮播图时,异步调用数据时导致图片不能滑动的解决方法
- 完美解决ListView中事件ItemCreated中使用ClientID导致插入数据失败
- 使用PDO连接数据库 查询和插入乱码的解决方法
- 完美解决 向UILable 文字最后插入N张图片,支持向限制行数的UILable 最后一行插入,多余文字显示...
- ie6中li插入图片后下方有空隙(经典bug)多种解决方法
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 此博文包含图片 (2011-01-20 13:50:37)转载▼ 标签: it 分类: 技术 早上同事用PL/SQ
- 微信公众平台接口 动态生成html图片预览无法使用jquery事件的解决方法
- Java:使用I/O流操作将一个图片复制到另一个文件夹下后打不开的解决方法
- 关于使用Eclipse调试Launcher的完美解决方法