Delphi - 如何使用Delphi创建WYSIWYG HTML编辑器?

时间:2012-10-23 06:53:07

标签: html delphi editor wysiwyg

如何让“简单”使用WYSIWYG界面制作HTML文件? I.E. HTML编辑器。专门用于创建格式化的电子邮件,包括图像,超链接,字体格式,项目符号,缩进等...

注意[jd]:这是一个自我回答的问题,旨在成为其他人的指针。

1 个答案:

答案 0 :(得分:7)

来自bsalsa.com的EmbeddedWB Web浏览器组件仅提供了执行此操作的工具。

编辑:bsalsa.com不再存在。新位置: https://bitbucket.org/wpostma/tembeddedwb

放置EmbeddedWB(Web浏览器)控件(窗口)以显示HTML,例如来自网站。 然后,在表单上放置一个EditDesigner组件,并将其链接到Object Inspector - Properties中的EmbeddedWB控件。

使用EditDesigner,您可以将WebBrowser设置为编辑模式并进行一些基本编辑,例如插入或删除文本或设置某些字体属性。虽然不是一个完整的编辑。

不要绝望,这个包是MSHTML编辑器的完整包装器。通过对EditDesigner单元的轻微添加,您可以完全访问MSHTML execCommand接口。

原始代码:

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

您将看到EditDesigner.pas中的此过程仅接受并将Value as Integer解析为HTMLDoc.execCommand。对于某些命令,您只需要这些,通常只需要0作为值。但是许多命令需要Value的String信息,例如更改Fontname。 HTMLDoc.execCommand实际上会接受Variant作为Value,因此我向EditDesigner.pas添加了另一个过程,如下所示,如果您知道要发送的命令,则可以提供对MSHTML编辑器的近乎完全的访问权限。

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

当您需要向编辑器发送更高级的命令时,可以访问此过程。 这将改变字体颜色。

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

这将更改字体...

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

还有一个EditDesigner1.InsertHTML程序,允许您插入任何想要的内容。

Happy Delphiin';)