Delphi - 如何使用Delphi制作所见即所得的HTML编辑器?

5

如何制作一个易于使用的所见即所得 (WYSIWYG) 界面来创建 HTML 文件?也就是说,一个 HTML 编辑器。具体来说,用来创建格式化的电子邮件,包括图片、超链接、字体格式、项目符号、缩进等。

注意 [jd]:这是一个自问自答的问题,旨在为他人提供指引。


答案中提到的组件已经被移动到新地址 - 我找到了它,并更新了答案... - HeartWare
Embarcadero有自己的基于TWebBrowser的网页编辑器。但是它存在问题:http://stackoverflow.com/questions/39594393/twebbrowser-crashes-with-most-html-files - Gabriel
1
这是一个有效的问题(因错误原因被关闭),并且有一个非常有用的答案。请投票重新开放。 - Gabriel
1个回答

8

EmbeddedWB Web浏览器组件来自bsalsa.com,提供了完成它所需的工具。

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

您可以将EmbeddedWB(Web浏览器)控件(窗口)放置在表单上以显示来自网站等的HTML。 然后,在对象检查器-属性中链接到EmbeddedWB控件,将EditDesigner组件放置在表单上。

使用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作为HTMLDoc.execCommand的整数。对于某些命令,通常只需要0作为值即可。但是许多命令需要字符串信息作为值,例如更改字体名称。实际上,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过程,可以让您插入任何您想要的内容。

愉快的Delphi编程;)


此外,也可以在https://sourceforge.net/projects/embeddedwb/找到,尽管在bitbucket.org上可用的版本似乎更新。 - Gabriel
注意:您可以使用TWebBrowser执行相同的操作:(webBrowser.Document as IHTMLDocument2).execCommand('ForeColor', true, clred); - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接