你可能會說,現(xiàn)在有很多在StackOverflow的這個討論,但大部分都是比我需要的,多為其他語言更加復(fù)雜。 我有,我有一個“幫助”表,用于填充使用該數(shù)據(jù)庫的動態(tài)網(wǎng)站的幫助頁面的代碼MySQL的遠(yuǎn)程數(shù)據(jù)庫。 我決定做一個Delphi應(yīng)用程序來管理,而不是由網(wǎng)站本身做更多的速度和安全性網(wǎng)站。 我想提出一個TRichEdit做出幫助文本并使用簡單的事情像對齊,粗體,斜體和下劃線樣式。 我不想用圖片和字體。 如何挑選豐富樣式的文本,并將其轉(zhuǎn)換為HTML把我的BLOB字段在遠(yuǎn)程數(shù)據(jù)庫中,然后再轉(zhuǎn)換成豐富的文本,如果我想再次編輯呢 ? Answer 1: 想這并沒有給出準(zhǔn)確的結(jié)果,許多不同的解決方案后,我的靈感來自于該解決方案: 轉(zhuǎn)換RTF到HTML和HTML為RTF 。 這個想法是, TWebBrowser控制(設(shè)計/編輯模式)可以處理并轉(zhuǎn)換成正確的富文本格式,當(dāng)它被從剪貼板粘貼。 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內(nèi)容TRichEdit ,那么你應(yīng)該保存它產(chǎn)生沿著轉(zhuǎn)換的HTML原生RTF。 如果您使用的唯一原因TRichEdit是讓你可以有簡單的格式化功能,那么你可能會更好過使用生成本地HTML內(nèi)容的HTML編輯控件。 不管你走哪條路,最好是存儲用戶編輯內(nèi)容的原始格式,并根據(jù)需要為其他格式進(jìn)行轉(zhuǎn)換(而不是將其轉(zhuǎn)換兩個方向)。 如果你使用TRichEdit ,那么你可以很容易地流進(jìn)出控制的RTF內(nèi)容,但我建議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; 手動轉(zhuǎn)換RTF到HTML不是一件容易的事。 有Unicode字符的考慮,字體樣式,字體規(guī)范,段落格式,編號列表,特殊的HTML字符,和這么多。 即使你只需要支持簡單的格式,用戶經(jīng)常使用會使轉(zhuǎn)換頭痛等功能 - 如從復(fù)制的MSWord內(nèi)容,并與所有種類的格式和字體樣式粘貼到您的應(yīng)用程序。 JvRichEditToHtml做一份體面的工作轉(zhuǎn)換RTF到HTML,但我們最終編寫我們自己的轉(zhuǎn)換單元,因為我們做了很多更與RTF比簡單的格式。 JvRichEditToHtml應(yīng)該很容易處理,只要你所描述什么是用戶不通過復(fù)制/粘貼介紹復(fù)雜的內(nèi)容,或者使用鍵盤快捷鍵的內(nèi)容(例如,子彈= Ctrl + Shift + L,縮進(jìn)= CTRL + M格式化等)。 還有德爾福幾個不錯的HTML編輯控件,如果你想繞過在RTF創(chuàng)作和轉(zhuǎn)換為HTML的復(fù)雜性: 谷歌搜索結(jié)果::德爾福,HTML,編輯器,組件 HTML編輯器的CBuilder /德爾福 所見即所得的HTML編輯器組件德爾福 對于HTML編輯器VCL控制的追求 堆棧溢出::德爾福,HTML,編輯器,組件 德爾福與HTML / CSS界面 (和其他許多!) 我們使用TRichView由于其廣泛的能力。 它可以加載/創(chuàng)建RTF,出口HTML。 它不是免費(fèi)的但是。 如果您正在尋找免費(fèi)的東西, TJvRichView和JvRichEditToHtml都是不錯的選擇。 文章來源: How to Convert Simple RichText to HTML tags in Delphi? |
|