« 古いWindows 10でWindows Updateができない件の解決 | トップページ | Windows 10 "The Creators Update"を適用 »

2017年3月24日 (金)

Delphi:ネットを信じちゃいけないよ

Delphiでちょっとしたソフトを作っている。「TableMaker」というソフトで、HTMLの表を作るものだ。自分のブログの記事からテーブルを生成したいと思っていて、どれでやろうかと考えていたのだが、Delphiがいいかな、ということで、久々のDelphiの練習の意味も兼ねて作り始めた。

起動するとグリッド(格子、一覧表)画面が現れる。3行3列のテストデータが入っているように作った。

20170324c

「テキスト」タブに切り替えると、グリッドの内容をHTMLにしたものを表示する。

20170324d

「ブラウザ」タブに切り替えるとWebブラウザ的な表示をする。

20170324e

グリッドとテキストのフォントは変更できる。

20170324f

ブラウザには「ズーム」というトラックバーがあり、拡大表示できる。ただ、スクロールバーも大きくなってしまう。ご愛敬である。

この後、自分が読み込ませたいHTMLをインポートする機能を付ければ、目的は達成できるかなと思う。

ここまで作る過程で、1日近く「はまった」のが、TWebBrowserExコンポーネントを使ってブラウザ表示を作るところであった。無償版のDelphiの場合、ツールパレットにこのコンポーネントがない。コードで生成し、イベントハンドラとの関連付けもコードで書く必要がある。こんな感じだ。

20170324g

ここでは


Wb.OnDocumentComplete := Self.WbOnDocumentComplete;

というコードを書いている。TWebBrowserExコンポーネントのインスタンスWbのOnDocumentCompleteイベントのハンドラとして、WbOnDocumentCompleteプロシジャ(メソッド)を割り当てるコードだ。ところがこれが、上の図にあるように、「型に互換性がありません。:パラメータリストが異なります」というエラーになってコンパイルできない。

WbOnDocumentCompleteプロシジャの宣言は

20170324h

こんな風に書いていた。


procedure WbOnDocumentComplete(
  ASender: TObject; 
  const pDisp: IDispatch; 
  var URL: OleVariant);

パラメータは3つである。でも、これではダメだというのだ。ネットの記事はこうだとみんな書いている(本当に「みんな」ではないかもしれないが)。エンバカデロのドキュメントでもそうなっている。

20170324i

この図のリンクはこちら。それなのに、どうして型が合わない?ということで、猛烈に悩んだ。

悩みに悩んで、RAD Studio Architect Trialをインストールしてみることにした。そちらなら、ツールパレットにTWebBrowserコンポーネントがあるのではないかと思ったからだ。インストールし、TWebBrowserコンポーネントを貼り付けてイベントハンドラを作り、そのコードを見ると、パラメータは、


ASender: TObject; 
const pDisp: IDispatch; 
const URL: OleVariant

となっていた。え?constなの?

真似てみた。

20170324j

これで動きましたよ…。

よーく見ると、上のリファレンスは「2007」である。どこかで変えたな…。

ということで、ネットのコードは、役に立つことが多いけれど、はまることもある、というお話でした。

現時点でのTableMakerはこちら

H2

« 古いWindows 10でWindows Updateができない件の解決 | トップページ | Windows 10 "The Creators Update"を適用 »

Delphi/C++Builder/RAD Studio」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Delphi:ネットを信じちゃいけないよ:

« 古いWindows 10でWindows Updateができない件の解決 | トップページ | Windows 10 "The Creators Update"を適用 »

「HandsOnIT」検索

最近のコメント

最近のトラックバック