Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


ford ©   (2016-05-23 13:10:00) 

Доброго времени суток!
Помогите решить проблеммку. Есть 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:00) [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо