不知道你们有没有注意到,TWebBrowser若只选单纯的几个字,按Del是能删除所选内容;
但是,若所选的范围大一点,比如有一半选择在表格内的文字,另一半选择在表格外的文字时,
安Del键就没用了,结果将什么也没删除。反复思考了很久,写了下列代码:procedure ClearText(Element: IHTMLElement);
var
I: Integer;
CurrentElement: IHTMLElement;
begin
for I := 0 to IHTMLElementCollection(Element.Children).Length - 1 do
begin
CurrentElement := IHTMLElementCollection(Element.Children).Item(I, EmptyParam) as IHTMLElement;
if (IHTMLElementCollection(CurrentElement.Children).Length=0) and (Length(CurrentElement.innerText)>0) then
begin
TxtRange2 := (Document2.body as IHTMLBodyElement).createTextRange;
TxtRange2.moveToElementText(CurrentElement);
if TxtRange.inRange(TxtRange2) then
CurrentElement.innerText:='';
end;
ClearText(CurrentElement);
end;
end;range := SelectionObject.createRange;
TxtRange := range as IHTMLTxtRange;
ClearText(TxtRange.parentElement);结果:上面的代码对于整个Element的文字都选择的会有效,但对于只选Element中部份文字的就没有效。谁知道更好的方法﹖
但是,若所选的范围大一点,比如有一半选择在表格内的文字,另一半选择在表格外的文字时,
安Del键就没用了,结果将什么也没删除。反复思考了很久,写了下列代码:procedure ClearText(Element: IHTMLElement);
var
I: Integer;
CurrentElement: IHTMLElement;
begin
for I := 0 to IHTMLElementCollection(Element.Children).Length - 1 do
begin
CurrentElement := IHTMLElementCollection(Element.Children).Item(I, EmptyParam) as IHTMLElement;
if (IHTMLElementCollection(CurrentElement.Children).Length=0) and (Length(CurrentElement.innerText)>0) then
begin
TxtRange2 := (Document2.body as IHTMLBodyElement).createTextRange;
TxtRange2.moveToElementText(CurrentElement);
if TxtRange.inRange(TxtRange2) then
CurrentElement.innerText:='';
end;
ClearText(CurrentElement);
end;
end;range := SelectionObject.createRange;
TxtRange := range as IHTMLTxtRange;
ClearText(TxtRange.parentElement);结果:上面的代码对于整个Element的文字都选择的会有效,但对于只选Element中部份文字的就没有效。谁知道更好的方法﹖
>
> 所以,要么不删,要么整个表格删除,部分删除是不行的。不知道你有没有在FrontPage或Word里做过跨表格内容的删除﹖
如果从表格的一半选到表格外的内容,
此时的删除,并不会破坏表格结构,
而是表格内的选择,只删除文字,连同表格外的文字,一起被删除。你应该在回答前看看我贴的代码,
我的代码已考虑了这点(只是还不够完善,不然我不用在这问问题)。
> 不知道是否可行,偶没试过的说理论上是可行的。但实际上不好定位。
复制所选代码时,若跨Cell,
它会把所选Cell的代码、及所选Cell上层的TR及其上层的Table都含入代码。
这是第一个难点。第二个难点是,可能会出现两处以上相同内容。第三个难点是,改完源代码后,画面会闪一下,
因为得将卷动轴和游标重定位到原本所选位置(而我却不会游标重定位)。