HEADLINES

■ATOK技術情報
<ATOK12/ATOK11/ATOK10 for Windows
 AMETアプリケーション開発マニュアル>


6.Visual Basic 4.0によるAMETサーバ作成例

Visual Basic 4.0 (VB4)を使ってAMETサーバを作る方法について説明する。なお、OLEオートメーションサーバの作り方に関しては、Books OnlineのProfessional Edition Documentation−Creating OLE Servers が参考になる。

ここでは実際にVB4でAMETサーバを作成し、その手順をまとめた。作成するAMETサーバ(AmetVB)はAMETの基本機能を備えたサーバである。

6−1.プロジェクトの作成

VB4でOLEサーバを作成する場合、通常のプロジェクトとは違った設定が必要である。次の手順でOLEサーバ用のプロジェクトを作成する。

    手順1.VB4を起動し、新規プロジェクトを作成する。

    手順2.【ツール−オプション】を選択してオプションダイアログを開き、プロジェクトタブ を選択する。

    手順3.スタートアップフォームを Sub Main にする。

    手順4.プロジェクト名に AmetVB と入力する。

    手順5.実行開始モードを OLEサーバ にする。

    手順6.互換OLEサーバは指定しない。

    手順7.アプリケーションの説明に説明を入力する。これはAMETでは使われない。

    手順8.[OK]をクリックする。

6−2.フォームの設計

フォームにコントロールを貼り付け、図1.のようにする。

図1.

コントロールのプロパティを次の表のように設定する。
コントロールの種類 プロパティ
Form Name AmetVBForm
Caption AmetVB
Label Name AmetYomi
Caption Yomi
BorderStyle 1 - 実線
Label Name AmetHyoki
Caption Hyoki
BorderStyle 1 - 実線
Label Name AmetBYomi
Caption BYomi
BorderStyle 1 - 実線
Label Name AmetBHyoki
Caption BHyoki
BorderStyle 1 - 実線
TextBox Name AmetResult
CommandButton Name SendResult
Caption Send

6−3.Sub Mainモジュールの作成

プロジェクトでスタートアップフォームをSub Mainにしたので、Sub Mainのモジュールを作成しなければならない。

    手順1.【挿入−標準モジュール】を選択する。

    手順2.プロパティウィンドウが表示されていないときは【表示−プロパティウィンドウ】を指定し、プロパティウィンドウを表示する。

    手順3.プロパティウィンドウの Nameプロパティ を modDSMain に設定する。

    手順4.modDSMainモジュールに次のコードを追加する。
    Sub Main()
      'フォームを表示する
      AmetVBForm.Show
    End Sub

6−3−1.フォームの表示と消去について

VB4で作成したOLEオートメーションサーバは、OLEオートメーションによって起動されたときにはフォームを表示しない。そのため、プログラムの起動時にフォームを表示するためのコードを書かなければならない。AmetVBではSubMainの中でフォームを表示させたが、それ以外の場所でもよい。

また、プログラムの終了時にフォームが表示されていると正常に終了できないので、フォームを消去後終了しなければならない。一般的にはクラスの終了処理 Class_Terminate() の中で、フォームを消去して、終了するのがよい。

6−4.クラスモジュールの作成

一般にVB4で作成するOLEサーバは、最低一つは公開されたクラスモジュールを持つ。AMETサーバは原則として一つだけのクラスモジュールを持つこととする。クラスモジュールは次の手順で作成する。

    手順1.【挿入−クラスモジュール】を選択する。

    手順2.プロパティウィンドウで Nameプロパティ に AmetClass を設定する。

    手順3.Publicプロパティ を True に設定する。

    手順4.Instancingプロパティ を 1 - CreatableSingleUse にする。

6−5.プロパティとメソッドの実装

AmetVBはすべてのプロパティとメソッドを実装する。

VB4でプロパティを実装するときは、クラスモジュールにPublic変数を定義するか、Property手続きを定義する。メソッドを実装するときは、Public SubかPublic Functionを定義する。

6−5−1.Public変数プロパティの実装

Public変数によるプロパティを実装するときは、クラスモジュールのdeclarationsセクションで変数の宣言をする。

AmetClassのdeclarationsセクションに次の変数宣言を記述する。
Option Explicit
Public AmetYomi As String
Public AmetHyoki As String
Public AmetQuit As Long
Public AmetBYomiLen As Long
Public AmetBHyokiLen As Long

6−5−2.Property手続きによるプロパティの実装

AmetResultは他のプロパティとは異なり、リードオンリープロパティなので、手続きによるプロパティとして実装する。それには次の手順が必要である。

    手順1.AmetClassのdeclarationsセクションに次の宣言を追加する。
    Private AmetResultString As String

    手順2.【挿入−プロシージャ】を選択する。

    手順3.名前ボックスに AmetResult と入力する。

    手順4.種類に Propertyプロシージャ を指定する。

    手順5.スコープに Publicプロシージャ を指定する。

    手順6.[OK]をクリックする。

    手順7.Public Property Get AmetResult()とPublic Property Let AmetResult()という2つのプロパティプロシージャが生成される。これらを次のように変更する。AmetResultはリードオンリーなので、Public Property Let AmetResult()の方は何もしない。
    Public Property Get AmetResult() As String
      AmetResultString = AmetVBForm.AmetResult.Text
      AmetResult = AmetResultString
    End Property
    Public Property Let AmetResult(vNewValue As String)
      '何もしない。
    End Property

6−5−3.AmetStartメソッドの実装

    手順1.フォームのdeclarationsセクションに次の変数を定義する。
      ’AMET通知ウィンドウハンドル
    Public AtokWindow As Long

    手順2.AmetClassのコード(declarationsセクション)を表示する

    手順3.【挿入−プロシージャ】を選択する。

    手順4.名前ボックスに AmetStart と入力する。

    手順5.種類に Subプロシージャ を指定する。

    手順6.スコープに Publicプロシージャ を指定する。

    手順7.[OK]をクリックする。

    手順8.プロシージャが生成されるので、次のように修正する。
    Public Sub AmetStart(hwnd As Long)
      AmetVBForm.AtokWindow = hwnd
      ' フォームにデータを表示する。
      AmetVBForm.AmetYomi.Caption = AmetYomi
      AmetVBForm.AmetHyoki.Caption = AmetHyoki
      AmetVBForm.AmetBYomi.Caption = Str(AmetBYomiLen) + ":" +
        Str(AmetBYomi(0)) + "," + Str(AmetBYomi(1)) + "," +
        Str(AmetBYomi(2))
      AmetVBForm.AmetBHyoki.Caption = Str(AmetBHyokiLen) + ":" +
        Str(AmetBHyoki(0)) + "," + Str(AmetBHyoki(1)) + "," +
        Str(AmetBHyoki(2))
    End Sub

6−5−4.AmetSetBYomi、AmetSetBHyokiメソッドの実装

AmetClassのdeclarationsセクションに次の変数宣言を追加する。
Private AmetBYomi(100) As Long
Private AmetBHyoki(100) As Long

AmetStartと同様の手順でAmetSetBYomi、AmetSetBHyokiの2つのメソッドを実装し、次のように修正する。
Public Sub AmetSetBYomi(idx As Long, data As Long)
  If idx <= 100 Then AmetBYomi(idx) = data
End Sub
Public Sub AmetSetBHyoki(idx As Long, data As Long)
  If idx <= 100 Then AmetBHyoki(idx) = data
End Sub

6−5−5.クラスの初期化と終了処理

VB4のクラスモジュールには、C++のコンストラクタとデストラクタに対応して、Class_Initialize()とClass_Terminate()という関数がある。AmetClassのそれぞれの関数を次のようにする。
Private Sub Class_Initialize()
  AmetYomi = ""
  AmetHyoki = ""
  AmetQuit = True
  AmetBYomiLen = 0
  AmetBHyokiLen = 0
  AmetResultString = 0
  Dim i As Integer
  For i = 0 To 100
    AmetBYomi(i) = 0
    AmetBHyoki(i) = 0
  Next
  AmetVBForm.AtokWindow = 0
End Sub
Private Sub Class_Terminate()
  AmetVBForm.Hide
  End
End Sub

Class_Terminate()では、メインフォームを消去後、Endを実行してプログラムを終了させなければならない。

6−6.ATOKへの通知

ATOKに通知するときは、AmetStart()で渡されたウィンドウハンドルにWM_AMET_NOTIFY (= WM_USER + 100)メッセージを送信する。

6−6−1.APIビューワー

VB4でWindows のAPIを使用するためには、API関数の宣言が必要である。これはVB4に附属するAPIビューワーを使うことで生成できる。

    手順1.APIビューワーを起動する。

    手順2.種類コンボボックスで 関数 を選択する。

    手順3.【ファイル−テキストファイルの読み込み】を選択する。

    手順4.Win32api.txtを読み込む。データベースに変換するか、と聞かれるので、よく使う場合は変換しておく。

    手順5.有効な項目 リストボックスから、PostMessageを検索し、[追加]をクリックする。

    手順6.次に 種類コンボボックスを 定数 に変更する。

    手順7.有効な項目 リストボックスから、WM_USERを検索し、[追加]をクリックする。

    手順8.[コピー]をクリックする。

    手順9.APIビューワーを終了する。

APIビューワーで [コピー]をクリックしたときに、APIの宣言がクリップボードに読み込まれているので、Sub Mainモジュールのdeclarationsセクションに貼り付ける。それに続けてWM_AMET_NOTIFYの定義を追加する。その結果Sub Mainモジュールのdeclarationsセクションは次のようになる。
Declare Function PostMessage Lib "user32" Alias "PostMessageA"
  (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long,
  ByVal lParam As Long) As Long
Public Const WM_USER = &H400
Public Const WM_AMET_NOTIFY As Long = WM_USER + 100

6−6−2.イベントプロシージャの追加

フォームの[Send]ボタンをダブルクリックして、イベントプロシージャSendResultClickを生成する。プロシージャを次のように修正して、ATOKにメッセージを送信する処理を追加する。
Private Sub SendResult_Click()
  If AtokWindow <> 0 Then PostMessage AtokWindow, WM_AMET_NOTIFY, 0, 0
End Sub

6−7.プロジェクトの保存とEXEファイルの生成

ファイル−名前を付けてプロジェクトの保存 を選択し、プロジェクトを適当なディレクトリに保存する。プロジェクト名を変更してもプロジェクトファイルの名前はデフォルトのProject1になっているので、AmetVBに変更する。

【ファイル−EXEファイルの作成】を選択する。EXEファイルの名前を聞いてくるので、AmetVB.EXEとする。

6−8.AMETサーバの登録

VB4で作成したAMETサーバは、コマンドラインで /REGSERVERオプションを付けて実行することでレジストリに登録される。登録を解除するときは、/UNREGSERVERオプションを付けて実行する。

6−8−1.ProgIDについて

VB4で作成したOLEサーバのProgIDは、プロジェクト名とクラス名の組み合わせになる。AmetVBの場合のProgIDはAmetVB.AmetClassである。

6−9.ATOKとの連携テスト

ATOKから呼び出せるようにするためにATOKのINIファイル(*5)に次のように登録する。
[AMET1]
名称=AmetVBサーバ
ID=AmetVB.AmetClass
未入力起動=しない
メモ帳などでATOKを起動し、未確定文字列のある状態でShift + F10キーを押してメニューを表示し、AMETメニューを起動する。そこから1番のAMETを選択するとAmetVBが起動し、読みと表記が表示される。エディットボックスに任意の文字列を入力してSendボタンをクリックすると、その文字列が確定文字列としてアプリケーションに送信され、AmetVBは終了する。

    (*5)ATOK12の場合…ATOK12W.INI
      ATOK11の場合…ATOK11W.INI
      ATOK10の場合…ATOK10W.INI


前ページ目 次次ページ



return



to topmenu

update 1998.12.2