【问题标题】:Get richtext from a richedit in Delphi从 Delphi 的richedit 中获取richtext
【发布时间】:2010-09-03 14:27:16
【问题描述】:

有没有办法在不使用 savetostream 的情况下从 Richedit 中获取 RTF 数据

strStream := TStringStream.Create('') ;
try
  RichEdit.Lines.SaveToStream(strStream);
  Text := strStream.DataString;
  strStream.CleanupInstance;
finally
  strStream.Free

【问题讨论】:

  • 不要显式调用CleanupInstance,它会在流被销毁时调用。
  • 换句话说,使用Free() 而不是CleanupInstance()。如果SaveToStream() 引发异常,您应该使用try/finally

标签: delphi delphi-2007 richedit


【解决方案1】:

Tim 从 RichEdit 控件获取 RTF 数据的唯一方法是使用 Stream,因为检索 RTF 数据的 windows 消息 (EM_STREAMOUT) 需要 EditStreamCallback 结构,这是 windows 用来传输的方式rtf 数据进出richedit 控件。

所以你可以使用自己的示例代码,或者实现对windows消息EM_STREAMOUT的调用。

【讨论】:

  • SaveToStream() 方法在内部使用EM_STREAMOUT。为什么不使用SaveToStream()
【解决方案2】:
function RichTextToStr(red : TRichEdit) : string;

var   ss : TStringStream;

begin
  ss := TStringStream.Create('');

  try
    red.Lines.SaveToStream(ss);
    Result := ss.DataString;
  finally
    ss.Free;
  end;
end;

procedure CopyRTF(redFrom,redTo : TRichEdit);

var   s : TMemoryStream;

begin
  s := TMemoryStream.Create;

  try
    redFrom.Lines.SaveToStream(s);
    s.Position := 0;
    redTo.Lines.LoadFromStream(s);
  finally
    s.Free;
  end;
end;

我可以证明偏离模式会导致沮丧......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多