2008-12-31 9 views
5

J'ai besoin de trouver un composant d'éditeur HTML WYSIWYG de base pour C++ Builder 5 pour permettre aux utilisateurs de créer du texte simple que je vais coller dans un modèle de page HTML existant. Juste un soutien simple pour créer des liens, ajouter des images, utiliser les en-têtes/gras/italique.Éditeur HTML pour CBuilder/Delphi

Répondre

7

Vous pouvez déposer une TWebBrowser sur un formulaire et permettent DesignMode sur elle, comme ceci:

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

Après l'exécution de la ligne ci-dessus, la page sera modifiable. Vous pouvez taper du texte supplémentaire, supprimer, etc. Si vous voulez faire des sélections en gras ou insérer des images, vous devrez ajouter quelques boutons pour programmer cela. Le truc cool est que vous pouvez le faire soit à partir de Delphi (ou constructeur C++ dans votre cas) ou vous pouvez ajouter javascript sur la page pour éditer lui-même.

Le contenu de la page peuvent être récupérés à partir

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

Rappelez-vous que (comme WebBrowser.Document IHTMLDocument2) pourrait être nul.


Quoi qu'il en soit, je peux imaginer qu'il ya des composants autour qui font tout le travail pour vous, ce qui est probablement une meilleure route à prendre que de réinventer la roue.

+0

J'espérais avoir un composant qui a déjà tous les boutons inclus - quelque chose comme un bébé Frontpage – Riho

+2

Si vous avez RADPHP, jetez un oeil sur le dossier 'Embarcadero \ RadPHP \ 3.0 \ plugins \'. Vous trouverez 'uHTMLEdit.pas' et' uHTMLEdit.dfm'. C'est un éditeur HTML à une forme qui n'a pas de dépendances autres que la VCL standard. –

+0

@WoutervanNifterick - J'ai essayé cette unité, mais elle ne fonctionnera pas avec les fichiers MOST html: http://www.stackoverflow.com/questions/39594393/twebbrowser-crashes-with-some-html-files – Ampere

4

Je recommanderais TRichView en raison de son support de classe mondiale et de son ensemble de fonctionnalités avancées. Bien que ce ne soit pas un vrai éditeur "HTML", il supporte la possibilité d'exporter en HTML, en générant même les styles CSS appropriés si nécessaire. Je l'utilise pour gérer la partie email de notre produit principal et cela fonctionne très bien. En interne, le stockage est soit RTF (étendu pour mieux prendre en charge les images), soit en tant que format propriétaire. Il existe de nombreux exemples d'éditeurs simples qui pourraient facilement répondre à vos besoins.

+0

J'ai utilisé TRichView pendant près de 10 ans. C'est bien, mais peut-être trop pour un simple éditeur. Le seul défaut est qu'il ne gère pas encore l'alignement des images. Nous avons travaillé sur Sergey pendant des années en essayant de l'amener à l'ajouter. Ça a toujours été ... la prochaine version. (Peut-être que ce commentaire l'aura sur lui). – lkessler

1

en C++ Builder, ce serait quelque chose comme ceci:

(wb est 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/

fournit un ensemble gratuit de EmbeddedWebBrowser composants avec un composant Modifier Designer que vous liez à la fenêtre EmbeddedBrowser pour contrôler le mode de conception et avoir le contrôle d'édition enregistrer dans un fichier, insérer des liens, des images, etc ...

semble bien fonctionner!

Questions connexes