2012-10-23 26 views
4

如何使所見即所得的界面製作HTML文件變得簡單? I.E.一個HTML編輯器。具體來說,要創建帶圖像,超鏈接,字體格式,子彈,縮進等格式的電子郵件消息...德爾福 - 如何使用Delphi製作WYSIWYG HTML編輯器?

注意[jd]:這是一個自我回答的問題,旨在成爲別人的指針。

+0

在回答中提到的組件已被轉移到一個新的地址 - 發現了它,並已更新了答案...... – HeartWare

+0

Embarcadero公司具有基於TWebBrowser自己的網頁編輯器。但它有問題:http://stackoverflow.com/questions/39594393/twebbrowser-crashes-with-most-html-files – Ampere

+0

這是一個有效的問題(關閉錯誤的原因)與超級有用的答案。投票重新開放。 – Ampere

回答

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此過程只接受並解析值作爲整數到HTMLDoc.execCommand。這就是你需要的一些命令,通常只需要0作爲值。但是許多命令需要字符串信息作爲值,例如更改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過程,將允許你插入任何你想要的。

快樂Delphiin';)

+0

也可在這裏https://sourceforge.net/projects/embeddedwb/,雖然bitbucket.org上提供的版本似乎更新。 – Ampere

+0

注意:您可以對TWebBrowser執行相同的操作:(webBrowser.Document爲IHTMLDocument2).execCommand('ForeColor',true,clred); – Ampere