フリーソフト

TWebBrowser

[BCB] 中間ファイルを使用せずにWebBrowserに直接書き込む

Delphiでは割と簡単だったのですが。もっと簡単な方法があるのでしょうか?


  AnsiString Str="<html>aaaa</html>";

  SAFEARRAY *safe_array = SafeArrayCreateVector(VT_VARIANT,0,1);
  VARIANT *variant;

  SafeArrayAccessData(safe_array,(void **)&variant);
  variant->vt      = VT_BSTR;            
  variant->bstrVal = SysAllocString(WideString(Str));
  SafeArrayUnaccessData(safe_array);

  IHTMLDocument2 *Html=NULL;
  CppWebBrowser1->Navigate(L"about:blank");
  CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2,(void **)&Html);
  Html->write(safe_array);

  Html->close();
  Html->Release();

  SafeArrayDestroy(safe_array);

[Delphi] 中間ファイルを使用せずにWebBrowserに直接書き込む

動的にHTMLを生成して表示したい場合は以下のようにします。WebBrowser1.Documentがnilの場合はWebBrowser1.Navigate('about:blank')を呼び出すとWebBrowser1.Documentが作成されます。

uses mshtml;

OLEVariant(WebBrowser1.Document as IHTMLDocument2).Write('<html>aaaa</html>');

[Delphi] WebBrawserに表示されている内容をクリアする

WebBrowserに表示されている内容を消したい場合は以下のようにします。

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('about:blank');
end;

[Delphi] WebBrowserに関連した情報(MSDN)

http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/browser_control_node_entry.asp

[Delphi] WebBrowserをスクロールする

水平方向x、垂直方向yが指定できます。yを0にすると一番上までスクロールされます。

uses mshtml;

OLEVariant(WebBrowser1.Document as IHTMLDocument2).parentWindow.scroll(x, y);

[Delphi] WebBrowser上をプログラムからクリックする

「次へ」のリンクをプログラム内からクリックする場合などに使える方法です。クリックする座標は、WebBrowserの左上を(0,0)としたときの座標で指定します。

uses mshtml;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWB:HWND;
begin
  hWB := FindWindowEx(WebBrowser1.Handle,0,'Shell DocObject View',nil);
  hWB := FindWindowEx(hWB,0,'Internet Explorer_Server',nil);
  if hWB <> 0 then begin 
    //指定した座標をクリック
    SendMessage(hWB,WM_LBUTTONDOWN,0,MakeLParam(570,70)); 
    SendMessage(hWB,WM_LBUTTONUP,0,MakeLParam(570,70));
  end;
end;

[Delphi] WebBrowserからHTMLソースを取得する

uses mshtml;

Memo1.Text:= OLEVariant(WebBrowser1.Document as IHTMLDocument2).Body.InnerHTML;