gpt4 book ai didi

delphi - 将 RTF 文本从数据库加载到 TRichEdit

转载 作者:行者123 更新时间:2023-12-03 14:46:03 31 4
gpt4 key购买 nike

我目前正在将我们的软件解决方案从 Delphi 7 迁移到 2010。大部分更改都很简单,只剩下少量障碍。

在表单上,​​我们使用 TRichEdit,它显示从 MSSQL 数据库中的 blob 字段抓取的 rtf 文本。这是它在 Delphi 7 中的工作方式:

//Get RTF text from Blob field using TADOQuery
rtfStream := sql.CreateBlobStream(sql.FieldByName('rtftext'), BmRead) as TMemoryStream;

//Load into TRichEdit
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(rtfStream);

这将按 TRichEdit 组件中的预期显示 RTF,但 Delphi 2010 中的相同代码将 RTF 显示为纯文本,每个字符之间带有制表符。我认为这与从 Ansi 到 Unicode 的更改有很大关系,但我没有运气纠正这个问题。

任何帮助使其正常工作将不胜感激。谢谢

最佳答案

好吧,我明白了。

加载 rtf 文本:

//Get the data from the database as AnsiString
rtfString := sql.FieldByName('rtftext').AsAnsiString;

//Write the string into a stream
stream := TMemoryStream.Create;
stream.Clear;
stream.Write(PAnsiChar(rtfString)^, Length(rtfString));
stream.Position := 0;

//Load the stream into the RichEdit
RichEdit.PlainText := False;
RichEdit.Lines.LoadFromStream(stream);

stream.Free;

用于保存 rtf 文本:

//Save to stream
stream := TMemoryStream.Create;
stream.Clear;

RichEdit.Lines.SaveToStream(stream);
stream.Position := 0;

//Read from the stream into an AnsiString (rtfString)
if (stream.Size > 0) then begin
SetLength(rtfString, stream.Size);
if (stream.Read(rtfString[1], stream.Size) <= 0) then
raise EStreamError.CreateFmt('End of stream reached with %d bytes left to read.', [stream.Size]);
end;

stream.Free;

//Save to database
sql.FieldByName('rtftext').AsAnsiString := rtfString;

这花了我很长时间才弄清楚:)不过我想我已经学到了一件事......如果 Delphi 2010 中出现问题,通常与 unicode 有关;)

关于delphi - 将 RTF 文本从数据库加载到 TRichEdit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074383/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com