RichEdit中怎么加入图片?

zo_ming 2002-07-25 02:26:57
刚才得知RichEdit里可插入图片但不知道怎么用,希望给出方法,谢谢
...全文
267 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfycl 2002-08-20
  • 打赏
  • 举报
回复
mark
TechnoFantasy 2002-08-20
  • 打赏
  • 举报
回复
用RichEdit就可以实现,到精华区看看这篇贴子:

http://www.csdn.net/expert/topic/656/656711.xml?temp=.9040949
pursuer 2002-08-20
  • 打赏
  • 举报
回复

在richedit中插入图片可以用RXLib里的RxRichedit控件,richedit本身很难实现。
http://www.csdn.net/cnshare/shtm/93.shtm有这个控件的下载
先添加Clipbrd单元。
procedure TForm1.Button1Click(Sender: TObject);
var
Pict :TPicture;
begin
with OpenPictureDialog1 do begin
if Execute then begin
Pict := TPicture.Create;
try
Pict.LoadFromFile(FileName);
Clipboard.Assign(Pict);
RxRichEdit1.PasteFromClipboard;
finally
Pict.Free;
end;
end;
end;
end;
或者:
uses Clipbrd;
procedure TMainForm.InsertImg(sFN: string; RxEdit: TRxRichEdit);
{插入图像到RXRICHEDIT中
sFN : 图像文件
RxEdit : 要插入图像文件的控件
}
var
Pict : TPicture;
begin
Pict := TPicture.Create;
try
Pict.LoadFromFile(sFN);
Clipboard.Assign(Pict);
RxEdit.PasteFromClipboard;
finally
Pict.Free;
end;
end;

Carfield 2002-07-25
  • 打赏
  • 举报
回复
补充:
Delphi的RichEdit组件没有实现插入图片及URL检测。看看RichEdit的源码(comctrls.pas),你会发现Borland仍然是用RichEdit 1.0版本。很不幸,因为Microsoft RichEdit控制的2.0版本支持图片和URL检测和其它很多有用的特试着搜索一下riched*.dll,你会找到两个--RICHED32.DLL和RICHED20.DLL--位于windows\system或winnt\system32文件夹中。前一个文件实现RichEdit 1.0版本的特性,后一个文件实现新的2.0版特性。上面用到的RxRichEdit是RXlib中的控件,或者使用Infopower中的RichEdit也可以

Carfield 2002-07-25
  • 打赏
  • 举报
回复
下面的代码可以不调用那个InsertObject的对话框而直接插入一张图片:
var
Bmp:TBitmap;
begin
if not OpenPictureDialog1.Execute then exit;
Bmp:=TBitmap.Create;
Bmp.LoadFromFile(OpenPictureDialog1.FileName);
Clipboard.Assign(BMP);
RxRichEdit201.PasteFromClipboard;
Bmp.Free;
end;
robinhunter 2002-07-25
  • 打赏
  • 举报
回复
可以吗?不行的吧。
delphi深度探索中有把richedit经过扩展使它可以显示图片的例子。
不用第三方控件,让richEdit支持图片与表格换行 DELPHI 6 提供的RICHEDIT是1.0,并不支持图片,对复杂表格也会乱成一团,如何在DELPHI原有控件的基础上做少量修改,使之支持显示图片与正确显示表格,其实只需要几行就好了,方法如下: 找到richEdit控件所在单元ComCtrls.pas (在SOURCE\VCL) //第一步 procedure TCustomRichEdit.CreateParams(var Params: TCreateParams); const // RichEditModuleName = 'RICHED32.DLL';//原来语句 // RichEditClassName = 'RICHEDIT'; //原来语句 RichEditModuleName = 'Msftedit.dll'; //改后语句 RichEditClassName = 'RichEdit50W'; //改后语句 //第二步 procedure TCustomRichEdit.CreateWnd; .... //加入一行要放在 CreateWnd 因为此时 HANDLE已建立 Perform(EM_SetOleCallback, 0, Longint(TRichEditOleCallback.Create(TRichEdit(self)) as IRichEditOleCallback)) ; //第三步 procedure TCustomRichEdit.WMRButtonUp(var Message: TWMRButtonUp); begin inherited; // RichEd20 does not pass the WM_RBUTTONUP message to defwndproc, // so we get no WM_CONTEXTMENU message. Simulate message here. // if Win32MajorVersion < 5 then //是原有1.0的要去掉 Perform(WM_CONTEXTMENU, Handle, LParam(PointToSmallPoint( ClientToScreen(SmallPointToPoint(Message.Pos))))); end; //第四步 procedure TRichEditStrings.Insert(Index: Integer; const S: string); .... //要去掉后面两名 // 1.0 uses, 2.0 will error happened 2011 // if RichEdit.SelStart (Selection.cpMax + Length(Str)) then //是原有1.0的要去掉 // raise EOutOfResources.Create(sRichEditInsertError); //是原有1.0的要去掉

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧