你可能会说,现在有很多在StackOverflow的这个讨论,但大部分都是比我需要的,多为其他语言更加复杂。
我有,我有一个“帮助”表,用于填充使用该数据库的动态网站的帮助页面的代码MySQL的远程数据库。
我决定做一个Delphi应用程序来管理,而不是由网站本身做更多的速度和安全性网站。
我想提出一个TRichEdit
做出帮助文本并使用简单的事情像对齐,粗体,斜体和下划线样式。 我不想用图片和字体。
如何挑选丰富样式的文本,并将其转换为HTML把我的BLOB字段在远程数据库中,然后再转换成丰富的文本,如果我想再次编辑呢 ?
想这并没有给出准确的结果,许多不同的解决方案后,我的灵感来自于该解决方案: 转换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;
如果你真的想使用生成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
都是不错的选择。