如何使所見即所得的界面製作HTML文件變得簡單? I.E.一個HTML編輯器。具體來說,要創建帶圖像,超鏈接,字體格式,子彈,縮進等格式的電子郵件消息...德爾福 - 如何使用Delphi製作WYSIWYG HTML編輯器?
注意[jd]:這是一個自我回答的問題,旨在成爲別人的指針。
如何使所見即所得的界面製作HTML文件變得簡單? I.E.一個HTML編輯器。具體來說,要創建帶圖像,超鏈接,字體格式,子彈,縮進等格式的電子郵件消息...德爾福 - 如何使用Delphi製作WYSIWYG HTML編輯器?
注意[jd]:這是一個自我回答的問題,旨在成爲別人的指針。
來自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';)
在回答中提到的組件已被轉移到一個新的地址 - 發現了它,並已更新了答案...... – HeartWare
Embarcadero公司具有基於TWebBrowser自己的網頁編輯器。但它有問題:http://stackoverflow.com/questions/39594393/twebbrowser-crashes-with-most-html-files – Ampere
這是一個有效的問題(關閉錯誤的原因)與超級有用的答案。投票重新開放。 – Ampere