打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
delphi html编辑器,如何转换简单的富文本HTML标记在Delphi?(How to Convert Simple Ric
userphoto

2022.07.21 广东

关注

你可能会说,现在有很多在StackOverflow的这个讨论,但大部分都是比我需要的,多为其他语言更加复杂。

我有,我有一个“帮助”表,用于填充使用该数据库的动态网站的帮助页面的代码MySQL的远程数据库。

我决定做一个Delphi应用程序来管理,而不是由网站本身做更多的速度和安全性网站。

我想提出一个TRichEdit做出帮助文本并使用简单的事情像对齐,粗体,斜体和下划线样式。 我不想用图片和字体。

如何挑选丰富样式的文本,并将其转换为HTML把我的BLOB字段在远程数据库中,然后再转换成丰富的文本,如果我想再次编辑呢 ?

Answer 1:

想这并没有给出准确的结果,许多不同的解决方案后,我的灵感来自于该解决方案: 转换RTF到HTML和HTML为RTF 。

这个想法是, TWebBrowser控制(设计/编辑模式)可以处理并转换成正确的富文本格式,当它被从剪贴板粘贴。

uses SHDocVw, MSHTML;

function ClipboardToHTML(AParent: TWinControl): WideString;

var

wb: TWebBrowser;

function WaitDocumentReady: Boolean;

var

StartTime: DWORD;

begin

StartTime := GetTickCount;

while wb.ReadyState <> READYSTATE_COMPLETE do

begin

Application.HandleMessage;

if GetTickCount >= StartTime + 2000 then // time-out of max 2 sec

begin

Result := False; // time-out

Exit;

end;

end;

Result := True;

end;

begin

Result := '';

wb := TWebBrowser.Create(nil);

try

wb.Silent := True;

wb.Width := 0;

wb.Height := 0;

wb.Visible := False;

TWinControl(wb).Parent := AParent;

wb.HandleNeeded;

if wb.HandleAllocated then

begin

wb.Navigate('about:blank');

(wb.Document as IHTMLDocument2).designMode := 'on';

if WaitDocumentReady then

begin

(wb.Document as IHTMLDocument2).execCommand('Paste', False, 0);

Result := (wb.Document as IHTMLDocument2).body.innerHTML;

end;

end;

finally

wb.Free;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

RichEdit1.SelectAll;

RichEdit1.CopyToClipboard;

ShowMessage(ClipboardToHTML(Self));

end;

Answer 2:

如果你真的想使用生成RTF内容TRichEdit ,那么你应该保存它产生沿着转换的HTML原生RTF。 如果您使用的唯一原因TRichEdit是让你可以有简单的格式化功能,那么你可能会更好过使用生成本地HTML内容的HTML编辑控件。

不管你走哪条路,最好是存储用户编辑内容的原始格式,并根据需要为其他格式进行转换(而不是将其转换两个方向)。

如果你使用TRichEdit ,那么你可以很容易地流进出控制的RTF内容,但我建议TJvRichEdit过TRichEdit :

procedure GetRTFData(MS: TMemoryStream; RTF: TRichEdit);

begin

MS.Clear;

RTF.Lines.SaveToStream(MS);

MS.Position := 0;

end;

procedure SetRTFData(MS: TMemoryStream; RTF: TRichEdit);

begin

MS.Position := 0;

RTF.StreamFormat := sfRichText;

RTF.Lines.LoadFromStream(MS);

end;

手动转换RTF到HTML不是一件容易的事。 有Unicode字符的考虑,字体样式,字体规范,段落格式,编号列表,特殊的HTML字符,和这么多。 即使你只需要支持简单的格式,用户经常使用会使转换头痛等功能 - 如从复制的MSWord内容,并与所有种类的格式和字体样式粘贴到您的应用程序。

JvRichEditToHtml做一份体面的工作转换RTF到HTML,但我们最终编写我们自己的转换单元,因为我们做了很多更与RTF比简单的格式。 JvRichEditToHtml应该很容易处理,只要你所描述什么是用户不通过复制/粘贴介绍复杂的内容,或者使用键盘快捷键的内容(例如,子弹= Ctrl + Shift + L,缩进= CTRL + M格式化等)。

还有德尔福几个不错的HTML编辑控件,如果你想绕过在RTF创作和转换为HTML的复杂性:

谷歌搜索结果::德尔福,HTML,编辑器,组件

HTML编辑器的CBuilder /德尔福

所见即所得的HTML编辑器组件德尔福

对于HTML编辑器VCL控制的追求

堆栈溢出::德尔福,HTML,编辑器,组件

德尔福与HTML / CSS界面

(和其他许多!)

我们使用TRichView由于其广泛的能力。 它可以加载/创建RTF,出口HTML。 它不是免费的但是。 如果您正在寻找免费的东西, TJvRichView和JvRichEditToHtml都是不错的选择。

文章来源: How to Convert Simple RichText to HTML tags in Delphi?

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi中对Oracle存取RTF文档
讲述如何开发一个控件,很有价值
delphi中利用TRichEdit实现上标 下标问题
mybase【软件推荐】
[html] 第119天 说说你对富文本的理解,你有用过哪些富文本编辑器呢?
delphi生成excel之csv文本的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服