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

你可能会说,现在有很多在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?

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值