HTMLエディタを作る(9)(1999/05/30)
ゴニョゴニョと変更してたけど、やっぱり任すべき仕事は任すべき相手に任せる、と言う事に落ち着くものだ。ページ移動履歴の管理は結局は、エラーを例外処理で無視すると全く完璧に解決する事が出来た。
前回のようにカウンタを用いて移動できる範囲を限定させても、ページを移動したからと言って必ずしも履歴として貯えられるとは限らない。例えば、単純にGoHomeを数回起動してみても履歴のリスト自体は更新されないが、OnNavigateComplete等のイベントハンドラは起動される。従ってカウンタが実際の履歴数を越えてカウントされてしまう。
また、アンカータグ(<A>)でページ内のジャンプは履歴リストに加わるが、アンカーによって同じページ内を行ったりきたりしても、履歴リストが更新されない場合がある。
前回で行ったようにフレームタグはそれぞれでOnNavigateCompleteもしくは同様のイベントを発生させている。
この様に、それぞれのケースに細かく対処していくとしても対応しきれない場面が多く現れて、頭が混乱してしまう事になるのである。
ここまで挫折してやっとこせ、ObjectPascalの例外処理構文「TRY〜EXCEPT〜END」を使う事を思い立ったのであった
思い違いで、COMオブジェクトの向こうで発生したエラーはこちら側では検出できないものと決めてかかっていたので今まで一度も試していなかった。悔しい。
かくして、履歴問題は解決する。
Delphiで取り込んだTWebBrowser(IE4のブラウザ部分)にはバグがあり、キーボードからのショートカットを無視してしまうことが知られている。なんでも、コンポーネントの親からのメッセージがブラウザに対してきちんと送られていないからなのだそうだ。
それを修正したのが「蛸薬師倶楽部」にて公開されている、IE4取り込みのActiveXコンポーネント「TUIWebBrowser」。今の所はまだ導入していないけど、メッセージの問題ばかりでなく様々な改良が加えられているので、お勧め。
なお、TWebBrowserを継承している訳でもなく、またこのクラスを継承する事も出来ないが、TWebBrowserと同じメソッドやプロパティを実装している(らしい)。
現在の進展状況


あと……些細な事だけど、エディタウィンドウを廃止してメインウインドウに組み込んだよ。それと関連してコンポーネントの表示状態などに連動してウィンドウの大きさが変化する部分の完成とか、タグが連続している場合で無限ループに入るバグの修正とか……ボタンの機能の実装なんかも進んで完成度はようやく3割弱と言った所か。

ダウンロードする(HM00317.LZH/301KB)