C++Builder XEでTCppWebBrowserを使ってYahoo!で検索するサンプルプログラム

C++Builder XEでTCppWebBrowserを使った簡単なサンプルを書いてみました。

フォームにTCppWebBrowserとTButtonを2つ配置します。

フォームのコンストラクタで、指定したページ(http://search.yahoo.co.jp/)を表示します。

#include <mshtml.h>

__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  CppWebBrowser1->Navigate(L"http://search.yahoo.co.jp/");
}

Button1を押すと検索キーワード入力欄に値を設定します。

検索キーワード欄は次のようなタグになっています。

<input value="" name="p" id="yschsp" size="42"

Button1のOnClickイベントを追加します。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TComInterface<IHTMLDocument3> pDoc;
  CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument3, (void**)&pDoc);

  //idがyschspの要素を取得する
  TComInterface<IHTMLElement> element;
  pDoc->getElementById(L"yschsp", &element);

  //inputタグの型に変換する
  TComInterface<IHTMLInputElement> input = element;

  //値を設定する
  input->put_value(L"C++Builder");
}

Button2を押すとフォームをSubmitします。

フォームは次のようなタグになっています。

<form name="sbn" id="sbn" class="searchForm

Button2のOnClickイベントを追加します。

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TComInterface<IHTMLDocument3> pDoc;
  CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument3, (void**)&pDoc);

  //idがsbnの要素を取得する
  TComInterface<IHTMLElement> element;
  pDoc->getElementById(L"sbn", &element);

  //formタグの型に変換する
  TComInterface<IHTMLFormElement> form = element;

  //Submitする
  form->submit();
}

アプリケーションを起動したところ。

Button1を押すと、検索キーワード欄に値が設定される。

Button2を押すと、フォームがSubmitされて、検索結果が表示される。

追記
TComInterfaceクラスについては次のページをご覧ください。

コメント

  1. はじめまして。link引用関係がはっきりしませんが、C++Builder質問掲示板で、ご回答頂いた方でしょうか。名前と日付と内容から判断しました。
    そうであれば、ありがとうございました。そうでなければ、失礼をお詫びするとともに以下は無視してください。
    試用版c++BilderXE2を入手し、動くようになりましたので、試してみたところ動きました。
    ポイントはTCppWebBrowserとTComInterfaceかなと思い、調べていて、こちらにたどりつきました。
    前者はなんとなくわかるのですが、TComInterfaceはよくわかりません。調べているところです。
    掲示板にも同じ内容を投稿しますがお許しください。

  2. TComInterfaceはCOMインターフェースのラッパーです。
    オブジェクトがコピーや削除された時に適切にAddRef/Releaseを実行します。
    簡単に言うと、自動でメモリの管理を行ってくれます。
    ソースコードを見ると簡単なラッパーであることがわかりますが、試用版にはソースコードは付属しませんでしたね。
    TComInterfaceを使わなくてもほとんど同じように記述できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください