不知道你们有没有注意到,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中部份文字的就没有效。谁知道更好的方法﹖

解决方案 »

  1.   

    > 表格部分删除,整个表格的结构都会乱掉。

    > 所以,要么不删,要么整个表格删除,部分删除是不行的。不知道你有没有在FrontPage或Word里做过跨表格内容的删除﹖
    如果从表格的一半选到表格外的内容,
    此时的删除,并不会破坏表格结构,
    而是表格内的选择,只删除文字,连同表格外的文字,一起被删除。你应该在回答前看看我贴的代码,
    我的代码已考虑了这点(只是还不够完善,不然我不用在这问问题)。
      

  2.   

    按下Del时把所先代码复制到剪贴板中,然后根据WEBBROWSER的源代码中查找到这段代码,然后再替换成‘’不知道是否可行,偶没试过的说
      

  3.   

    > 按下Del时把所先代码复制到剪贴板中,然后根据WEBBROWSER的源代码中查找到这段代码,然后再替换成‘’
    > 不知道是否可行,偶没试过的说理论上是可行的。但实际上不好定位。
    复制所选代码时,若跨Cell,
    它会把所选Cell的代码、及所选Cell上层的TR及其上层的Table都含入代码。
    这是第一个难点。第二个难点是,可能会出现两处以上相同内容。第三个难点是,改完源代码后,画面会闪一下,
    因为得将卷动轴和游标重定位到原本所选位置(而我却不会游标重定位)。