2012-10-23 7 views
4

Comment créer une interface WYSIWYG 'facile' à utiliser pour créer des fichiers HTML? C'EST À DIRE. Un éditeur HTML. Spécifiquement pour créer des messages e-mail formatés, avec des images, des liens hypertextes, la mise en forme de police, des puces, indentation, etc ...Delphi - Comment créer un éditeur HTML WYSIWYG en utilisant Delphi?

Note [jd]: c'est une question à réponse automatique destinée à être un pointeur pour les autres.

+0

L'élément visé dans la réponse a été déplacé vers une nouvelle adresse - trouvée, et ont mis à jour la réponse ... – HeartWare

+0

Embarcadero a son propre éditeur web basé sur TWebBrowser. Mais il a des problèmes: http://stackoverflow.com/questions/39594393/twebbrowser-crashes-with-most-html-files – Ampere

+0

Ceci est une question valide (fermée pour une mauvaise raison) avec une réponse super utile. Voter pour la réouverture. – Ampere

Répondre

7

Les composants du navigateur Web EmbeddedWB de bsalsa.com offrent uniquement les outils pour le faire.

Editer: bsalsa.com n'existe plus. Nouvel emplacement: https://bitbucket.org/wpostma/tembeddedwb

Vous placez un contrôle EmbeddedWB (navigateur Web) (fenêtre) pour afficher le code HTML, par exemple à partir d'un site Web. Vous placez ensuite un composant EditDesigner sur le formulaire et le liez au contrôle EmbeddedWB dans l'inspecteur d'objets - Propriétés. Avec EditDesigner, vous pouvez paramétrer le WebBrowser en mode édition et effectuer des modifications de base, telles que l'insertion ou la suppression de texte ou la définition de certaines propriétés de police. Pas un éditeur complet cependant.

Ne désespérez pas, ce paquet est un wrapper complet à l'éditeur MSHTML. Une légère addition à l'unité EditDesigner vous permet un accès complet à l'interface execCommand de MSHTML.

Code d'origine:

procedure ExecCommand(Command: Widestring; ShowUI: Boolean; Value: Integer); 
     begin 
     if Assigned(FEmbeddedWB) then 
      GetHTMLDoc2FromWB.execCommand(Command, showUI, Value); 
     end; 

Vous verrez que cette procédure EditDesigner.pas accepte uniquement la valeur et parse Integer au HTMLDoc.execCommand. Ce qui est tout ce dont vous avez besoin pour certaines commandes, ayant généralement besoin de 0 comme valeur. Mais de nombreuses commandes ont besoin d'informations Chaîne pour la valeur, telles que la modification du nom de la police. Le HTMLDoc.execCommand acceptera réellement un variant comme valeur, ainsi j'ai ajouté une autre procédure à EditDesigner.pas, comme suit, pour donner l'accès presque complet à l'éditeur MSHTML, si vous connaissez les commandes à envoyer.

procedure TEditDesigner.ExecCommandEx(Command: Widestring; ShowUI: Boolean; Value: OleVariant); 
    begin 
     if Assigned(FEmbeddedWB) then 
      GetHTMLDoc2FromWB.execCommand(Command, showUI, Value); 
    end; 

Vous accédez à cette procédure lorsque vous devez envoyer une commande plus avancée à l'éditeur. Cela changera la couleur de la police.

procedure TfrmComposer.actFontColourExecute(Sender: TObject); 
    begin 
    if dlgColorDialog.Execute then 
     begin 
      EditDesigner1.ExecCommandEx('foreColor',False,dlgColorDialog.Color); 
     end; 
    EditDesigner1.EmbeddedWB.SetFocus; 
end; 

Cela va changer la police ...

procedure TfrmComposer.JvFontComboBoxChange(Sender: TObject); 
begin 
    EDewbMessageBody.ExecCommandEx('fontname',False,JvFontComboBox.FontName); 
    EDewbMessageBody.EmbeddedWB.SetFocus; 
end; 

Il y a aussi une procédure EditDesigner1.InsertHTML qui vous permettra d'insérer tout ce que vous voulez.

Bonne Delphiin';)

+0

Aussi disponible ici https://sourceforge.net/projects/embeddedwb/ bien que l'édition disponible sur bitbucket.org semble être plus récente. – Ampere

+0

Remarque: Vous pouvez faire la même chose avec TWebBrowser: (webBrowser.Document as IHTMLDocument2) .execCommand ('ForeColor', true, clred); – Ampere