Мне нужно найти базовый компонент редактора WYSIWYG HTML для C++ Builder 5, чтобы пользователи могли создавать простой текст, который я вставляю в существующий шаблон HTML-страницы. Просто поддержка для создания ссылок, добавления изображений, использования заголовков / полужирного / курсива.





Вы можете перетащить TWebBrowser в форму и включить для нее режим дизайна, например:
// Delphi code..
(WebBrowser1.Document as IHTMLDocument2).designMode := 'on';
После выполнения указанной выше строки страница станет доступной для редактирования. Вы можете ввести дополнительный текст, удалить и т. д. Если вы хотите выделить выделение жирным шрифтом или вставить изображения, вам придется добавить несколько кнопок, чтобы запрограммировать это. Круто то, что вы можете сделать это либо из Delphi (или C++ Builder в вашем случае), либо вы можете добавить javascript на страницу для редактирования.
Содержимое страницы можно получить из
(WebBrowser.Document as IHTMLDocument2).body.innerHTML;
Помните, что (WebBrowser.Document as IHTMLDocument2) может быть нулевым.
В любом случае, я могу представить, что вокруг есть компоненты, которые делают всю работу за вас, и это, вероятно, лучший путь, чем изобретать колесо.
Если у вас есть RADPHP, взгляните на Embarcadero\RadPHP\3.0\plugins` folder. You'll find uHTMLEdit.pas` и uHTMLEdit.dfm. Это редактор HTML одной формы, у которого нет других зависимостей, кроме стандартного VCL.
@WoutervanNifterick - Я пробовал этот модуль, но он не работает с БОЛЬШИНСТВОМ html файлов: stackoverflow.com/questions/39594393/…
«После выполнения вышеуказанной строки страница станет доступной для редактирования». Мне пришлось добавить webBrowser1.Navigate ('about: blank'); до этого или я получу исключение - предположительно, потому что страницы нет.
Я бы порекомендовал TRichView из-за его поддержки мирового класса и обширного набора функций. Хотя это не настоящий редактор «HTML», он поддерживает возможность экспорта в HTML, даже при необходимости генерируя соответствующие стили CSS. Я использую его для обработки электронной почты в нашем основном продукте, и он работает очень хорошо. Внутреннее хранилище имеет формат RTF (расширенный для лучшей поддержки изображений) или проприетарный формат. Существует множество примеров простых редакторов, которые легко подойдут для ваших нужд.
Пользуюсь TRichView почти 10 лет. Это хорошо, но для простого редактора может оказаться излишним. Единственный недостаток - он еще не поддерживает выравнивание изображений. Мы много лет работали над Сергеем, пытаясь уговорить его добавить это. Всегда была ... следующая версия. (Возможно, этот комментарий его подстегнет).
в C++ Builder это будет примерно так:
(wb - это TCppWebBrowser)
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "mshtml.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnNavigateAndEditClick(TObject *Sender)
{
wb->Navigate((WideString)"www.google.com");
while (wb->Busy)
Application->ProcessMessages();
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
html->put_designMode(L"On");
html->Release();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnInsertImageClick(TObject *Sender)
{
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
VARIANT var;
VARIANT_BOOL receive;
html->execCommand(L"InsertImage",true,var, &receive);
html->Release();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnGetHtmlClick(TObject *Sender)
{
if (wb->Document)
{
IHTMLDocument2 *html;
wb->Document->QueryInterface<IHTMLDocument2>(&html);
IHTMLElement *pElement;
html->get_body(&pElement);
pElement->get_parentElement(&pElement);
wchar_t *tmp;
pElement->get_outerHTML(&tmp);
Memo1->Lines->Text = tmp;
pElement->Release();
html->Release();
}
}
//---------------------------------------------------------------------------
предоставляет бесплатный набор компонентов EmbeddedWebBrowser с компонентом Edit Designer
которые вы связываете с окном EmbeddedBrowser, чтобы управлять режимом разработки и иметь контроль редактирования
сохранить в файл, вставить ссылки, изображения и т. д.
вроде работает хорошо!
Я надеялся получить компонент, в котором уже есть все кнопки - что-то вроде детской Frontpage.