Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > TWebbrowser - переход к якорю


Автор: GrigoriyFomin 16.11.2010, 09:36
Добрый день. Не дайте помереть, люди добрые. Для меня работа с объектами TWebBrowser темна, как лес. Сколько искал, найти не мог готового решения.
По порядку:
1. Как перейти на закладку( якорь) в открытом документе HTML? Есть название и индекс закладки. (moveToElementText, scrollIntoView - вроде как это, но как использовать - не знаю :-(((
2. Как подсветить якорь или ссылку (выделить текст) ,имея ее в twebbrowser (OleObject.document.anchors и links)
3. Как узнать, что при редактировании документа в  WebBrowser пользователь внес изменения? Пока отслеживаю по возможности команды UnDo, но как-то некрасиво, имхо.

Заранее благодарю и прошу сильно не пинать, ну не понимаю я майкрософстских объектах ,всю жизнь с VCL провел smile

Автор: GrigoriyFomin 7.12.2010, 02:00
Докумекал сам, вот что вышло (суть - в хтмл документе вставляются для интересующего текста 2 якоря - в начале текста и в конце. Нужно выделить текст вместе с якорями). 
Код


procedure Tmhteditform.lbxAnchorsClick(Sender: TObject);
var
  Range, rangeb, rangee: IHTMLTxtRange;
  anchorb, anchore:      IHTMLElement;
  i, anchorid:           integer;
begin
  if lbxAnchors.ItemIndex < 0 then exit;
  anchorid := strtoint(copy(lbxAnchors.items[lbxAnchors.ItemIndex], 3, length(lbxAnchors.items[lbxAnchors.ItemIndex]) - 2));
  for i := 0 to mhteditwb.OleObject.document.anchors.length - 1 do
  begin
    if mhteditwb.OleObject.document.anchors.Item(i).Name = ('bm' + inttostr(anchorid)) then anchorb := mhteditwb.Doc2.anchors.Item(i, '') as IHTMLElement;
    if mhteditwb.OleObject.document.anchors.Item(i).Name = ('_bm' + inttostr(anchorid)) then anchore := mhteditwb.Doc2.anchors.Item(i, '') as IHTMLElement;
  end;
  if (anchorb = nil) or (anchore = nil) then exit;
  rangeb := (mhteditwb.Doc2.selection.createRange) as IHTMLTxtRange;
  rangee := (mhteditwb.Doc2.selection.createRange) as IHTMLTxtRange;
  rangeb.moveToElementText(anchorb);
//  rangeb.movestart('character',-1);
  rangeb.select;
  rangee.moveToElementText(anchore);
//  rangee.moveend('character',1); 
  rangee.select;
  Range := (mhteditwb.Doc2.selection.createRange) as IHTMLTxtRange;
  Range.setEndPoint('StartToStart', rangeb);
  Range.setEndPoint('EndToEnd', rangee);
  Range.scrollIntoView(true);
  Range.select;
  sbMHTEdit.SimpleText:=Range.htmlText;
end;



Как мне выделить текст вместе  с якорями?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)