コンポーネントの登録方法等
タイプライブラリの取り込み ( Delphi 2009 - ) |
動作確認等 |
記事は,主に Windows 7 U64(SP1) + Delphi 2010(UP5) で作成 |
- 2013年03月04日
- [生成されたユニットファイルの文字コード] の説明を追加
|
ここでは,取り込んだコンポーネント類を,Delphi に標準で用意されている dclusr.dpk に登録するものとします.
パッケージに登録 (インストール) しない場合は考えておく必要ありません.パッケージに登録しない場合とは,以下の操作で [ユニットの作成] を選択する場合です.
ユニットの作成だけでよい場合は,通常のユニットファイルと同じ使い方となります. |
[ コンポーネント ] [ コンポーネントのインポート ] で取り込む |
本サイトのサンプルプログラム集には,Windows のシェルの Shell32.dll の機能を利用しているものがあります.以下は,このShell32.dll が持つ機能をコンポーネントとして登録する方法です.
新規にパッケージを作成してインポートした場合,[Imports] フォルダにライブラリのパスの設定が必要なことがあります.以下の [備考] を参考にしてください.
|
[備考 1]
タイプライブラリの取り込みで作成したユニットとそのコンパイルしたファイルは,以下の階層下の,該当バージョンの Delphi フォルダ内の [Imports] フォルダに保存されます.
%USERPROFILE%\DOCUMENTS\RAD Studio
%USERPROFILE%\DOCUMENTS\Embarcadero // Delphi XE6 以降
一方,パッケージ形式でインストールしたコンパイル済みパッケージファイル (拡張子は .bpl) は,デフォルトでは以下のフォルダの階層下の,該当バージョンの Delphi フォルダ内の [Bpl] フォルダに保存されます.
%PUBLIC%\DOCUMENTS\RAD Studio
%PUBLIC%\DOCUMENTS\Embarcadero // Delphi XE6 以降
いずれもデフォルトの設定で Delphi をインストールして,関係設定の変更がない場合です.
パッケージ形式で提供されているコンポーネントの場合は,そのパッケージの設定によっては別の場所に保存するようになっていることがあります.また,Delphi が標準で提供しているコンポーネント類のコンパイル済みパッケージは,Delphi のインストール先の [Bin] フォルダにあります.
|
|
図1
- [コンポーネント]
- [コンポーネントのインポート]
- [タイプライブラリの取り込み] を選択
- [次へ]
|
登録されているタイプライブラリの一覧が表示されます.この中から,取り込んでコンポーネントにして利用するタイプライブラリを選択します.
この一覧のリストは,システムにインストールされているアプリケーション類によって異なります. |
[備考 2]
タイプライブラリ,ActiveX の本体は DLL です.下図のダイアログの一覧表示を横スクロールするか,ダイアログを横方向にリサイズすると [ファイル名] という項目があります.それが DLL の名前ですが,タイプライブラリファイルそのもので提供されていることもあります.タイプライブラリファイルの拡張子は .tlb です.
|
|
図2
- [Microsoft Shell Controls And Automation] を選択
- [次へ]
|
|
図3
- 登録パレットを [ActiveX] に
- 存在しない名前だと新規作成される
- [コンポーネントラッパーの作成] にチェックを入れる
- [次へ]
|
|
図4
- [既存のパッケージへインストール] を選択する
(デフォルトは [ユニットの作成])
- [次へ]
|
|
図5
- dclusr140.bpl (dclusr.dpk) を選択
- 140 の部分は Delphi のバージョンによって異なる
- [完了]
|
|
図6
インストール確認ダイアログ |
|
図7
[上書き保存] して IDE を閉じる
- Shell32_TLB.pas が追加された
- これはデフォルトのままの時のユニットの保存先
- [上書き保存] して IDE を閉じる
- 新規にパッケージを作成してインストールした場合は [Imports] にライブラリのパスの設定が必要になることがある
|
|
図8
- パレットの [ActiveX] に登録された
- IDEを再起動すると更新される
|
[ユニットの作成] を選択した場合は,コンポーネントのパレットには登録されません.実行時にコンポーネントを生成して使用します.この場合,[インストール] をしないので,コンポーネントはどのパッケージにも登録されません.
[ユニットの作成] というのは,実際にはユニットの作成だけをするという意味です.[インストール] でもユニットが作成されます.違いは,パッケージへ登録するかしないかです.
例えば,コンポーネントのクラス名が他のユニットにあるクラス名やインターフェイス名と重複することがあります.そのような場合には,ユニットだけを作成し,下のコードのように,どのユニットを使用するかを明示して(ユニットスコープを追加して)利用できます. |
uses Shell32_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
ObjShell : Shell32_TLB.TShell;
begin
ObjShell := TShell.Create(Self);
ObjShell.SetTime;
end;
[コンポーネントラッパーの生成] のチェック無しで [ユニットの作成] をした場合は,下のコードのように,Shell オブジェクトのインターフェイスを Create して使用することになります.
Delphi の利点は,コンポーネントとしてのクラスを使用する方法です.特別な理由がない限りお勧めできません.[コンポーネントラッパーの作成] をして[インストール] してもインターフェイスは使用できます. |
uses Shell32_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
ObjShell : IShellDispatch;
begin
ObjShell := Shell32_TLB.CoShell.Create;
ObjShell.SetTime;
ObjShell := nil;
end;
OCX (ActiveX コントロール) ファイルで提供されているビジュアルなコンポーネント (コントロール) の場合は,[ActiveX コントロールの取り込み] を行います. |
|
図9 |
新規にパッケージを作成してインストールした場合の警告 |
新規にパッケージを作成してインストールした場合,次のような警告が表示される場合があります. |
[dcc32 警告] XXXX_TLB.pas(76): W1025 dispinterface : この仕様はサポートされていません
[dcc32 警告] XXXX_TLB.pas(78): W1025 dispinterface : この仕様はサポートされていません
[dcc32 警告] XXXX_TLB.pas(84): W1025 dispinterface : この仕様はサポートされていません
この警告が現れないようにするには,
- インストールしたパッケージを開く
- ポップアップメニューから [オプション] を選択
- 左ペインの [Delphi コンパイラ] [出力 - C/C++] を選択
- [CC++ 出力ファイルの生成] を [DCU のみ生成] にする
- [ビルド] または [再構築] して [上書き保存]
とします.C/C++ では使用できなくなりますが,Delphi だけで使用するには問題ないでしょう.
Delphi に最初から用意されている dclusr.dpk にインストール (登録) する場合はこの設定は必要ありません.dclusr.dpk は,デフォルトでこの設定になっています. |
|
図10
DCU のみ生成 |
Delphi 2009 以降のタイプライブラリの取り込みで作成されるユニットの文字コードは,UTF-8N となります.そのままでは,Delphi 2007 以前の Delphi では使用できません.
Delphi 2007 以前でも使用可能にするには,文字コードを,Shift-JIS コードに変換します. |
64 ビット版のタイプライブラリ ( ActiveX コントロール ) の取り込み |
64 ビット版のタイプライブラリ,ActiveX 等は,Delphi の IDE からは取り込めません.
つまり,64 ビット版の DLL や,OCX では,IDE からはタイプライブラリの取り込みはできません.64 ビット版の TLIBIMP.EXE を使用します.
これは,Delphi の IDE が 32 ビットのアプリケーションだからです.
タイプライブラリの取り込みをして,ユニットファイルを作成すれば,そのユニットは 32 ビット用としても 64 ビット用としても使用できます.ただし,コードが対応していないと,エラーが発生する場合があります.また,エラーが発生しなくても,正常に機能するとは限りません.このことは,他のユニット,コンポーネントでも同じです. |
登録済みの タイプライブラリ や ActiveX をリストから削除する方法です.
メニューの [表示] [登録済みのタイプライブラリ] で下図のような一覧を表示します.登録解除するライブラリを選択して [登録解除] ボタンをクリックします. |
|
図11
タイプライブラリの登録解除 |
|