您可能会说在stackOverflow中有很多关于此的讨论,但是大多数都比我需要的更复杂,主要用于其他语言.
我有一个MySQL远程数据库,其中有一个“帮助”表,其中包含用于填充使用此数据库的动态网站的帮助页面的代码.
我决定制作一个Delphi应用程序来管理该网站,而不是通过网站本身来实现更高的速度和安全性.
我想放一个TRichEdit来制作帮助文本并使用简单的东西,如对齐,粗体,斜体和带下划线的样式.我不想使用图片和字体.
如何选择丰富的样式文本并将其转换为HTML以放入远程数据库中的BLOB字段,然后如果我想再次编辑它,则重新转换为富文本?
解决方法
在尝试了许多不能给出准确结果的不同解决方案后,我受到了这个解决方案的启发:
Convert RTF to HTML and HTML to RTF.
我们的想法是,TWebBrowser控件(在设计/编辑模式下)可以在从剪贴板粘贴时正确处理和转换Rich文本格式.
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;