2012-02-13 2 views
4

Я пытаюсь опубликовать данные в Бинг с этим кодомПроводка данных с помощью Indy и получение его TWebBrowser

function PostExample: string; 
var 
    lHTTP: TIdHTTP; 
    lParamList: TStringList; 
begin 
    lParamList := TStringList.Create; 
    lParamList.Add('q=test'); 

    lHTTP := TIdHTTP.Create(nil); 
    try 
    Result := lHTTP.Post('http://www.bing.com/', lParamList); 
    finally 

    FreeAndNil(lHTTP); 
    FreeAndNil(lParamList); 

    end; 
end; 

А потом, как я могу получить результат в TWebBrowser и отобразить его?

ответ

7

Попробуйте LoadDocFromString:

procedure LoadBlankDoc(ABrowser: TWebBrowser); 
begin 
    ABrowser.Navigate('about:blank'); 
    while ABrowser.ReadyState <> READYSTATE_COMPLETE do 
    begin 
    Application.ProcessMessages; 
    Sleep(0); 
    end; 
end; 

procedure CheckDocReady(ABrowser: TWebBrowser); 
begin 
    if not Assigned(ABrowser.Document) then 
    LoadBlankDoc(ABrowser); 
end; 

procedure LoadDocFromString(ABrowser: TWebBrowser; const HTMLString: wideString); 
var 
    v: OleVariant; 
    HTMLDocument: IHTMLDocument2; 
begin 
    CheckDocReady(ABrowser); 
    HTMLDocument := ABrowser.Document as IHTMLDocument2; 
    v := VarArrayCreate([0, 0], varVariant); 
    v[0] := HTMLString; 
    HTMLDocument.Write(PSafeArray(TVarData(v).VArray)); 
    HTMLDocument.Close; 
end; 
+1

Спасибо, это помогло много. – CRQ

4

Или вы можете использовать память потоков для загрузки

uses 
    OleCtrls, SHDocVw, IdHTTP, ActiveX; 

function PostRequest(const AURL: string; const AParams: TStringList; 
    const AWebBrowser: TWebBrowser): Boolean; 
var 
    IdHTTP: TIdHTTP; 
    Response: TMemoryStream; 
begin 
    Result := True; 
    try 
    AWebBrowser.Navigate('about:blank'); 
    while AWebBrowser.ReadyState < READYSTATE_COMPLETE do 
     Application.ProcessMessages; 

    Response := TMemoryStream.Create; 
    try 
     IdHTTP := TIdHTTP.Create(nil); 
     try 
     IdHTTP.Post(AURL, AParams, Response); 
     if Response.Size > 0 then 
     begin 
      Response.Position := 0; 
      (AWebBrowser.Document as IPersistStreamInit).Load(
      TStreamAdapter.Create(Response, soReference)); 
     end; 
     finally 
     IdHTTP.Free; 
     end; 
    finally 
     Response.Free; 
    end; 
    except 
    Result := False; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Params: TStringList; 
begin 
    Params := TStringList.Create; 
    try 
    Params.Add('q=test'); 
    if not PostRequest('http://www.bing.com/', Params, WebBrowser1) then 
     ShowMessage('An unexpected error occured!'); 
    finally 
    Params.Free; 
    end; 
end; 
+2

Спасибо за альтернативу. – CRQ

Смежные вопросы