Visual FoxProとVisual Modelerの連携 [ 設定編 ]

Visual FoxProとVisual Modelerを連携し、ラウンドトリップエンジニアリングを行えるようにする方法を解説します。

Microsoft Visual Studio 6に同梱されているVisual Modelerは、そのままではVisual BasicとVisual C++としか連携できません。
しかし、Microsoftがwebで配布しているfoxvmwiz.exeを使用すれば、Visual FoxProとVisual Modelerを連携しラウンドトリップエンジニアリングを行うことが可能になります。
Visual Modelerで作成したモデルは、コードジェネレーションウィザードにより .VCXとしてジェネレートされます。

但し、

  1. foxvmwiz.exeは、Visual Modeler ver.1 用に作成された(?)ツールのようです。
  2. リバースエンジニアリング、コードジェネレーションは、VCXのみが対象になります。
  3. コードジェネレーションを行っても、プログラムコードが作成されるわけではありません。
  4. プロパティの値やメソッドの引数は、互いに反映されません。おのおの再定義する必要があります。
  5. プロパティ・メソッドの追加は、自動的に相手側に反映されますが、削除は自動的には行われません。

VB ・ VC++ と Visual Modeler を連携してた場合に比べ、Visual FoxProとの連携では機能が不足しているのは確かですが、VCXを開発のベースとしている場合は、Visual Modelerにより.VCXの構造をヴィジュアルに把握することが可能になります。

モデルプロパティで指定できる値は、Unspecified/Inherited、ChekBox、ComboBox、CommandButton、CommandGroup、Container、Control、EditBox、From、FormSet、Grid、Image、Label、Line、ListBox、OptionGroup、OLEBoundControl、OLEControl、PageFrame、Shape、Spinner、TextBox、Timer、TollBar の25種類です。

この連携の方法は、PRIMA TECHより出版されている「Visual FoxPro 6 Enterprise Development」によります。

注意事項:コードは読みやすくするため、日本語スペースをいれています。コピーアンドペーストは、しないで下さい。

1.foxvmwiz.exeの利用

foxvmwiz.exeはマイクロソフトのwebから入手できます。

http://msdn.microsoft.com/vfoxpro/downloads/updates.asp

又 PRIMA TECHの「Visual FoxPro 6 Enterprise Development」の付録CD-ROMに収録されています。
foxvmwiz.exeは、自己解凍形式のファイルで foxvmtmpディレクトリが作成され、その中に9個のファイルが解凍されます。

README.TXT
CONNECTWIZ.HLP
CONNECTWIZ.CNT
VFPMODEL.APP
GETCLASS.FLL
DEMO.MDL
MSVM.PTY
VFP.PTY
ROSE.PTY

VFPのディレクトリにVisualModelerサブディレクトリを作成し、これらのファイルをコピーします。
README.TXTに目を通したら、早速vfpmodel.appを実行してみましょう。
VFPのコマンドウィンドウに Do Visualmodeler\vfpmodel.app with 0 と入力します。
メニューバーの「Tools」に「Object Modeling」(Fig.1)が追加され、コードジェネレーションウィザードとリバースエンジニアリングウィザードの二つがサブメニューに追加されます。

Fig.1 VFPMODEL.APPによりObject Modelingメニューが「Tools」に追加される


2.VFPのIDEの拡張

Fig.1のサブメニューにVisual Modelerを加え、Visual FoxProからVisual Modelerを起動できるようにします。このためには、少量のコードを記述する必要があります。
VFPで新規プロジェクトを作成し、Loader.prg(List.1)を作成します。

 */ Loader.prg
 */ Program sets the initial menu
 */ options for Visual Modeler and adds a third
 */ choice to start the modeling tool itself from
 */ within Visual FoxPro

 #DEFINE HKEY_LOCAL_MACHINE -2147483646

 DO LoadModeler

 Set Sysmenu Save


 Procedure LoadModeler
   Local oRegistry,AppPath,CommandLine

   AppPath = Space(0)
   CommandLine = Space(0)
   Set Procedure to Registry
   oRegistry = CreateObject("Registry")
   If File(Home()+"visualmodeler\vfpmodel.app")
     Do (Home()+"visualmodeler\vfpmodel.app") with 0
     If oRegistry.Openkey('software\Microsoft\Visual Modeler',HKEY_LOCAL_MACHINE) = 0
       oRegistry.GetKeyValue("InstallDir",@apppath)
       If !Empty(apppath) And File(apppath+"\MSVM.EXE")
        If PopUp("_ptl_omodeling")
          Define Bar 3 Of _PTL_OMODELING Prompt "\<Visual Modeler"
          CommandLine = "Run /N1 " + apppath + "\MSVM.EXE"
          On Selection Bar 3 Of _ptl_omodeling &CommandLine
        Endif
       Endif
     Endif
   Endif
 EndProc

List.1 Loader.prg - VFPからVisual Modelerを起動するコード

次に、Registry.prgをプロジェクトに追加します。Registry.prgは、VFPのサンプルコードの中にあります。
VFPのサンプルファイルがインストールされていないなら、MSDNのCD-ROMからコピーしプロジェクトに追加します。
出来上がったプロジェクトの様子をFig.2に示します。

Fig.2 プロジェクトにregistry.prgを追加

ビルドメニューでApplication(.app)を指定してLoader.prgをビルドします。 コンパイルしてできたLoader.appをVFPのディレクトリーにコピーします。
コマンドウィンドウで Do Loader.app と入力するとVisual Modelerがサブメニューに追加されます(Fig.3)。

Fig.3 サブメニューにVisual Modelerが追加されます

VFPを起動後、毎回 Do Loader.app と入力するのが面倒であれば、VFPの「Tools」−「Options...」の「File Locations」タブをクリックして、Startup Program を vfp6strt.app から Loader.appに変更します。
(注:このままではVFPを起動したときに、「Welcome to Visual FoxPro」の画面が表示されません。この画面を表示する場合は、Loader.prgの DO LoadModeler の前に Do Loader.app を追加します。)


3.レジストリーの編集

Visual ModelerをVFPと連携させるためにレジストリーを編集します。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Modeler\AddIns\VisualStudio の

PropertyFileの値をVFP.PTYに変更します。この値はデフォルトでは空です。
foxmvtmp.exeを解凍してできた、CONNECTWIZ.* と VFP.PTYをVisual Modelerのディレクトリーにコピーします。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visual Modeler\AddIns に、Visual FoxProを追加します。そのキーをFig.4のように編集します。FundamentalTypes、InstallDirの値はVisual Basicの値をコピーします。

Fig.4 AddInsに追加したVisual FoxProエントリーとキー


4.Visual Modeler IDEの拡張

Visual Modelerから、VFPのコードジェネレーションウィザードとリバースエンジニアリングウィザードを起動できるように、メニューを拡張するVFP.MNU(List.2)をVisual Modelerのディレクトリーに作成します。(日本語・英語のメニューのどちらか一方を作成します)


日本語メニュー

英語メニュー

 Menu ツール(&T)
 {
  Menu "Visual FoxPro(&F)"
  {
   Option "&モデリング ウィザード(&M)"
   {
    Exec vfpmodeler.exe
   }
  }
 }
 Menu Tools
 {
  Menu "Visual &FoxPro"
  {
   Option "&Modeling Wizards"
   {
    Exec vfpmodeler.exe
   }
  }
 }

List.2 VFP.MNU Visual ModelerのメニューにVFPのモデリングウィザードを追加する

この、メニューから呼び出されるvfpmodeler.exeを作成します。 VFPで新規プロジェクトを作成しvfpmodeler.prg(List.3)を記述します。

 */ VPFMODELER.EXE

 Local cCommand,nWindowHandle
 */ First, Check to see if this EXE is already running


 Declare Integer FindWindow in Win32API ;
   String lpClassName , String lpWindowName

 Declare Integer SetForegroundWindow In Win32API ;
   Integer hwnd

 nWindowHandle = FindWindow(0, "Visual FoxPro Modeling Wizards")
 If nWindowHandle > 0
  SetForegroundWindow(nWindowHandle)
 Else
  With _Screen
    .Caption = "Visual FoxPro Modeling Wizards"
    .AutoCenter = .T.
    .Visible = .T.
  EndWith
  cCommand = ;
    "C:\Program Files\Microsoft Visual Studio\Vfp98\Visualmodeler\vfpmodel.APP"
  Do (cCommand)
 EndIf

List.3 vfpmodeler.prg − VFPのモデリングウィザードを起動するプログラム

vfpmodeler.prgをビルドし、作成されたvfpmodeler.exeをVisual Modelerのディレクトリーにコピーします。


5.動作確認

PCをリブートし、VFPからVisual Modelerを起動したり、Visual ModelerからVFP用のウィザードを起動できるか、確認しましょう。

Fig.5 Visual ModelerのメニューにVFPのモデリングウィザードが追加されている


.

Fig.6 Visual ModelerのメニューにVFPのモデリングウィザードが追加されている

Fig.7 Visual Modelerから起動した、VFPのモデリングウィザード