C++ Builderはハイパーリンク処理が難しい

2016.10.27更新

C++ Builderの大きな欠点のひとつは、
ハイパーリンクの制御が難しい、もしくはできないことです。
HTMLが表示できることと、クリックやリンククリックのイベントが用意されていることとは全く別のことであることに注意してください。
  1. HTMLを表示
  2. HTMLの表示画面での右クリック処理を変更
  3. ハイパーリンクを表示
  4. カーソル位置のハイパーリンクのリンク先を取得
  5. ハイパーリンクのクリック時にリンク先を取得
  6. ハイパーリンクのクリック時に動作を変更
これらの全てを満たすことが最近のC++ Builderではできない、もしくは難しいのです。
これらができるのは、C++ Builder XE8までのバージョンのProfessional以上のエディションのVCLのTWebBrowserで、且つC++ Buildr 2009または2010からATLライブラリとそのヘッダファイルをコピーした場合だけです。
最新のBerlinのProfessinal以上のエディションを購入すればXE8、2009、2010の入手もできますが最新版でできないことはつらいです。
この古いバージョンの組み合わせでできても、VCLのTWebBrowserの制御は非常に煩雑でノウハウを得るまで時間がかかることとWindows専用です。
C++ Builder 10 Seattleと、10.1 BerlinはVCLのTWebBrowser+2009/2010のATLライブラリという組み合わせではなぜか実行時にエラーが出て動きませんでした。
もっと古いバージョンでいいなら、2002年のC++ Builder 6のCLXライブラリのTTextBrowserで簡単に実現できますがCLXがUnicodeにあまり対応していないという欠点がありますし、現在このバージョンを購入することはできません。
なぜ、C++ Builder 6(及びそのGNU/Linux版であるKylix3)のCLXでこれが簡単に実現できたかというと、CLXはQtベースだったからです。
HTML表示を諦めればVCLのTRichEditで近いことは実装できると思います。
FireMonkey(FMX)のTWebBrowserではハイパーリンク制御はできません。
Starter EditionのVCLにはTWebBrowserがありません。
TChromiumFMXというChronimum Embeddedを使うサードパーティーのコンポーネントも試しましたが、 FireMonkeyのTWebBrowser同様にクリックイベント取得とかハイパーリンク処理のことなど何も考えていないという基本貼り付けて終わりのコンポーネントでした。

他のGUIライブラリではどうなのでしょうか。
QtではQTextBrowserで簡単に実現できます。
Java SEもおそらくできるでしょう。
マイクロソフトの開発環境で使えるIEコンポーネントであるWebBrowserコントロールはなんでもできますが、普通に貼り付けただけではまともに動作せず、使うためには手間とノウハウの取得が必須になります。
Gtk+はできなかったと思います。
昔、非標準のgtkhtmlで試そうしたことがありましたが対応しているGtk+のバージョンに制限があったり、(個人的に)コンパイルが通らなかったりで、HTMLを諦めてリッチ表示を試したんですがそれも扱うのが簡単ではなく、Gtk+はQtより大きく劣っているなあという印象でした。
wxWidgetsは、wxHtmlWindowクラスに、OnLinkClicked (const wxHtmlLinkInfo &link)というのが定義されていますからできるのかも知れません。

C言語の話


あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ