【问题标题】:Delphi - How do I make a WYSIWYG HTML editor using Delphi? [closed]Delphi - 如何使用 Delphi 制作所见即所得的 HTML 编辑器? [关闭]
【发布时间】:2012-10-13 01:30:42
【问题描述】:

如何制作一个“易于”使用的所见即所得界面来制作 HTML 文件? IE。一个 HTML 编辑器。专门用于创建格式化的电子邮件消息,包括图像、超链接、字体格式、项目符号、缩进等...

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

【问题讨论】:

  • 答案中提到的组件已移至新地址 - 找到它,并已更新答案...
  • Embarcadero 拥有自己的基于 TWebBrowser 的网络编辑器。但它有问题:stackoverflow.com/questions/39594393/…
  • 这是一个有效的问题(因错误原因关闭),答案非常有用。投票重新开放。

标签: html delphi editor wysiwyg


【解决方案1】:

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

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

您放置一个 EmbeddedWB(Web 浏览器)控件(窗口)来显示 HTML,例如来自网站的 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 作为 Integer 解析到 HTMLDoc.execCommand。这就是一些命令所需要的,通常只需要 0 作为值。但是许多命令需要值的字符串信息,例如更改字体名称。 HTMLDoc.execCommand 实际上会接受 Variant 作为值,因此我在 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 过程可以让你插入任何你想要的东西。

快乐的Delphiin' ;)

【讨论】:

  • 也可以在这里找到 sourceforge.net/projects/embeddedwb 虽然 bitbucket.org 上的版本似乎更新了。
  • 注意:你可以对 TWebBrowser 做同样的事情: (webBrowser.Document as IHTMLDocument2).execCommand('ForeColor', true, clred);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多