2008-12-31 39 views
5

Necesito encontrar el componente de editor HTML WYSIWYG básico para C++ Builder 5 para permitir a los usuarios crear texto simple que pegaré en la plantilla de página HTML existente. Simplemente un soporte simple para crear enlaces, agregar imágenes, usar encabezados/negrita/cursiva.Editor de HTML para CBuilder/Delphi

Respuesta

7

que puede caer un TWebBrowser en un formulario y permitir DesignMode en él, así:

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

Después de ejecutar la línea anterior, la página será editable. Puede escribir texto adicional, eliminar, etc. Si desea hacer selecciones en negrita o insertar imágenes, tendrá que agregar algunos botones para programar eso. Lo bueno es que puedes hacerlo desde Delphi (o constructor de C++ en tu caso) o puedes agregar javascript en la página para editarse.

El contenido de la página se pueden recuperar de

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

Recuerde que (WebBrowser.Document como IHTMLDocument2) podría ser nula.


De todos modos, puedo imaginar que hay alrededor de los componentes que hacen todo el trabajo por usted, que es probablemente la mejor ruta a tomar de reinventar la rueda.

+0

Tenía la esperanza de tener un componente que ya incluye todos los botones - algo así como un bebé Página de inicio – Riho

+2

Si tiene RADPHP, eche un vistazo a la carpeta 'Embarcadero \ RadPHP \ 3.0 \ plugins \'. Encontrarás 'uHTMLEdit.pas' y' uHTMLEdit.dfm'. Es un editor HTML de una sola forma que no tiene dependencias distintas de la VCL estándar. –

+0

@WoutervanNifterick - Intenté esta unidad, pero no funcionará con MOST archivos html: http://www.stackoverflow.com/questions/39594393/twebbrowser-crashes-with-some-html-files – Ampere

4

Recomendaría TRichView debido a su soporte de clase mundial, y el conjunto de características profundas. Si bien no es un verdadero editor de "HTML", sí admite la capacidad de exportar a HTML, incluso generando los estilos CSS adecuados si es necesario. Lo uso para manejar la porción de correo electrónico de nuestro producto principal y funciona muy bien. Internamente, el almacenamiento es RTF (ampliado para admitir imágenes mejor), o como un formato propietario. Hay muchos ejemplos de editores simples que se adaptarían fácilmente a sus necesidades.

+0

He usado TRichView durante casi 10 años. Es bueno, pero puede ser exagerado para un editor simple. La única deficiencia es que todavía no maneja la alineación de imágenes. Hemos estado trabajando en Sergey durante años tratando de que lo agregue. Siempre ha sido ... próxima versión. (Quizás este comentario lo excitará). – lkessler

1

en C++ Builder, sería algo como esto:

(WB es un 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(); 
     } 
} 
//--------------------------------------------------------------------------- 
1

http://www.bsalsa.com/

suministra un conjunto gratuito de EmbeddedWebBrowser componentes con un componente de edición Diseñador que se vincula a la ventana EmbeddedBrowser para controlar el modo de diseño y tiene control de edición guardar en un archivo, insertar enlaces, imágenes, etc ...

parece funcionar bien!

Cuestiones relacionadas