中国开发网: 论坛: 程序员情感CBD: 贴子 285474
pcplayer
阶段性进展,但似乎不是终极解决方法。
如何在 IE 的编辑状态下插入一个表格?有多种解决办法,但到目前为止似乎都不太“正规”

=====================================
之一:采用 TDHTMLEdit 控件。这个控件是 IE5 以上提供的一个 ActiveX.

procedure TForm1.Button5Click(Sender: TObject);
var
insertTableParam: DEInsertTableParam;
ovInsertTableParam: OleVariant;
Pout:OleVariant;
i:LongInt;
VColor:OleVariant;
begin
insertTableParam := CreateComObject(Class_DEInsertTableParam) as IDEInsertTableParam;

insertTableParam.NumRows := 4;
insertTableParam.NumCols := 5;
insertTableParam.TableAttrs := 'width=100% border=1 bgColor=#ffcdcd';


ovInsertTableParam := OleVariant(insertTableParam);

DHTMLEdit1.ExecCommand(DECMD_INSERTTABLE, OLECMDEXECOPT_DODEFAULT, ovInsertTableParam);
end;

上述代码可以在 DHTMLEdit1:TDHTMLEdit 中插入一个表格。但问题是,据说 MS 已经不再维护 TDHTMLEdit,改为使用 MSHTML

=============================================================
之二:

在 MSHTML 里,通过获取 IE 的 IHTMLDocument2 来对编辑状态下的 IE 里的元素进行编辑。比如可以很方便地改变字体。
但查遍网络,没有关于插入表格的资料。


var
FDocument:IHTMLDocument2;
FCommand: IOleCommandTarget; //MSHTML IOLECommandTarget interface
VColor:OleVariant;

FCommand := FDocument as IOleCommandTarget;

if Assigned(FCommand) then
begin
VColor:='#ff0000';
i:=FCommand.Exec(@CGID_MSHTML,IDM_FORECOLOR, 0,VColor,POut); //<----可以把选中的字变成红色
end;

哪里去找关于各种操作的参数格式的说明呢?比如,插入一个表格,命令码是 IDM_TABLEINSERT,但参数呢?
网上查了好久都找不到。

=================================


之三:下面的代码通过取得 FDocument:IHTMLDocument2 以及关于表格的接口,来生成一个表格,但最终还是把表格变换为 HTML 文本附加到当前文本中。这样麻烦,还不如自己直接生成 <table>....</table> 这样的文本来的方便。

procedure TForm1.Button6Click(Sender: TObject);
var
spTable:IHTMLTable;
spElm:IHTMLElement;
spRow:IHTMLTableRow;
spCell:IHTMLTableCell;
spSelObj:IHTMLSelectionObject;
spTxtRng:IHTMLTxtRange;

S:WideString;
i,j:Integer;
begin
spElm:=FDocument.createElement('Table');
spTable:=spElm as IHtmlTable;

for i:=0 to 5 do
begin
spRow:=(spTable.insertRow(i) as IHTMLTableRow);
for j:=0 to 6 do
begin
spRow.insertCell(j);
end;
end;

spTable.border:=1;

spSelObj:=FDocument.selection;
spTxtRng:=spSelObj.createRange as IHTMLTxtRange;

S:=spElm.outerHTML;
spTxtRng.pasteHTML(S);
end;

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录