网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Delphi编程 >> 文章正文
  如何从一个RichEdit复制格式文本到另一个RichEdit            【字体:
如何从一个RichEdit复制格式文本到另一个RichEdit
作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-3    
正在装载数据……

redt1里面有一些文本.
通过代码实现将redt1的内容原封不动的复制到redt2中.
用CopyToClipboard和PasteFromClipboard只能粘贴一次.
比如:
for i:=0 to 10 do
begin
redt1.selectAll;
redt1.CopyToClipboard;
redt2.PasteFromClipBoard;
end;
实际只粘贴了一次.

从网上找到一个方法:


function EditStreamInCallback(dwCookie: Longint; pbBuff: PByte;
cb: Longint; var pcb: Longint): Longint; Stdcall;
var
  theStream: TStream;
  dataAvail: LongInt;
begin
  theStream := TStream(dwCookie);
  with theStream do begin
    dataAvail := Size - Position;
    Result := 0; {assume everything is ok}
    if dataAvail <= cb then begin
      pcb := Read(pbBuff^, dataAvail);
      if pcb <> dataAvail then {couldn't read req. amount of bytes}
        result := E_FAIL;
    end
    else begin
      pcb := Read(pbBuff^, cb);
      if pcb <> cb then
        result := E_FAIL;
    end;
  end;
end;

Function EditStreamOutCallback(dwCookie: Longint; pbBuff: PByte;
    cb: Longint; var pcb: Longint): Longint; stdcall;
var
   theStream: TStream;
begin
   theStream := TStream(dwCookie);

   with theStream do begin
     If cb > 0 Then
       pcb := Write(pbBuff^, cb);
     Result := 0;
   end;
end;

Procedure GetRTFSelection (aRichEdit: TRichEdit; intoStream: TStream);
Var
  editstream: TEditStream;
Begin
  With editstream Do Begin
    dwCookie:= Longint(intoStream);
    dwError:= 0;
    pfnCallback:= EditStreamOutCallBack;
  end;
  aRichedit.Perform( EM_STREAMOUT, SF_RTF or SFF_SELECTION,longint(@editstream));
End;

Procedure PutRTFSelection (aRichEdit: TRichEdit; sourceStream: TStream);
Var
  editstream: TEditStream;
Begin
  sourceStream.Position := 0;
  With editstream Do Begin
    dwCookie:= Longint(sourceStream);
    dwError:= 0;
    pfnCallback:= EditStreamInCallBack;
  end;
  aRichedit.Perform( EM_STREAMIN, SF_RTF or SFF_SELECTION,  longint(@editstream));
End;

调用:
var
  aMemStream:TMemoryStream;
  I:Integer;
begin
  redt1.SelectAll;
  aMemStream := TMemoryStream.Create;
  try
    getRTFSelection (redt1, aMemStream);
    for  I:=0 to 10 do
      putRTFSelection (redt2, aMemStream);
  finally
    aMemStream.Free;
  end;
end;
 




本文来源:http://blog.csdn.net/mastersky/archive/2007/07/04/1678816.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     在delphi中使用xml文档有…
     初探delphi 7 中的插件编…
     delphi 2006(dexter) & …
     获得windows的版本信息。
     “序列号输入助手”源代…
     rs232串口通讯模块
     ado方式下判断数据表是否…
  • Struts2学习:在struts2中集…

  • 设计模式之--Bridge

  • 浅析Spring框架下PropertyPl…

  • SPRING+STRUTS+HIBERNATE登录…

  • 一个一年工作经验的java工程…

  • 一个关于Comparator的使用例…

  • 摘:主题:   using springmo…

  • 在spring MVC中配置多个视图

  • 一个老程序员的心里话:少发…

  • 看完了第二遍C++Primer,学习…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David