Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2007年12月07日] [更新 2011年11月11日] コンポーネントのインストール方法(登録方法)等
コンポーネントの登録方法等
タイプライブラリの取り込み ( Delphi 6, 7 )
動作確認等 記事は、Windows XP(SP3) + Delphi 7 で作成







Shell32.DLL の機能をコンポーネントにする


本サイトのサンプルプログラム集でも、Windows のシェルの Shell32.dll の機能を利用しているものがあります。以下の説明は、この Shell をコンポーネントとして登録する方法です。
この他、タイプライブラリの取り込みの例が、サンプルプログラム集にいくつかあります。


図1

  • [プロジェクト]
  • [タイプライブラリの取り込み]

登録されているタイプライブラリの一覧が表示されます。この中から、取り込んでコンポーネントにするタイプライブラリを選択します。
この一覧のリストは、システムにインストールされているアプリケーション類によって異なります。


図1

  • [Microsoft Shell Controls And Automation] を選択
  • [コンポーネントラッパーの作成] をチェック
  • [インストール]
  • [...は再構築されます] で [はい]

  • ユニットディレクトリには、パスが通っている必要がある
  • この図では、Delphi インストール先の [Imports]、ここにはデフォルトでパスが通っている
図2

  • [情報]ダイアログで[OK]
  • パッケージのダイアログを閉じる時に [保存]
図3

  • [Imports] 内に
    Shell32_TLB.pas ができる
図4

  • 登録されたコンポーネント
    ShellFolderItem
    ShellLinkObject
    ShellFolderView
    Shell
    SearchCommand




ユニットの作成の場合


[ユニットの作成] で [タイプライブラリの取り込み] を実行した場合は、コンポーネントのパレットには登録されません。実行時にコンポーネントを生成して使用します。この場合、[インストール] をしないので、コンポーネントはどのパッケージにも登録されません。
[ユニットの作成] というのは、実際にはユニットの作成だけをするという意味です。[インストール] でもユニットが作成されます。違いは、パッケージへ登録するかしないかです。

例えば、コンポーネントのクラス名が他のユニットにあるクラス名やインターフェイス名と重複することがあります。そのような場合には、ユニットだけを作成し、下のコードのように、どのユニットを使用するかを明示して (ユニットスコープを追加して) 利用できます。


図5

リスト1 
uses Shell32_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
   ObjShell : Shell32_TLB.TShell;
begin
   ObjShell := TShell.Create(Self);
   ObjShell.SetTime;
end;




コンポーネントラッパーの作成をしない場合


[コンポーネントラッパーの作成] のチェック無しで [ユニットの作成] をした場合は、下のコードのように、Shell オブジェクトのインターフェイスを Create して使用することになります。
Delphi の利点は、コンポーネントとしてのクラスを使用する方法です。特別な理由がない限りお勧めできません。[コンポーネントラッパーの作成] をして[インストール] してもインターフェイスは使用できます。


図6
[ユニットの作成]のみ

リスト2 
uses Shell32_TLB;

procedure TForm1.Button1Click(Sender: TObject);
var
  ObjShell : IShellDispatch;
begin
  ObjShell := Shell32_TLB.CoShell.Create;
  ObjShell.SetTime;
  ObjShell := nil;
end;




[ ActiveX コントールの取り込み ] と [ タイプライブラリの取り込み ]


OCX (ActiveX コントロール) ファイルで提供されている場合は、[コンポーネント] [ActiveX コントロールの取り込み] から該当するコントロールを [インストール] します。

一方、DLL の機能をタイプライブラリとして取り込む際、例えば、Personal 版で TWebBrowser を利用する場合、

  • Shdocvw.dll(Microsoft Internet Controls (Version 1.1)
を [タイプライブラリの取り込み] でインストールして利用することができますが、これを、[ActiveXコントロールの取り込み] でインストールすると、下図のように、本当に [ActiveX コントロール] だけしか登録されません。

サードパーティが提供している OCX (ActiveX コントロール) のインストールは、そのサードパーティが提供している説明書で確認することになります。逆に、自分自身が OCX (ActiveX コントロール) を提供する場合は、説明書を添付することになります。



図7
[ActiveX の取り込み] の結果
  • ActiveX コントロールしか登録されない
図8
[タイプライブラリの取り込み] の結果
  • ActiveX コントロールの他、以下のオブジェクトが追加されている
    Internet Explorer
    ShellWindows
    ShellUIHelper
    ShellNameSpace