Delphi:ネットを信じちゃいけないよ
Delphiでちょっとしたソフトを作っている。「TableMaker」というソフトで、HTMLの表を作るものだ。自分のブログの記事からテーブルを生成したいと思っていて、どれでやろうかと考えていたのだが、Delphiがいいかな、ということで、久々のDelphiの練習の意味も兼ねて作り始めた。
起動するとグリッド(格子、一覧表)画面が現れる。3行3列のテストデータが入っているように作った。
「テキスト」タブに切り替えると、グリッドの内容をHTMLにしたものを表示する。
「ブラウザ」タブに切り替えるとWebブラウザ的な表示をする。
グリッドとテキストのフォントは変更できる。
ブラウザには「ズーム」というトラックバーがあり、拡大表示できる。ただ、スクロールバーも大きくなってしまう。ご愛敬である。
この後、自分が読み込ませたいHTMLをインポートする機能を付ければ、目的は達成できるかなと思う。
ここまで作る過程で、1日近く「はまった」のが、TWebBrowserExコンポーネントを使ってブラウザ表示を作るところであった。無償版のDelphiの場合、ツールパレットにこのコンポーネントがない。コードで生成し、イベントハンドラとの関連付けもコードで書く必要がある。こんな感じだ。
ここでは
Wb.OnDocumentComplete := Self.WbOnDocumentComplete;
というコードを書いている。TWebBrowserExコンポーネントのインスタンスWbのOnDocumentCompleteイベントのハンドラとして、WbOnDocumentCompleteプロシジャ(メソッド)を割り当てるコードだ。ところがこれが、上の図にあるように、「型に互換性がありません。:パラメータリストが異なります」というエラーになってコンパイルできない。
WbOnDocumentCompleteプロシジャの宣言は
こんな風に書いていた。
procedure WbOnDocumentComplete(
ASender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
パラメータは3つである。でも、これではダメだというのだ。ネットの記事はこうだとみんな書いている(本当に「みんな」ではないかもしれないが)。エンバカデロのドキュメントでもそうなっている。
この図のリンクはこちら。それなのに、どうして型が合わない?ということで、猛烈に悩んだ。
悩みに悩んで、RAD Studio Architect Trialをインストールしてみることにした。そちらなら、ツールパレットにTWebBrowserコンポーネントがあるのではないかと思ったからだ。インストールし、TWebBrowserコンポーネントを貼り付けてイベントハンドラを作り、そのコードを見ると、パラメータは、
ASender: TObject;
const pDisp: IDispatch;
const URL: OleVariant
となっていた。え?constなの?
真似てみた。
これで動きましたよ…。
よーく見ると、上のリファレンスは「2007」である。どこかで変えたな…。
ということで、ネットのコードは、役に立つことが多いけれど、はまることもある、というお話でした。
現時点でのTableMakerはこちら。
H2
« 古いWindows 10でWindows Updateができない件の解決 | トップページ | Windows 10 "The Creators Update"を適用 »
「Delphi/C++Builder/RAD Studio」カテゴリの記事
- Embarcadero RAD Studio(Delphi、C++Builder)を10.2R2に更新(2018.02.10)
- RAD Studio 10.2をインストール(2017.04.07)
- Delphi:ネットを信じちゃいけないよ(2017.03.24)
- Delphi:エディタの設定を変える(2017.03.20)
- C++Builder:コマンドラインでコンパイルする(2017.03.20)
« 古いWindows 10でWindows Updateができない件の解決 | トップページ | Windows 10 "The Creators Update"を適用 »
コメント