我使用TEmbeddedWB
和TEditDesigner
将HTML添加到处于编辑模式的页面。它就像EditDesigner->InsertHTML("1234");
一样简单。
问题是因为HTML并不总是插入光标位置。如果我把这个代码放在一个按钮上就可以正常工作,在光标位置插入HTML。但是如果我将它放在CMDialogKey
事件中,它拦截CM_DIALOGKEY
消息以拦截 TAB 键,它总是将其插入页面的开头。如果选择了文本,则会在选定的文本位置插入,覆盖它(应该如此)。但如果未选中,则将其插入HTML的开头。
这是一个在TEmbeddedWB
中插入HTML的函数:
procedure TEditDesigner.InsertHTML(HTML: string);
var
Sel: IHTMLSelectionObject;
Range: IHTMLTxtRange;
Doc: IHTMLDocument2;
begin
if FEnable and Assigned(FEmbeddedWB) and (not (csDesigning in ComponentState)) then
begin
Doc := FEmbeddedWB.Doc2;
if Assigned(Doc) then
begin
Sel := Doc.selection;
if Assigned(Sel) then
begin
if (Sel.type_ = 'None') or (Sel.type_ = 'Text') then
begin
Range := Sel.createRange as IHTMLTxtRange;
Range.pasteHTML(HTML);
end;
end;
end;
end;
end;
如何使用它一直在光标位置插入HTML?