Редактор HTML для CBuilder / Delphi - PullRequest
       15

Редактор HTML для CBuilder / Delphi

5 голосов
/ 31 декабря 2008

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

Ответы [ 4 ]

7 голосов
/ 31 декабря 2008

Вы можете поместить TWebBrowser в форму и включить дизайн-мод, например:

// Delphi code..
(WebBrowser1.Document as IHTMLDocument2).designMode := 'on';

После выполнения вышеуказанной строки страница будет редактируемой. Вы можете ввести дополнительный текст, удалить и т. Д. Если вы хотите сделать выделение жирным шрифтом или вставить изображения, вам придется добавить некоторые кнопки для программирования этого. Круто то, что вы можете сделать это либо из Delphi (или C ++ builder в вашем случае), либо вы можете добавить javascript на страницу, чтобы редактировать себя.

Содержимое страницы можно получить с

(WebBrowser.Document as IHTMLDocument2).body.innerHTML;

Помните, что (WebBrowser.Document как IHTMLDocument2) может быть ноль.


В любом случае, я могу представить, что есть компоненты, которые делают всю работу за вас, что, вероятно, является лучшим путем, чем изобретать колесо.

4 голосов
/ 31 декабря 2008

Я бы рекомендовал TRichView из-за его поддержки мирового класса и глубокого набора функций. Хотя это не настоящий редактор HTML, он поддерживает возможность экспорта в HTML, даже при необходимости генерируя соответствующие стили CSS. Я использую его для обработки электронной почты в части нашего основного продукта, и она работает очень хорошо. Внутренне хранилище имеет формат RTF (расширенный для лучшей поддержки изображений) или в качестве проприетарного формата. Существует множество примеров простых редакторов, которые легко подойдут вам.

1 голос
/ 13 сентября 2012

http://www.bsalsa.com/

предоставляет бесплатный набор EmbeddedWebBrowser компонентов с компонентом «Редактор конструктора» что вы ссылаетесь на окно EmbeddedBrowser, чтобы управлять режимом дизайна и иметь возможность редактирования сохранить в файл, вставить ссылки, изображения и т.д ...

, кажется, работает хорошо!

1 голос
/ 18 апреля 2010

в 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();
        }
}
//---------------------------------------------------------------------------
...