Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.06.10;
Скачать: CL | DM;

Вниз

TWebBrowser , в режиме редактирования, заменить текст выделения   Найти похожие ветки 

 
ford ©   (2016-05-23 13:10) [0]

Доброго времени суток!
Помогите решить проблеммку. Есть TWebBrowser в режиме редактирования, пользователь выделяет часть текста, далее нажимает кнопочку, программка обрабатывает этот текст и заменяет выделение этим обработанным текстом.
Вот код:

procedure UpperSelection(Sender:TObject);
var r:IHTMLTxtRange;
   st:String;
begin

r:=(fHTML.selection.createRange as IHTMLTxtRange);
if r.text="" Then
 Begin
  r.expand("word");
  r.select;
  if r.text="" Then
   Begin
    r.expand("charater");
    r.Select;
   end;

 end;
st:= r.text;
st:=AnsiUppercase(st);
r.text:=st;
end;


Все замечательно, НО, если в выделенном фрагменте присутствуют тэги, то при
st:= r.text;
st:=AnsiUppercase(st);
r.text:=st;

они естественно пропадают.

Пробовал использовать свойство HTMLText, и метод PasteHTML.
Но если я выделяю часть абзаца с завершающим тэгом </P>, то свойство HTMLText, содержит текст выделения с автоматически установленным тэгом <P>, соответственно если фрагмент содержит начало абзаца, то автоматом добавляется тэг завершения абзаца </P>. В добавок, после PasteHTML, выделение снимается, хотя конечно хотелось, чтобы выделение осталось.

Подскажите, как изменить текст выделения, при этом чтобы разметка осталась на месте, а так же само выделение не сбрасывалось?


 
ВладОшин ©   (2016-07-02 21:26) [1]

даже так можно.. Спасибо! )
накидал пример как обойти

var
 s,s2: string;
 SelectionO: IHTMLSelectionObject;
 TxtRangeO: IHTMLTxtRange;
begin
 document := WB1.Document as IHTMLDocument2;
 if Assigned(document) then
 begin
   SelectionO := document.selection as IHTMLSelectionObject;
   TxtRangeO := SelectionO.createRange as IHTMLTxtRange;
   Print(TxtRangeO.htmlText); // print = memo1.lines.add
//    TxtRangeO.execCommand("BackColor", False, clRed); // забавно)
   s := AnsiUpperCase(TxtRangeO.htmlText);
   s2 := AnsiUpperCase(TxtRangeO.text);
   Print(s);
   TxtRangeO.pasteHTML(s);
   TxtRangeO.moveStart("character", -Length(s2));
   TxtRangeO.moveEnd("character",0);
   TxtRangeO.select();

 end;



Страницы: 1 вся ветка

Текущий архив: 2018.06.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.003 c
2-1466614978
Sergey
2016-06-22 20:02
2018.06.10
Перевёртывание бит в байте


15-1472731971
ВладОшин
2016-09-01 15:12
2018.06.10
бред.. цикл от 0 до -1 как-то зашел в тело


6-1286126664
Сёмсей
2010-10-03 21:24
2018.06.10
Как связать vnc в обход nat proxy


1-1358315680
noob_one
2013-01-16 09:54
2018.06.10
На какое событие устанавливать значение Footer в DBGridEh?


2-1460463897
KSergey
2016-04-12 15:24
2018.06.10
Генерировать функцию во время выполнения