- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试围绕 TRichEdit
编写一个包装类,它可以将 RTF 编码为明文或从明文解码。
这是我到目前为止所写的内容:
type
TRTF = class
private
FRichEdit : TRichEdit;
procedure SetText(const AText: string);
function GetText: string;
class function Convert(const AInput: string; AEncode: Boolean): string; inline; static;
public
constructor Create;
destructor Destroy; override;
class function Decode(const AInput: string): string; static;
class function Encode(const AInput: string): string; static;
end;
constructor TRTF.Create;
begin
FRichEdit := TRichEdit.CreateParented(HWND_MESSAGE);
end;
destructor TRTF.Destroy;
begin
FRichEdit.Free;
inherited;
end;
function TRTF.GetText: string;
var
Stream: TStringStream;
begin
if FRichEdit.PlainText then begin
Stream := TStringStream.Create('', TEncoding.ANSI);
end else begin
Stream := TStringStream.Create('', TEncoding.ASCII);
end;
try
FRichEdit.Lines.SaveToStream(Stream, Stream.Encoding);
Result := Stream.DataString;
finally
Stream.Free;
end;
end;
procedure TRTF.SetText(const AText: string);
var
Stream: TStringStream;
begin
if FRichEdit.PlainText then begin
Stream := TStringStream.Create(AText, TEncoding.ANSI);
end else begin
Stream := TStringStream.Create(AText, TEncoding.ASCII);
end;
try
Stream.Seek(0, TSeekOrigin.soBeginning);
FRichEdit.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;
class function TRTF.Convert(const AInput: string; AEncode: Boolean): string;
var
RTF: TRTF;
begin
RTF := TRTF.Create;
try
RTF.FRichEdit.PlainText := AEncode;
RTF.SetText(AInput);
RTF.FRichEdit.PlainText := not AEncode;
Result := RTF.GetText;
finally
RTF.Free;
end;
end;
class function TRTF.Encode(const AInput: string): string;
begin
Result := Convert(AInput, True);
end;
class function TRTF.Decode(const AInput: string): string;
begin
Result := Convert(AInput, False);
end;
对于用户默认 ANSI 代码页可以表示的所有内容,这似乎都相当有效。
对于其他字符,它会失败(将它们转换为 ?
)。
有没有一种简单的方法可以在我的代码中启用正确的 Unicode 处理?
当 TRichEdit
时,我尝试使用 TEncoding.Unicode
和 TEncoding.UTF8
作为 TStringStream
的编码> 设置为 PlainText := True
,但这不起作用。
最佳答案
我认为你把这个问题过于复杂化了。根本不需要使用 PlainText
属性。将其保留为默认设置 True
。然后,要读取/写入 RTF,请使用 LoadFromStream 和 SaveToStream。要读取/写入纯文本,请使用 Lines.Text
属性。
这已经是我能做到的最简单的了:
type
TRTF = class
strict private
class function CreateRichEdit: TRichEdit; static;
public
class function Decode(const AInput: string): string; static;
class function Encode(const AInput: string): string; static;
end;
class function TRTF.CreateRichEdit: TRichEdit;
begin
Result := TRichEdit.CreateParented(HWND_MESSAGE);
end;
class function TRTF.Encode(const AInput: string): string;
var
RichEdit: TRichEdit;
Stream: TStringStream;
begin
RichEdit := CreateRichEdit;
try
RichEdit.Lines.Text := AInput;
Stream := TStringStream.Create;
try
RichEdit.Lines.SaveToStream(Stream);
Result := Stream.DataString;
finally
Stream.Free;
end;
finally
RichEdit.Free;
end;
end;
class function TRTF.Decode(const AInput: string): string;
var
RichEdit: TRichEdit;
Stream: TStringStream;
begin
RichEdit := CreateRichEdit;
try
Stream := TStringStream.Create(AInput);
try
RichEdit.Lines.LoadFromStream(Stream);
Result := RichEdit.Lines.Text;
finally
Stream.Free;
end;
finally
RichEdit.Free;
end;
end;
关于delphi - TRichEdit 支持 Unicode 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902084/
我正在尝试找到一种在使用 RichEdit 控件打印方法时在 Delphi 中强制分页的方法。由于某些愚蠢的原因,Rich Edit 控件忽略了\page 命令。 有谁知道有什么方法可以做到这一点吗?
如何在同一行书写不同颜色的文字? (我使用richedit)。 procedure TForm1.btnEClick(sender: TObject); begin m0.SelAttribute
很难说这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center . 10
我目前在我的一个软件(在 Delphi 7 中)中使用 TRichEdit 作为“实时”事件日志查看器,我最近分析了我的软件,TRichEdit 消耗了超过 40% 的软件 cpu 时间。 我只是想测
有没有办法改变插入符号的像素位置? 我想每次移动鼠标时都移动护理点。 喜欢: 鼠标移动: MoveCaretPos(X, Y); 最佳答案 不,您不能将插入符号的位置设置在特定点,而必须将插入符号设置
我使用 TRichEdit 来显示我的应用程序中完成的最后操作。我的 TRichEdit 的第一行应该是最后一个操作。如果操作失败,我想把这条线变成红色。 我的问题是我无法在 TRichEdit 顶部
TRichEdit 控件中每行的左侧有一个不可见的空间,其中光标变为右上箭头,当您单击此处时,整行都会被选中。当 TRichEdit 的文本对齐方式为居中或右时,很容易看到它。我相信这个空间被称为选择
我需要在运行时使用 TRichEdit 来执行 rtf 到文本的转换,如所讨论的 here 。我成功地做到了这一点,但我必须设置一个虚拟表单作为父表单,否则我无法填充 TRichedit.Lines。
我想创建一个自定义控件(TRichEdit 的后代)。我只想在编辑字段上方添加一些文本。 我创建了自己的控件,并重写了构造函数来为标题创建 TLabel。它有效,但我的问题是:如何将标签移到 Rich
我有返回字符索引的函数 GetCharFromPos(Pt: TPoint): Integer; 现在我想了解该职位的特征。像 GetCharByIndex(Index: Integer): Char
我需要在 TRichEdit 中支持“友好名称超链接”,我找到的所有解决方案都基于自动 URL(EM_AUTOURLDETECT),它通过检测用户输入的以 www(或 http)开头的字符串来工作。
有没有办法暂停/恢复 TRichEdit 控件中的撤消记录?是否有要发送的消息或要设置的模式? 编辑 我已经通过使用 ITextDocument 接口(interface)解决了这个问题。请看我下面的
如何在 TRichEdit 中阻止拖放?德尔福代码我使用 Rich edit,并且很难阻止拖放功能,特别是从表单外部拖动文本,比如从 IE 拖到我的 RichEdit。 最佳答案 参见RevokeDr
我目前正在将我们的软件解决方案从 Delphi 7 迁移到 2010。大部分更改都很简单,只剩下少量障碍。 在表单上,我们使用 TRichEdit,它显示从 MSSQL 数据库中的 blob 字段
我正在使用 tRichEdit 组件,并使用 tSpinedit 来确定制表符间距,使用 trichedit.oncreate 事件来生成制表符位置数组。这工作正常,我生成的每个新段落都使用定义的制表
我在使用 TRichEdit 时遇到一些问题。 第一个问题是,如果我尝试将剪贴板中的大量文本粘贴到空的 TRichEdit 中,它会截断文本的底部。 我猜想与第一个问题相关的第二个问题是,我似乎限制了
我正在尝试围绕 TRichEdit 编写一个包装类,它可以将 RTF 编码为明文或从明文解码。 这是我到目前为止所写的内容: type TRTF = class private FRi
我正在使用当前代码在 TRichEdit 上突出显示 URL: procedure TForm1.WndProc(var Message: TMessage); var p: TENLink;
我正在尝试将 TRichEdit 组件上的富文本转换为 HTML 标签。我有一个函数用于此,但它不起作用,因为组件中的文本始终以 PlainText 发送。组件上的 PlainText 选项设置为 f
我就这个问题给你一个简短的想法。 从数据库中检索 (id,name) 字段记录到列表框中。 从列表中选择任何记录。 将备注(Blob 类型)显示到选定 ID 的丰富编辑框中。 除了两个记录都很好。 这
我是一名优秀的程序员,十分优秀!