Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Поиск в СppWebBrowser


Автор: ROKI 3.2.2009, 01:09
Привет всем !!! Каким способом можно осуществить поиск введенной из клавы строки, на текущей странице в СppWebBrowser ??

Автор: Dmi3ev 3.2.2009, 01:40
CTRL+F и ничего делать не надо  smile

а так есть 
http://msdn.microsoft.com/en-us/library/aa741525.aspx
может там что-то найдешь.
если просто надо поискать на странице, то можно и так
Код

NMHTTP1->Get("www.yandex.ru");
Memo1->Text=NMHTTP1->Body;

а потом уже там что-то найти.
можно еще варианты предложить...
хотя первый самый классный...  smile 

Автор: ROKI 3.2.2009, 16:34
Цитата

http://msdn.microsoft.com/en-us/library/aa741525.aspx
может там что-то найдешь.

там я уже смотрел

Цитата

CTRL+F и ничего делать не надо  

))

У меня есть вариант поиска, но он сделан на Дэлфи, я пытался перевести но не получилось. Dmi3ev, ты можешь перевести код на builder. 

Код

procedure TForm3.Poick(f:string);
var web:IHTMLTxtRange;
    r:string;
begin
 if not WebBrowser1.Busy then  
  begin
   web:=((WebBrowser1.Document as IHTMLDocument2).Body as IHTMLBodyElement).createTextRange;   
   while web.findText(f,1,0) do  
    begin
     web.PasteHtml('<span style="color: blue; font-weight: bolder;">' +web.htmlText + '</span>');     
     web.ScrollIntoView(True);  
     e:=True;
     WebBrowser1.Stop;
    end;
  end;
end; 

Автор: Rrader 4.2.2009, 14:20
BCB2009
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#include <mshtml.h>

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "shdocvw_ocx"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void SearchText(TCppWebBrowser* Browser, UnicodeString TxtToFind, bool Highlight)
{
    if (!Browser) return;
    if (!Browser->Busy && Browser->Document) {
        IHTMLDocument2 *pDoc = 0;
        Browser->Document->QueryInterface(&pDoc);
        if (pDoc) {
            IMarkupServices *pMS = 0;
            IMarkupContainer * pMC = 0;
            Browser->Document->QueryInterface(&pMS);
            Browser->Document->QueryInterface(&pMC);
            if (pMC && pMS) {
                IMarkupPointer *pBegin(0), *pEnd(0);
                pMS->CreateMarkupPointer(&pBegin);
                pMS->CreateMarkupPointer(&pEnd);
                pBegin->SetGravity(POINTER_GRAVITY_Right);
                pEnd->SetGravity(POINTER_GRAVITY_Left);
                pBegin->MoveToContainer(pMC, TRUE);
                pEnd->MoveToContainer(pMC, FALSE);
                while (true) {
                    HRESULT Res = pBegin->FindText(TxtToFind.w_str(),
                        0, pEnd, NULL);
                    if (S_FALSE == Res) break;
                    IHTMLElement *pFontEl;
                    if (Highlight) {
                        Res = pMS->CreateElement(TAGID_FONT,
                            L"COLOR=#000000 STYLE=\"background-color:#C0DCC0\"",
                            &pFontEl);
                        Res = pMS->InsertElement(pFontEl, pBegin, pEnd);
                        pBegin->MoveToPointer(pEnd);
                    }
                    else {
                        Res = pBegin->CurrentScope(&pFontEl);
                        Res = pMS->RemoveElement(pFontEl);
                        pBegin->MoveToPointer(pEnd);
                    }
                }
                pBegin->Release();
                pEnd->Release();
                pMC->Release();
                pMS->Release();
            }
        }
        pDoc->Release();
    }
    else ShowMessage("I am not ready!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // Открыть страницу
    CppWebBrowser1->Navigate2(&TVariant("http://google.com/"));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    // Выделить всё найденное
    SearchText(CppWebBrowser1, "Поиск", true);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    // Снять выделение с найденного
    SearchText(CppWebBrowser1, "Поиск", false);
}
//---------------------------------------------------------------------------

Автор: ROKI 4.2.2009, 22:29
Rrader, При попытке скомпилировать выдает ошибку "Type name expected"

Автор: Rrader 5.2.2009, 07:34
Цитата(ROKI @  5.2.2009,  04:29 Найти цитируемый пост)
Rrader, При попытке скомпилировать выдает ошибку "Type name expected"

Код для C++Builder 2009 был потому что. Для более старых версий надо заменить две строки:
Код

void SearchText(TCppWebBrowser* Browser, WideString TxtToFind, bool Highlight)

TxtToFind.w_str() заменить на:
Код

TxtToFind.c_bstr()

Автор: ROKI 5.2.2009, 17:44
Rrader, Спасибо, получилось !!!

Автор: NeurnUsen 13.1.2023, 21:10
<a href=https://bestcialis20mg.com/>buy cialis canadian</a> Nausea and vomiting can be treated with ondansetron Zofran

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