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

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

Поиск в WebBrowser [D7, WinXP]


N!tro ©   (2005-07-23 08:14:00) 

Подскажите, как можно сделать поиск в WebBrowser (чтобы найденное слово выделялось) без вызова окна поиска (фраза для поиска берётся из Edit1, например).


Viktop   (2005-07-24 08:00:00) [1]

В моём примере на странице выделяются сразу все строки (TextHight('слово')). Выделить сразу все слова. Ему решать [N!tro]


palva   (2005-07-23 19:47:00) [2]

Ну типа... В документе, загруженном в браузер, слово 'слово' попадается несколько раз. Мы нашли первое вхождение, потом пропустили и начали искать дальше, а вот второе вхождение слова выделили. Я понял, что это я ответил на вопрос N!tro, который посетовал, что "ищется только первое слово". Может, я его неправильно понял...


Viktop   (2005-07-23 19:38:00) [3]

А что значит поиск второго слова?


palva   (2005-07-23 16:46:00) [4]

Вот поиск второго слова:

uses ..., MSHTML;

...

procedure TForm1.Button1Click(Sender: TObject);
var
 document: IHTMLDocument2;
 selectionRange: IHtmlTxtRange;
begin
 document := WebBrowser1.Document as IHTMLDocument2;
 selectionRange := (document.body as IHTMLBodyElement)
   .СreateTextRange as IHtmlTxtRange;
 selectionRange.findText('слово', 1000000, 2);
 selectionRange.collapse(False);
 selectionRange.findText('слово', 1000000, 2);
 selectionRange.select;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1.OleObject.Navigate2('D:\C\html\select.htm');
end;


Почитайте примеры работы с WebBrowser напр. здесь:
http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_oleobject.htm


Viktop   (2005-07-23 16:31:00) [5]

Держи:
procedure TForm1.TextHight(Text:string);
var
i:integer;
Doc, T:Variant;
begin
Doc:=Web.Document;
T:= Doc.body.createTextRange;
i:=0;
if T.FindText(Text)=false then
   begin
   ShowMessage('Извините,здесь мы ничего не нашли');

   exit;
   end;
While Text > '' do
 begin
   T.FindText(Text);
   T.execCommand('BackColor','','yellow');
   T.execCommand('ForeColor','','red');
   T.execCommand('Bold');
   T.ScrollInToView;
   T.collapse(false);
   i:=i+1;
   if T.FindText(Text)=false then
     begin
       ShowMessage(' найдено: '+IntToStr(i)+' упоминаний');
       exit;
     end;
 end;
end;


N!tro   (2005-07-23 15:27:00) [6]

Если делать просто скрипт
<SCRIPT>
 function TextRangeSelect(){
 var oRange = document.body.createTextRange();
 oRange.findText('sculpture', 1000000, 2);
 oRange.select();
 }
</SCRIPT>

то ищется только первое слово.
Неужели никто не знает?


N!tro   (2005-07-23 12:49:00) [7]

Делаю так:
procedure TForm1.Button1Click(Sender: TObject);
begin
 WebBrowser1.OleObject.Document.Body.createTextRange();
 WebBrowser1.OleObject.Document.Body.oRange.findText('Windows', 1000000, 2);
 WebBrowser1.OleObject.Document.Body.oRange.select();
end;

и не получается :(


palva   (2005-07-23 11:32:00) [8]

Следующий код на JavaScript (не знаю, правильно ли отобразится) делает поиск и выделяет результат.

<HTML><BODY>
Leonardo da Vinci was one of the great masters of the High
Renaissance, especially in painting, sculpture, architecture,
engineering, and science.
</BODY>
</HTML>

<SCRIPT>
  var oRange = document.body.createTextRange();
  oRange.findText('sculpture', 1000000, 2);
  oRange.select();
</SCRIPT>

Наверно то же самое нетрудно сделать из Delphi


Наверх

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