HTML-редактор для CBuilder/Delphi
-
03-07-2019 - |
Вопрос
Мне нужно найти базовый компонент HTML-редактора WYSIWYG для 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 как IHTMLDocument2) может быть нулевым.
В любом случае, я могу себе представить, что существуют компоненты, которые делают всю работу за вас, и это, вероятно, лучший путь, чем изобретать велосипед.
Другие советы
Я бы посоветовал TRichView благодаря поддержке мирового класса и глубокому набору функций.Хотя это не настоящий HTML-редактор, он поддерживает возможность экспорта в HTML, даже генерируя при необходимости соответствующие стили CSS.Я использую его для работы с электронной почтой нашего основного продукта, и он работает очень хорошо.Внутреннее хранилище представляет собой либо RTF (расширенный для лучшей поддержки изображений), либо собственный формат.Существует множество примеров простых редакторов, которые легко подойдут вашим потребностям.
в 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
компоненты с компонентом редактирования дизайнера, который вы ссылаетесь на EmbeddedBrowser
Окно для управления режимом проектирования и редактирование управления Сохраните в файле, вставьте ссылки, изображения и т. Д.
кажется, работает хорошо!