簡體   English   中英

使用Indy發布數據並將其接收到TWebBrowser

[英]Posting Data with Indy and Receiving it to TWebBrowser

我試圖用這段代碼將數據發布到bing

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並顯示它?

試試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;

或者您可以使用內存流進行加載

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM