![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в 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