***如何在richtext一类的控件中插入图片?*** (80分)

  • 主题发起人 主题发起人 wlh_1
  • 开始时间 开始时间
W

wlh_1

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在richtext一类的控件中插入图片?比如有一段文字,我想在某一个地方加入一张图片,不能覆盖源文字,并且修改文字时图片也根据位置移动(比如添加或删除文字),另外插入得图片不能被修改(意思是将图片放到里面,而不是在里面绘制图片)。急,各位帮忙!
 
告诉你一个非常好用的、大名鼎鼎的控件--RxLib,其中有一
强力RxRichEdit控件,它能满足你的大部分要求,简直就是一个
真正完整的字处理软件,如Undo、Redo等不一而足。至于你要
在RxRichEdit插入图片,对于在剪切板中时,只需按下Ctrl+V
功能键即可或PasteFromClipboard,对于Jpeg等其它图形文件
或其它想要插入的东西,你可用InsertObjectDialog方法插入
该对象,真的很方便。对于Jpeg,当然你得注册此种类型的对象,
否则,你得用其它方法将它转换成可拷入剪切板的BMP图像,有
不少的图形控件都能进行这种格式转换。
对于RxLib,你还可在其中学习源代码以提高你的编程技巧。
从前人家的答案,去下载一个来试试吧?r
http://www.51delphi.com/delphi/soft?cx=RXLIB
 
既然这里是讨论VCL开发。那么我们就常识着自己写点吧。我也没有好方法。但是给你提供个方向。看能完善到什么程度了;
TBmpRichEdit=class(TRIchEdit);
private
FCanvas:TControlCanvas;
procedure WMPAINT(var msg:TMessage);message WM_PAINT;
procedure WM_KEYDOWN.....
WM_KEYUP,WM_LBUTTONDOWN,WM_RBUTTONDOWM
//继续处理其他消息。使得在输入字符时我们画的图象不会被破坏
.............
constructor TBMpRichEdit.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
FCanvas:=TControlCanvas.Create;
end;
destructor ...//Free the FCanvas;;;;;;;;;;;;
................
procedure TBMpRichEdit.WMPAINT(var Msg:TMessage);
begin
ACanvas.handle:=GetDC(Self.Handle);
with ACanvas do begin
//在这里画吧。
end;
ReleaseDC(Self.Handle,ACanvas.Handle);
end;.
光处理WM——PAINT是不够的。输入字符的时候就给破换了。而已这个样子的话。已经输入的字符被画上去的BMP破坏。呵呵。。你要处理很多相关的消息。必要的时候。可能要把RICHEDIT里的全部字符都TEXTOUT一次。呵呵。。注意效率和效果。
。。。。。。。。。。。。。。。。。。。

// that's all I can do...........Good Luck;
if you have a Good Idea,,,please Email Me:HuQingJiang@2911.net..Thanks a lot
 
Microsoft新的TOM组件支持图片,需要改写TRICHEDIT组件.
RICHED32.DLL版本号是多少,我忘记啦,可以查一下MSDN.
 
后退
顶部