UIWebBrowserをC++Builderで使ってみる実験

手軽に使えるブラウザをちょこっと作ってみようと思ったのですが、VCだと結構面倒なので、C++Builderを使って 作ってみようかと思います。

もちろん、軽量化のためには Visual C++で作らねばならないのですが…。

かなり昔のコンポーネントですが、UIWebBrowser を使って見ることにします。


uiwebbrowser
まず、コンポーネントのインストールを選んで新しいパッケージを作ります。

uiwebbrowser1
ここで、ユニットファイルに解凍した全てのPasファイルを取り込みます。

uiwebbrowser2
こんな感じです。

uiwebbrowser3

このままコンパイルするとエラーが出るのですが…。

・UIWebBrowser.Pas の MSHTML_TLB を MSHTMLに変更

・ContainsのCppプロジェクトに以下を追加。

#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "Urlmon.lib")
#pragma comment(lib, "shdocvw.lib")

・2箇所 HWND をHANDLEに書き換える。

inline __fastcall TWebBrowser(HWND ParentWindow) : Olectrls::TOleControl(ParentWindow) { }
inline __fastcall TUIWebBrowser(HWND ParentWindow) : Shdocvw::TWebBrowser(ParentWindow) { }

inline __fastcall TWebBrowser(HANDLE ParentWindow) : Olectrls::TOleControl(ParentWindow) { }
inline __fastcall TUIWebBrowser(HANDLE ParentWindow) : Shdocvw::TWebBrowser(ParentWindow) { }

UIBrowser.hppのインクルードファイル名を変更

  #include <MSHTML.hpp>    // Pascal unit
  #include <MSHTML.h>    // Pascal unit

UIFavorites.pasにバグがあるので、次のように書き換える。

      Menu := NewItem('ImpFavCaption', 0, False, True, FavoritesImport, 0, '');
      Menu := NewItem('ExpFavCaption', 0, False, True, FavoritesExport, 0, '');

      Menu := NewItem(ImpFavCaption, 0, False, True, FavoritesImport, 0, '');
      Menu := NewItem(ExpFavCaption, 0, False, True, FavoritesExport, 0, '');

・ \include\vcl\SHDocVw.hpp に以下を追加。

typedef IPersistFile *_di_IPersistFile;
typedef IDispatch *_di_IOleCommandTarget;
typedef IDropTarget *_di_IDropTarget;

この状態でコンパイルすると、

  [リンカ エラー] 外部シンボル 'InternetQueryOptionA' が未解決(\UIWEBBROWSER\UIWEBBROWSER.OBJ が参照)
  [リンカ エラー] 外部シンボル 'InternetSetOptionA' が未解決(\UIWEBBROWSER\UIWEBBROWSER.OBJ が参照)
  [リンカ エラー] 外部シンボル 'DoOrganizeFavDlg' が未解決(\UIWEBBROWSER\UIWEBBROWSER.OBJ が参照)
  [リンカ エラー] 外部シンボル 'CreateURLMoniker' が未解決(\UIWEBBROWSER\UIWEBBROWSER.OBJ が参照)
  [リンカ エラー] 外部シンボル 'RetrieveUrlCacheEntryFileA' が未解決(\UIWEBBROWSER\BROWSERDOMEVENT.OBJ が参照)
  [リンカ エラー] 外部シンボル 'UnlockUrlCacheEntryFile' が未解決(\UIWEBBROWSER\BROWSERDOMEVENT.OBJ が参照)
  [リンカ エラー] 外部シンボル 'URLDownloadToFileA' が未解決(\UIWEBBROWSER\BROWSERDOMEVENT.OBJ が参照)

のようにエラーが出るので、コマンドラインから以下を実行

$(BCB)\Bin\implib $(BCB)\Lib\psdk\shdocvw.lib %windir%\system32\shdocvw.dll

$(BCB)はC++Builderのインストールフォルダ。

できたLibファイルをインポートします。

bcw1
取りあえず、簡単なブラウザ完成。
数時間で作ったので、ほんとに基本機能しかありませんが。

黒猫ぶらうざ~ v0.10
動作確認は Windows Me と Windows 2000 ですです。

関連サイト:
UIWebBrowser

おすすめ

コメントを残す

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