Как конвертировать простой RichText в HTML теги в Delphi?
вы можете сказать, что в stackOverflow есть много дискуссий об этом, но большинство из них сложнее, чем то, что мне нужно, и в основном для других языков.
У меня есть удаленная база данных MySQL, в которой у меня есть таблица "справка" с кодом для заполнения страниц справки динамического веб-сайта, который использует эту базу данных.
Я решил сделать приложение Delphi для управления этим сайтом вместо того, чтобы делать сам веб-сайт для большей скорости и безопасность.
Я хочу поставить TRichEdit
чтобы сделать этот текст справки и использовать простые вещи, такие как выравнивание, жирный, курсив и подчеркнутые стили. Я не хочу использовать картинки и шрифты.
Как выбрать этот богатый текст в стиле и преобразовать его в HTML поместить в мое поле BLOB в удаленной базе данных а затем снова преобразовать в форматированный текст, если я хочу отредактировать его снова?
2 ответов
попробовав много разных решений, которые не дали точных результатов, я был вдохновлен этим решением:преобразование RTF в HTML и HTML в RTF.
идея в том, что TWebBrowser
control (в режиме design / edit) может обрабатывать и преобразовывать формат Rich text, когда он был вставлен из буфера обмена.
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
, затем вы должны сохранить собственный RTF, который он генерирует вместе с преобразованным HTML. Если единственная причина, по которой вы используете 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-это непростая задача. Есть соображения символов Юникода, стили шрифтов, коды шрифтов, форматирование абзацев, нумерованные списки, специальные символы HTML и многое другое. Даже если вам нужно только поддержать простой форматирование, пользователи часто используют другие функции, которые вызывают головные боли преобразования - например, копирование содержимого из MSWord и вставка его в приложение со всеми видами форматирования и стилей шрифта.
JvRichEditToHtml
делает достойную работу по преобразованию RTF в HTML, но мы в конечном итоге написали нашу собственную единицу преобразования, потому что мы делаем гораздо больше с RTF, чем простое форматирование. JvRichEditToHtml
должно легко обрабатывать то, что вы описали, пока пользователи не вводят сложный контент с помощью копирования/вставки или не используют сочетания клавиш для форматирования содержимого (например, маркеры = ctrl+shft+L, отступ = ctrl+M и т. д.).
есть также несколько хороших элементов управления редактированием HTML для Delphi, если вы хотите обойти сложности создания в RTF и преобразования в HTML:
результаты Google:: Delphi, HTML, редактор, компонент
- HTML редактор для CBuilder / Delphi
- компонент редактора HTML WYSIWYG для Дельфи
- поиск HTML-редактора VCL control
переполнение стека:: Delphi, HTML, редактор, компонент
- Delphi с интерфейсом HTML/CSS
- (и многие другие!)
мы используем:TRichView
из-за его обширных возможностей. Он может загружать / создавать RTF и экспортировать HTML. Однако это не бесплатно. Если вы ищете что-то бесплатно, TJvRichView
и JvRichEditToHtml
хорошие варианты.