0

しばらく前 (実際にはほぼ 5 年前)、ActiveX レポート ビューアを使用して Delphi 2007 で Crystal Reports を表示する方法を示す例がここに投稿されました。Delphi XE3 でも動作することがわかりました。私が質問したスニペットは次のとおりです。

for i := 1 to oRpt.Database.Tables.Count do begin
oRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := 'username';
oRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := 'password';
end;

私の質問: oRpt はバリアントで型付けされていないため、レポート ビューアーのプロパティを見つけて、レポートを表示または印刷する proc 内で値を設定するにはどうすればよいですか??

4

1 に答える 1

3

ドキュメントを読んでください。:-)

ActiveX サーバーに接続するには、コンパイル時 (事前バインディング) または実行時 (遅延バインディング) の 2 つの方法があります。[ MSDNに、より詳細に説明している記事があります。

アーリー バインディングは、型付き変数を使用するときに使用されるものです (コンポーネント パレットからTWordApplicationまたはを使用するなど)。TExcelApplicationタイプ ライブラリは、サポートされているタイプとインターフェイスを決定するために使用されます。メソッドはDispInterface、v テーブルから を使用して検索できます。その後、コンパイラは関数が存在することを検証し、タイプミスなどをチェックして、コード補完とコード インサイトで何が利用できるかを判断できます)。

バリアントを介して ActiveX サーバーにアクセスすること (コード スニペットが示すように) はlate binding. コードが実際に実行されるまで、コンパイラーには何もわかりません。その時点で、IDispatchインターフェイスを介してメソッドが呼び出され、その時点で成功または失敗します。コンパイラは、バリアントに含まれる可能性のあるものについて何も知らないため、設計時またはコンパイル時に、使用可能なメソッドと型を知る方法はありません。

あなたのコードは遅延バインディングを使用しているため、ドキュメントを読む以外に、どのプロパティが利用可能かを知る方法はありません (もちろん、試行錯誤しますが、これは実際にはオプションではありません)。(もう 1 つの方法は、事前バインディングを使用することです。ActiveX サーバーで使用可能なタイプ ライブラリがある場合は、その時点でバリアントの使用を停止し、コンパイラが使用できるものを判断するために使用できるインターフェイスに切り替えます。)

于 2013-02-20T22:56:02.200 に答える