忍者ブログ
愚痴とか備忘録とか
[25] [24] [23] [22] [21] [20] [19] [18] [17] [16] [15]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

調べていたら、ページはもうないみたいだけど、キャッシュで残ってたもの。
自分的にはためになった情報なのでメモとして残させていただきたいと思う。
誰だかわからなかったけど、情報を残してくれてたことに感謝。

DelphiにおけるActiveXコントロール登録法

作成手順
1、新規作成を選びActiveXコントロールを選択

2、VCLクラス名として、TButton [StdCtrls]を選択

ActiveX名称は、ButtonXとする。
(デフォルトだとButtonXです。それとかぶらないようにするための名前であれば何でも問題なし)

3、OKボタンを押しプロジェクトを作成

4、とりあえず適当な場所へプロジェクトを保存

5、ButtonIkaImpl1タグのソース部

//Testというダイアログを表示するソース変更部
procedure TButtonX.ClickEvent(Sender: TObject);
begin
  if FEvents <> nil then FEvents.OnClick;
//このあたりからソースを記載
showmessage('test');
//ここまで
end;

//usesオリジナルからの変更部

//オリジナル
uses
  Windows, ActiveX, Classes, Controls, Graphics, Menus, Forms, StdCtrls,
  ComServ, StdVCL, AXCtrls, ButtonXControl1_TLB;

//変更後。最後にDialogsを追加
uses
  Windows, ActiveX, Classes, Controls, Graphics, Menus, Forms, StdCtrls,
  ComServ, StdVCL, AXCtrls, ButtonXControl1_TLB, Dialogs;

それで、コンパイル。


6、エラーメッセージ
ホストアプリケーションを指定しないとデバッグできません。メニューから
実行|実行時引数を選んで設定してください。
と、エラーダイアログが出る。

とりあえず、無視。

7、保存を選択したディレクトリ内に、プロジェクト名のOCXが作成されていることを確認。

8、Htmlの作成をする。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">

<title>ActiveX Sample</title>
</head>

<body bgcolor="LIGHTSTEELBLUE">

<p align="center">
<object
 id="Button"
 classid="clsid:"
 codebase="ButtonXControl1.ocx"
 width="80"
 height="20">
 <param name="Caption" value="停止">
</object> </p>
</body>
</html>

とりあえず、これをコピペして張っておく。

9、クラスIDを入れる

ActiveXを使う上で最も肝になるのはクラスID。
これがないとなにも機能しない。

ButtonXControl1_TLB.pas
と言うファイルがプロジェクトと同じディレクトリ内に存在しているので、
テキストエディタで開く。

36行目前後にこのような情報が存在する


// *********************************************************************//
// タイプライブラリ中の GUID の定義。以下の規則が使われます。            
//   Type Libraries     : LIBID_xxxx                                     
//   CoClasses          : CLASS_xxxx                                     
//   DISPInterfaces     : DIID_xxxx                                      
//   Non-DISP interfaces: IID_xxxx                                       
// *********************************************************************//
const
  // タイプライブラリのメジャー/マイナーバージョン番号
  ButtonXControl1MajorVersion = 1;
  ButtonXControl1MinorVersion = 0;

  LIBID_ButtonXControl1: TGUID = '{B4F527C4-27EF-4B6E-B8BE-C6B72A998665}';

  IID_IButtonX: TGUID = '{F9B3CADA-8BCD-46A8-944D-C190949C73C1}';
  DIID_IButtonXEvents: TGUID = '{BF22C721-6409-4ABF-B135-D93B80A3A522}';
  CLASS_ButtonX: TGUID = '{EC1E647D-C6A0-4DEB-94ED-3B711D5A0ED4}';


で、その中で使うのは
  CLASS_ButtonX: TGUID = '{EC1E647D-C6A0-4DEB-94ED-3B711D5A0ED4}';
↑これ。

この中の
EC1E647D-C6A0-4DEB-94ED-3B711D5A0ED4
をコピーして先ほどのHtmlに貼り付け。

11、Html完成形

最終的なものはこんな感じになる。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">

<title>ActiveX Sample</title>
</head>

<body bgcolor="LIGHTSTEELBLUE">

<p align="center">
<object
 id="Button"
 classid="clsid:EC1E647D-C6A0-4DEB-94ED-3B711D5A0ED4"
 codebase="CloseButtonXControl1.ocx"
 width="80"
 height="20">
 <param name="Caption" value="停止">
</object> </p>
</body>
</html>

内部解説:
id : このActiveXのオブジェクト名。
ActiveX内で定義されている関数を使いたい場合に名称を使ってやる。
名称は、何でもいいが存在は必須。

例)
Button.hogehoge();
Mokemoke.hogehoge();
とか。

classid : マシンに設定されるオブジェクトIDとでも言うべき値。
レジストリ内に定義されている。そしてかならずユニークになるように設定されている。

codebase : 使用するOCXを指定。

param : 初期設定値。この場合だとCaption(ボタンの表題)を設定。
内部で初期設定値(WindowのX、Y座標とか)を指定する場合に使う。
当然、内部で定義されていない値を使っても無反応。

12、OCXのレジストリ登録
クラスIDは、レジストリ登録されているものしか使えない。(システム側で、値を管理しているのも)
それなので、レジストリ登録をしなければいけない。

ためしに、レジストリ登録しないで先ほどのHtmlを起動すると。
バッテン(イメージの読み込みの失敗時に表示されるあれ)が表示されてしまう。


レジストリ登録の方法。

ファイル名:Regist.bat
レジストリ登録をすることがわかれば何でもよい。
CloseButtonXControl1ocx_Regist.bat
とか書くとわかりやすくていいかも。

ファイル内容:
REGSVR32 ButtonXControl1.ocx

これだけ。


で、出来上がったRegist.batを起動。

DllRegisterServer in ButtonXControl1.ocx succeeded
と表示されればOK。
一度登録されていても上書きでかかれるので、OK。

念のため、アンレジストも作っておく。

ファイル名:UnRegist.bat
ファイル内容:REGSVR32 /u ColorGridXSikaXControl1.ocx

起動するとレジストリに登録されているものを削除。
削除した状態で起動しないように。

13、起動
先ほど作ったtest.html(名称はおのおので)を起動。

画面に、停止と書かれたボタンが存在するHtmlが表示される。
ボタンをクリックすると
testと書かれたダイアログボックスが出る。

一応、これで完了

PR


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
ブログ内検索
プロフィール
HN:
Baffai
性別:
非公開
趣味:
なんか色々
自己紹介:
恐怖先行型
Advertisement
リンク
バーコード
カウンター