T[Cpp]WebBrowser: Delphi -> BCB
От: HighTower Россия http://pbudget.ru
Дата: 20.06.02 06:51
Оценка:
Хочу использовать этот компонет BCB для постинга данных, перерыл инет и нашёл такой код для BCB для постинга

  String sURL = "http://127.0.0.1/cgi-bin/login";
  String sPostData = "login=name&psw=password";

  BSTR bstrHeaders = NULL;
  TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
  LPSAFEARRAY psa;
  LPCTSTR cszPostData = sPostData.c_str();
  UINT cElems = lstrlen(cszPostData);
  LPSTR pPostData;
  LPVARIANT pvPostData;

  WideString Head = "Content-Type: application/x-www-form-urlencoded\r\n"
                    "Accept-Language: ru\r\n"
                    "Accept-Encoding: gzip, deflate\r\n"
                    "Referer: http://127.0.0.1/login.htm\r\n";

  bstrHeaders = SysAllocString(Head);
  if (!bstrHeaders){
    Application->MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
    return;
  }

  V_VT(&vHeaders) = VT_BSTR;
  V_BSTR(&vHeaders) = bstrHeaders;

  pvPostData = vPostData;

  if(pvPostData){
    VariantInit(pvPostData);

    psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
    if(!psa){ 
      return;
    }

    SafeArrayAccessData(psa, (LPVOID*)&pPostData);
    memcpy(pPostData, cszPostData, cElems);
    SafeArrayUnaccessData(psa);

    V_VT(pvPostData) = VT_ARRAY | VT_UI1;
    V_ARRAY(pvPostData) = psa;
  }

   CppWebBrowser->Navigate((TVariant)sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);


Этот код прекрасно работает и спасибо тому, что его написал.
Однако далее надо обработать текст открытой страницы... Вот тут и начинаются проблемы, т.к. хелпа ко этому компоненту нет, а в msdn я что-то непонял... Вроде всё коды что надо я нашёл, только они на Delphi, помогите с их переводом на BCB.
Вот что надо:

Организация доступа для загрузки страничек в CppWebBrowser через прокси:
var PIInfo : PInternetProxyInfo ; 
begin 
  New (PIInfo) ; 
  PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ; 
  PIInfo^.lpszProxy := PChar('200.197.101.194:80'); 
  PIInfo^.lpszProxyBypass := PChar(''); 
  UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info), 0); 
  WebBrowser1.Navigate(Edit1.Text); 
  Dispose (PIInfo) ; 
end;


Получение полного исходника HTML
var
  HTMLDocument: IHTMLDocument2;
  PersistFile: IPersistFile;
begin
  ...
  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
  PersistFile := HTMLDocument as IPersistFile;
  PersistFile.Save(StringToOleStr('test.htm'), True);

  while HTMLDocument.readyState <> 'complete' do
    Application.ProcessMessages;
...
end; 

или

  while WB.Document = nil do Application.ProcessMessages;
  Document:= WB.Document as IHtmlDocument2;
  Text:= Document.body.InnerHTML;


Заполнение полей формы открытой страницы и нажатие на кнопку
Web.OleObject.Document.all.tags('FORM').item(0).item('To').value:='username';
Web.OleObject.Document.all.tags('FORM').item(0).item('textfield_password\').value:='password';
Web.OleObject.Document.all.tags('FORM').item(0).item('submit_button_name\').click();


Блокировка загрузки картинкок, НЕЗАВИСИМО от настроек Internet Explorera
IDocHostUIHandler.FilterDataObject


Помогите, Plz, с переводом, т.к. простой посточный пенес не работает... (
Бог у всех один — провайдеры разные...
Re: T[Cpp]WebBrowser: Delphi -> BCB
От: Holms США  
Дата: 20.06.02 06:55
Оценка:
Здравствуйте HighTower, Вы писали:


HT>Помогите, Plz, с переводом, т.к. простой посточный пенес не работает... (


Вот код для доступа к тексту страницы


#include <mshtml.h>
void __fastcall TfrmMain::tsHtmlCodeShow( TObject *Sender )
{
    if ( CppWebBrowser->Busy )
        return ;

    IHTMLDocument2 *HTMLDocument = NULL;

    IPersistFile *PersistFile = NULL;

    if ( CppWebBrowser->Document && SUCCEEDED( CppWebBrowser->
            Document->
            QueryInterface( IID_IHTMLDocument2, ( LPVOID* ) & HTMLDocument ) ) ) {
        if ( SUCCEEDED( HTMLDocument->QueryInterface( IID_IPersistFile,
                        ( LPVOID* ) & PersistFile ) ) ) {
            PersistFile->Save( WideString( String( ExtractFilePath( ParamStr( 0 ) ) +
                                                   "temp.html" ) ), true );
            PersistFile->Release();
        }

        HTMLDocument->Release();
        reHtmlCode->Lines->LoadFromFile( String( ExtractFilePath( ParamStr( 0 ) ) +
                                         "temp.html" ) );
    }
}
}

Еще можно почитать здесь.
The life is relative and reversible.
Re[2]: T[Cpp]WebBrowser: Delphi -> BCB
От: HighTower Россия http://pbudget.ru
Дата: 20.06.02 07:07
Оценка:
Здравствуйте Holms, Вы писали:

H>Вот код для доступа к тексту страницы


Большое спасибо — помогли!!!

А гдеб ещё помно было почитать?
Бог у всех один — провайдеры разные...
Re[3]: T[Cpp]WebBrowser: Delphi -> BCB
От: Holms США  
Дата: 20.06.02 07:13
Оценка:
Здравствуйте HighTower, Вы писали:

HT>Здравствуйте Holms, Вы писали:


H>>Вот код для доступа к тексту страницы


HT>Большое спасибо — помогли!!!


HT>А гдеб ещё помно было почитать?


Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел.
The life is relative and reversible.
Re[4]: T[Cpp]WebBrowser: Delphi -> BCB
От: HighTower Россия http://pbudget.ru
Дата: 20.06.02 07:40
Оценка:
Здравствуйте Holms, Вы писали:

H>Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел.


Прискорбно...
Я тут вот на что наткрулся, как получить текст страницы:

CComPtr <IDispatch> pDisp;
CppWB->ControlInterface->get_Document(&pDisp);
CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
spHTML = pDisp;

WideString A;
spHTML.p->get_readyState(&A);
ShowMessage(A);

CComPtr <IHTMLElement> m_pBody;
spHTML->get_body(&m_pBody);

BSTR bstrHTMLText;
m_pBody->get_outerHTML(&bstrHTMLText);

ShowMessage(bstrHTMLText);


Если б знать что такое IHTMLElement, IHTMLDocument2 и т.д., то можно было бы всё сделать... Однако ничего не понятно...
Бог у всех один — провайдеры разные...
Re[5]: содержимое адресной строки IE
От: Holms США  
Дата: 20.06.02 07:45
Оценка:
Здравствуйте HighTower, Вы писали:

HT>Здравствуйте Holms, Вы писали:


H>>Я бы и сам был бы рад где-то почитать про такие фичи но нормальном языке, но пока кроме MSDN-а ничего не нашел. :(


HT>Прискорбно...

HT>Я тут вот на что наткрулся, как получить текст страницы:

HT>
HT>CComPtr <IDispatch> pDisp;
CppWB->>ControlInterface->get_Document(&pDisp);
HT>CComQIPtr <IHTMLDocument2, &IID_IHTMLDocument2> spHTML;
HT>spHTML = pDisp;

HT>WideString A;
spHTML.p->>get_readyState(&A);
HT>ShowMessage(A);

HT>CComPtr <IHTMLElement> m_pBody;
spHTML->>get_body(&m_pBody);

HT>BSTR bstrHTMLText;
m_pBody->>get_outerHTML(&bstrHTMLText);

HT>ShowMessage(bstrHTMLText);
HT>


HT>Если б знать что такое IHTMLElement, IHTMLDocument2 и т.д., то можно было бы всё сделать... Однако ничего не понятно... :(


Это просто интерфесы для элементов HTML. Про это в MSDN написсано.
The life is relative and reversible.
Re[6]: содержимое адресной строки IE
От: HighTower Россия http://pbudget.ru
Дата: 20.06.02 07:49
Оценка:
Здравствуйте Holms, Вы писали:

H>Это просто интерфесы для элементов HTML. Про это в MSDN написсано.


Если не затруднит, то можно точную ссылочку где про них написано? а то у меня поиск не работает по msdn из-за внешнего firewall'а...
Бог у всех один — провайдеры разные...
Re[7]: содержимое адресной строки IE
От: Holms США  
Дата: 20.06.02 07:57
Оценка:
Здравствуйте HighTower, Вы писали:

HT>Здравствуйте Holms, Вы писали:


H>>Это просто интерфесы для элементов HTML. Про это в MSDN написсано.


HT>Если не затруднит, то можно точную ссылочку где про них написано? а то у меня поиск не работает по msdn из-за внешнего firewall'а...


здесь
The life is relative and reversible.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.