SeraphyScriptDialogについて

Version 2.0 (2015/3)

概要説明

SeraphyScriptDialogは、VBScript/JScriptなどのスクリプト上でユーザー定義の簡易型ダイアログを作成できるようにするための、 COMオブジェクトによるソフトウェアコンポーネントです。

本コンポーネントの原理は、通常のウィンドウアプリケーション(Exe)が呼び出している各種Win32 APIを、VBScript/JScriptなどのスクリプト言語から本COMコンポーネント経由で呼び出すことにより、 Win32ウィンドウアプリケーションを簡易的に実現するものです。

ダイアログの構成は非常に限定的で配置などの細かい指定はできませんが、スクリプト上で簡単にダイアログボックスを定義することができます。

ダイアログはモーダルだけでなく、モードレスとしても機能させることができます。

本コンポーネントを使うことにより、WSHなどのスクリプトに対話的な機能をつけることができ、自作ユーテリティツールの機能性向上を図ることができると思います。

また補助的な機能として、アウトプットウィンドウや、ファイル操作に関する、いくつかの機能も持っています。

例: モーダルダイアログ

特徴

  • 簡単なUIの設定が可能。
    • フォームのレイアウトは非常に限定的で上から順に要素を並べることしかできませんが、そのかわり定義するのは非常に簡単です。
    • エディットボックスやファイル名入力、チェックボタン、ラジオボタン、リストボックス、プッシュボタンなどを定義できます。
  • ダイアログへのファイルのドロップが可能
  • モーダル・モードレスでのフォームの動作が可能
    • モーダルの場合、親ウィンドウがあれば親ウィンドウをディセーブルとし自フォームだけが操作可能となり、何らかのアクションが発生するまで制御を戻しません。
    • モードレスの場合、親ウィンドウをディセーブルにすることはなく、複数のフォームを同時に開いて操作することができますが、アクションの有無にかかわらず制御が戻るためループで処理する必要があります。
  • 補助機能
    • ファイル操作等に関する補助機能があります。
    • 文字列配列に関する補助機能があります。
    • 進行状態などの確認のために使えるアウトプットウィンドウがあります。

動作環境

以下の環境での動作を想定しています。

OS

以下のいずれかのOSで動作を想定しています。

  • Windows Vista
  • Windows Vista x64
  • Windows 7
  • Windows 7 x64
  • Windows 8/8.1
  • Windows 8/8.1 x64
  • Windows Server 2008/R2
  • Windows Server 2008/R2 x64

※ おそらく、Windows XPでも動作すると考えられます。

※ いずれのOSでも、VBScript, JScriptなどActiveScriptが無効にされていないこと。(標準で有効になっています。)

64ビット版OS上での注意

64ビットOSで本コンポーネントをセットアップすると、x64用とx86用の両方のコンポーネントがインストールされます。

64ビットコンポーネントは64ビットEXE用、x86(32ビット)コンポーネントは32ビットEXE用です。

64ビット環境でスクリプトをダブルクリックするなどでWSHを起動すると、64ビット版のWSHが起動するため、64ビット版のコンポーネントが使用されます。

32ビット用のWSHを起動したい場合は、例えばC:\Windows\SysWow64\wscript.exeのように明示的に32ビットEXEを起動する必要があります。

32ビット用のWSHを起動した場合は、32ビット版のコンポーネントが使用されます。

本コンポーネントそのものは64/32ともに動作しますが、使用するCOMによっては32ビット版しか用意されていないものなどがありますので、 WSHを使う場合には、どちらを用いるのか、よく確認する必要があります。

このソフトウェアプロジェクトについて

本ソフトウェアはオープンソースプロジェクトです。

プロジェクトホームはSourceforge.JP上にあります。

http://sourceforge.jp/projects/seraphyscrtools/

どなたでもご自由にご利用いただけます。

詳しくは、ライセンスおよび使用許諾条件をご確認ください。


ライセンス

ライセンスと使用許諾条件

ライセンスは、Apache License 2.0 準拠とします。

商用・非商用を問わず誰でも自由にご利用いただけます。

本アプリケーションは完全に無保証です。 本アプリケーションを使用した、いかなる結果についても作者および再配布者は責任を負いません。

最終利用者自身の責任の範囲においてご利用ください。

本コンポーネントの再配布について

本コンポーネントを使用するスクリプトを作成され、それを配布したい場合には、 SeraphyScriptDialogのセットアップをスクリプトに同梱すると良いでしょう。

また、本セットアップはInno Setupによって作成されており、オプションとして「/silent」と指定することにより、 ユーザへの問い合わせなしにインストールを完了させることができます。

独自のインストーラの作成、または複数のマシンへの一括配布などの場合にご利用いただけると思います。

ソフトウェアの改変と再配布の注意点

ソフトウェアの改変と再配布も自由です。

ただし、本ソフトウェアがCOMオブジェクトであるという性質から、バージョン管理の必要があるため、 改変したものを配布する場合には、COMのProgID、CLSID、LIBID等のGUIDがSeraphyScriptDialogと重ならないユニークなものに変えてください。

ヒント

GUIDはVisual Studioのツールメニューの「GUIDの作成」から、いつでもランダムなGUIDを取得することができます。

得られた新しいGUIDで既存のGUIDを置換してください。

改善の提案またはパッチの提供について

SeraphyScriptDialogの修正に加えた方がよいと思われる具体的な改善案、あるいはパッチを作成された場合は、 ぜひプロジェクトホーム上でご連絡もしくは投稿いただけると幸いです。


インストールについて

インストーラによるインストールとアンインストール

SeraphyScriptDialog Ver2.0はセットアッププログラムによってセットアップを行うことができます。

この場合、以下の処理が自動的に行われます。

  • DLLはシステム標準の共通プログラムフォルダ(たとえば、C:\Program Files\Common Files\SeraphyScriptDialog\2.0)に暗黙でインストールされます。
  • ヘルプ、サンプル等のインストールを選択した場合も上記フォルダに格納されます。(64ビット版の場合は64ビット版側のみ保存されます。)
  • ヘルプまたはサンプルをインストールした場合にはスタートメニューにもショートカットが追加されます。
  • 64ビット版OSでは、64ビット版コンポーネントと32ビット版コンポーネントの両方が暗黙でインストールされます。
  • 旧Version1.0のSeraphyScriptDialogがインストール済みの場合は、"SeraphyScriptDialog.1"というProgIDで旧版が利用できるようにレジストリが補正されます。(アンインストールはしません。)
  • コントロールパネルのプログラムから、アンインストールを行えるように設定されます。

基本的には、インストーラによるセットアップがお勧めです。

しかし、任意のフォルダに組み込みたい、などの場合には、以下に説明する手動によるインストールとアンインストールも可能です。

手動によるインストールとアンインストール

SeraphyScriptDialogのインストール方法

SeraphyScriptDialogはセルフレジストラになっていますので、任意のフォルダにdllをコピーしたあと、regsvr32ツールを使って登録できます。

ただし、インストール方法はX86/X64版で若干異なりますので、使用環境、使用方法に応じて以下を参考にレジストリに登録してください。

もしくは技術情報を参考にして自分でレジストリに登録してもかまいません。

regsvr32の実行には管理者権限が必要です。Vista以降の場合、コマンドプロンプトからregsvr32を実行する場合にはコマンドプロンプトを管理者権限で開いてください。

  • 32ビット版OSの場合(Windows2000/XP/2003/Vista/2008/Windows7)
    • 過去バージョン(Version1.1)が存在する場合について
      1. SeraphyScriptDialog.dllの登録に先立ち、まず、古いバージョン(SCRDLG.dll)をレジストリより登録解除してください。
      2. regsvr32.exe /u SCRDLG.DLL でレジストリから解除できます。(パスは配置した場所を適宜に指定してください。)
      3. 解除後、SCRDLG.DLLは任意でゴミ箱に入れてください。
    • Ver2.0のレジストリへの登録方法
      1. regsvr32.exe SeraphyScriptDialog.dll としてレジストリに登録してください。(パスは配置した場所を適宜に指定してください。)
      2. これによりレジストリにCOMオブジェクトが登録され、スクリプト上から使えるようになります。
      3. 登録される内容については技術情報を参照してください。
  • 64ビット版OSの場合(WindowsXP/2003/Vista/2008/Windows7)
    • これらの64ビット版OSには、Wow64により、32ビット環境と64ビット環境の2つのモードがあります。
    • 通常、VBScript/JScriptをホストするWSHは64ビット版になっており、64ビット版WSHから作成できるオブジェクトは64ビット版DLLでなければなりません。
    • もし、64ビット版WSHからSeraphyScriptDialogを使用する場合は、64ビット版のSeraphyScriptDialogX64.dllを登録してください。
    • もし、従来の32ビット版のWSHからSeraphyScriptDialogを使用する場合は、32ビット版のSeraphyScriptDialog.dllを登録してください。
    • 過去バージョン(Version1.1)が存在する場合について
      1. SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllの登録に先立ち、まず、古いバージョン(SCRDLG.dll)をレジストリより登録解除してください。
      2. C:\Windows\SysWow64\regsvr32.exe /u SCRDLG.DLL (Windows7の例。パスは配置した場所を適宜に指定してください。)
      3. 解除後、SCRDLG.DLLは任意でゴミ箱に入れてください。
    • x64版(64ビット版)のレジストリへの登録方法
      1. regsvr32.exe SeraphyScriptDialogX64.dll で登録できます。(パスは配置した場所を適宜に指定してください。)
        (Wow64上で動作する32ビット版のregsvr32.exeではないことに注意してください。)
      2. これによりレジストリにCOMオブジェクトが登録され、64ビット版のWSHからのスクリプト上で利用可能となります。
      3. 登録される内容については技術情報を参照してください。
    • x86版(32ビット版)のレジストリへの登録方法
      1. C:\Windows\SysWow64\regsvr32.exe SeraphyScriptDialog.dll で登録できます。(パスは配置した場所を適宜に指定してください。)
        (Wow64上で動作する32ビット版のregsvr32.exeであることに注意してください。)
      2. これによりレジストリにCOMオブジェクトが登録され、32ビット版のWSHからのスクリプト上で利用可能となります。
      3. 登録される内容については技術情報を参照してください。
    • x64とx86の両方のみ登録について
      • 64ビット環境では、SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllの双方を登録しても問題ありません。
      • レジストリ上に登録されるProgID、CLSID、LIBID等は64/32版ともに全く同じですが、 Wow64ではレジストリのリダイレクトが行われるため、実際に使用されるDLLは起動しているWSHが32/64ビット版であるかによって自動的に切り替えられることになります。
  • version1.1(SCRDLG.DLL)との共存について(参考までに)
    • SCRDLG.DLLは既定のProgIDしかもっておらず、バージョン付きProgIDをもっていないため、そのままでは共存できません。
    • しかし、SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllではバージョンつきProgIDとして「SeraphyScriptDialog.2」というシグネチャをもっているため、 SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllをレジストリに登録後、SCRDLG.DLLを手動でレジストリに登録し、「SeraphyScriptDialog.1」のProgIDとすることで、 たとえば「CreateObject("SeraphyScriptDialog.1")」のようにしてバージョンつきで使用するようにできます。
    • これらのレジストリへの登録は技術情報を参考に「必ず手動で」行ってください。
    • regsvr32ツールで登録しますと、レジストリの現在の登録が上書きされてしまうためSeraphyScriptDialogが動作しなくなります。
    • なお、SCRDLG.DLLは32ビット且つMBCS版(非UNICODE)ですので、64ビット環境で動作させるにはWow64上のWSHを使用する必要があります。

SeraphyScriptDialogのアンインストール方法

SeraphyScriptDialog.dll/SeraphyScriptDialogX64.dllをregsvr32ツールで登録した場合、regsvr32のオプション/u を指定することで登録解除できます。

レジストリへの登録を手動で行っている場合は、手動で削除してください。

レジストリから解除したあとは、dllは削除してかまいません。

技術情報

カスタマイズやインストール後のトラブルを解析するために必要となるかもしれない、いくつかの技術情報について記述します。

SeraphyScriptDialog.2.reg(Windows7での一例です。)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog]
@="SeraphyScriptDialog Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog\CLSID]
@="{4019FCE4-1A3B-4BFF-BF84-C036195842EF}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog\CurVer]
@="SeraphyScriptDialog.2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.2]
@="SeraphyScriptDialog Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.2\CLSID]
@="{4019FCE4-1A3B-4BFF-BF84-C036195842EF}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}]
@="SeraphyScriptDialog Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\InprocServer32]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\ProgID]
@="SeraphyScriptDialog.2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Programmable]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\TypeLib]
@="{8C5ED098-A33E-4B09-8E44-638CCF6307A8}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Version]
@="2.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\VersionIndependentProgID]
@="SeraphyScriptDialog"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0]
@="SeraphyScriptDialog 2.0 タイプ ライブラリ"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win64]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\FLAGS]
@="0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\HELPDIR]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\SeraphyScriptDialog.DLL]
"AppID"="{C781EBBC-836D-4DB3-B100-16A2BEE5F503}"

SeraphyScriptDialog.2.wow64.reg(Windows7での一例です。)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\AppID\SeraphyScriptDialog.DLL]
"AppID"="{C781EBBC-836D-4DB3-B100-16A2BEE5F503}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}]
@="SeraphyScriptDialog Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\InprocServer32]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\Win32\\Debug\\SeraphyScriptDialog.dll"
"ThreadingModel"="Apartment"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\ProgID]
@="SeraphyScriptDialog.2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Programmable]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\TypeLib]
@="{8C5ED098-A33E-4B09-8E44-638CCF6307A8}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\Version]
@="2.0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{4019FCE4-1A3B-4BFF-BF84-C036195842EF}\VersionIndependentProgID]
@="SeraphyScriptDialog"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0]
@="SeraphyScriptDialog 2.0 タイプ ライブラリ"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win32]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\Win32\\Debug\\SeraphyScriptDialog.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\0\win64]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug\\SeraphyScriptDialogX64.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\FLAGS]
@="0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\TypeLib\{8C5ED098-A33E-4B09-8E44-638CCF6307A8}\2.0\HELPDIR]
@="D:\\Media\\MyDocuments\\Visual Studio 2008\\Projects\\SeraphyScriptDialog\\SeraphyScriptDialog\\x64\\Debug"

SeraphyScriptDialog.1.wow64.reg(ver1.1との共存、Windows7での一例です。)

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.1]
@="SeraphyScriptDialog Class"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SeraphyScriptDialog.1\CLSID]
@="{86893BFE-A779-4685-8FC9-D63C8827C4C9}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}]
@="SeraphyScriptDialog"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}\InProcServer32]
@="D:\\Media\\MYDOCU~1\\VISUAL~2\\Projects\\SCRDLG\\RELEASED\\scrdlg.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{86893BFE-A779-4685-8FC9-D63C8827C4C9}\ProgID]
@="SeraphyScriptDialog.1"


更新履歴

更新履歴・歴史

Version1.1 (2000/2)

ver1.1は2000年2月にVectorに公開されました。

機能的には現在のものとほぼ同一です。

Windows NT4.0, 2000, Windows 95, 98での動作を想定していました。

なお、本コンポーネントに「2点間の座標が同一であるか？」や 「文字列リストを区切り文字で分割し配列としてアクセスする機能」などがあるのは、 本コンポーネントが、もともとはCAD/CAMの補助ツールとして作成された由来によります。

Version2.0Pre (2010/1)

その後、長らく更新していませんでしたが、Vista/Windows7発売にともなってx64版の問い合わせが何件かあったため、Ver2.0Preを2010/1/1に作成、公開しました。

Ver2では以下の点が変更されています。

  • x86/x64の両対応としました。それぞれ別のDLLですが、使用方法はかわりません。
    x64のOSにおいて、両方をインストールした場合、起動するスクリプトホスト(WSH等)が64ビット版であるか、Wow64上で動作するx86版であるかにより自動的に切り替わります。
  • UNICODEに対応しました。シフトJISでは表現できない文字を含むファイル名やテキストなどを処理することが可能となりました。(ただし、現在のところサロゲートペアの扱いは限定的です。普通の用途では問題ないと思います。)
  • WindowsXP以降のVisualStyleに対応しました。
  • ダイアログの表示位置や表示幅を変更できるようにしました。
  • ファイル入力用のエディットボックス等にはオートコンプリートの機能を持たせました。
  • 設定ファイル(ini)を使用する場合、ファイル名を指定しないとカレントディレクトリ上の「preference.ini」として使用します。
  • ExitWindowsなど、WindowsXP以降で扱いが変わったAPIについてはWindowsXP以降の流儀に改めました。
  • 内部的にはMFC(VC6)の実装からATL(Visual Studio 2008 SP1のVC)の実装に全面的に書き換えました。
  • WSH2以降で利用可能なタイプライブラリの参照(wsf形式におけるreferenceタグ)が使用可能となりました。これにより定数をシンボルで参照できるようになっています。
  • UNICODビルド版しかありません。つまり、Windows9x/MEはサポートしていません。

Version2.0 (2015/3)

2.0Preではインストーラがなく、またヘルプファイルもWindows7では標準では開くことのできない古いWinHelpのままであり、 Windows7 x64環境ではインストール作業や利用が煩雑なものでした。

2015/3に、インストーラとHtmlHelp対応を行い、Version2.0として公開しました。

Ver2.0とVer2.0Preは同一のDLLであり、機能的な変更はありません。


使い方

SeraphyScriptDialogの使い方

SeraphyScriptDialogはCOMオブジェクトですので、利用方法は簡単です。

VBScriptを使う場合なら「CreateObject関数」を使います。

JavaScriptなら「AvtiveXObject関数」を使います。

wsfファイルを使う場合は「objectタグ」を使います。

上記の方法によって作成された「SeraphyScriptDialog」オブジェクトをベースにして、

  • UserFormオブジェクト
  • OutputWindowオブジェクト
  • Listオブジェクト

などを作成することで様々な機能を実現してゆきます。

［ヒント］

SeraphyScriptDialogオブジェクトは1つ作成してあれば十分です。

そのため、グローバルオブジェクトとして作成しておいたほうが便利でしょう。

VBScriptを使う場合

    Dim obj
    Set obj = CreateObject("SeraphyScriptDialog")
    obj.About

JScriptを使う場合

    var obj = new ActiveXObject("SeraphyScriptDialog");
    obj.About();

wsfファイルを使う場合

<?xml version="1.0" encoding="UTF-8" ?>
<job>
   <object id="dlg" progid="SeraphyScriptDialog" />
   <script language="VBScript">
   <![CDATA[
      Option Explicit
      dim ver
      ver = dlg.About
      WScript.Echo "version=" & ver
   ]]>
   </script>
</job>

例: バージョン情報ダイアログ


SeraphyScriptDialogオブジェクト 概要

このオブジェクトはSeraphyScriptDialogオブジェクトの基底オブジェクトです。

このオブジェクトは、それ自身がユーテリティー機能をもっている他、

  • ユーザー定義ダイアログ
  • リスト
  • アウトプットウィンドウ

などのオブジェクトの作成を担っています。

プロパティ

プロパティ | データ型 | 説明
データ変換関連
DefaultIS | Short | 文字列変換のデフォルト桁数
DefaultFS | Short | 文字列変換のデフォルト有効精度
DefaultTolerance | Double | 実数比較のデフォルト精度
設定ファイル関連
ProfilePath | 文字列 | ユーザー定義初期化ファイル(*.ini)のパス
ProfileValue(KeyName) | 文字列 | ユーザー定義初期化ファイル(*.ini)の値へのアクセス

メソッド

メソッド | 説明
診断
About | バージョン情報ダイアログを表示します。
オブジェクト作成関連
CreateForm | ユーザー定義ダイアログ・オブジェクトを作成します。
CreateOutputWindow | アウトプットウィンドウを作成します。
CreateList | リスト・オブジェクトを作成します。
コモンダイアログ関連
GetOpenFileName | 「ファイルを開く」ダイアログを表示します。
GetSaveFileName | 「名前をつけて保存」ダイアログを表示します。
BrowseForFolder | 「フォルダを選択」ダイアログを表示します。
MessageBox | メッセージボックスを表示します。
外部プログラム関連
ShellExecute | シェルでファイルを開きます。
VersionCheck | ファイルのバージョンをチェックします。
GetFileVersion | ファイルのバージョンを取得します。
システム関連
ExitWindows | ウィンドウズをシャットダウンします。
ファイル関連
GetSpecialFolderPath | 特定フォルダを取得します。
CreateDirectory | ディレクトリを作成します。
GetTempPath | テンポラリ・ディレクトリを取得します。
GetTempFileName | テンポラリファイルを取得します。
GetFileAttributes | ファイルの属性を取得します。
GetFileLastWriteTime | ファイルの最終更新日付を取得します。
GetFileCreationTime | ファイルの作成日付を取得します。
CopyFile | ファイルをコピーします。
MoveFile | ファイルを移動します。
ChangeExtensionName | ファイル名の拡張子部分を指定拡張子に変更します。
GetLocalPathNameFILE | プロトコル指定のパスをローカル・パスに変換します。
GetFileURL | ローカル・パスをファイルURLに変換します。
イベント処理関連
GetASyncKeyState | 非同期でキー入力を検査します。
DoEvents | イベントループでメッセージを処理します。
Sleep | スレッドを指定時間停止します。
WaitCursor | 実行中の砂時計カーソルを表示します。
データ変換関連
FloatS | 実数を文字列に指定精度で変換します。
IntS | 整数を文字列に指定桁数で変換します。
IsEqual | 実数を指定精度以内で一致するか検査します。
IsPointEqual | ２点間の距離が指定精度以内にあるか検査します。

※ファイル関連は現在はシステム標準のFileSystemObjectを使うほうが汎用的です。


SeraphyScriptDialogオブジェクト プロパティ／データ変換関連

SeraphyScriptDialogプロパティ／データ変換関連

Short DefaultIS

整数→文字列変換の標準の桁数を整数で指定します。

１以上の数値であれば、指定した桁数だけ先頭にゼロが詰められます。

(例) 1の場合、3を指定すると、001となります。

マイナス1以下の数値であれば、指定した桁数だけ空白が詰められます。

Short DefaultFS

実数→文字列変換の標準の有効精度を整数で指定します。

0以上なら、指定した数値分の小数点以下桁数を表示します。

(例) 0.1234の場合で3を指定すると0.123となります。

マイナスを指定した場合は、指定した数値分の小数点以下位置を整数部まで繰り上げます

(例) 0.1234の場合で-3を指定すると123となります。

Double DefaultTolerance

実数比較の標準の精度を実数で与えます。

IsEqualメソッド、IsPointEqualメソッドで使われます。


SeraphyScriptDialogオブジェクト プロパティ／設定関連

SeraphyScriptDialogプロパティ／設定ファイル関連

BSTR ProfilePath

ユーザー定義初期化ファイル(*.ini)のパスをフルパスで設定もしくは取得します。

ProfileValueで使用される初期化ファイルです。

ファイル形式はWindows標準のiniファイル形式です。

Version2.0より、カレントディレクトリ上の「preference.ini」が初期設定されます。

(補足)

通常、vbsなどをダブルクリックで実行すると、そのvbsがある場所がカレントディレクトリとなります。

BSTR ProfileValue(KeyName)

ユーザー定義初期化ファイル(*.ini)の内容を読み書きします。

値は文字列です。

ファイルが存在しないか、未定義の名前を参照すると空の文字列が返ります。

    Dim obj
    Set obj = CreateObject("SeraphyScriptDialog")

    Dim msg
    msg = obj.ProfileValue("Message")

    MsgBox msg

    obj.ProfileValue("Message") = msg & "@"

このスクリプトを実行するたびに「@」の表示が増えてゆきます。

カレントディレクトリ上の「preference.ini」は、以下のような内容となります。

[SeraphyScriptDialogData]
Message=@@@@


SeraphyScriptDialogオブジェクト メソッド／コモンダイアログ関連

SeraphyScriptDialogメソッド／コモンダイアログ関連

Variant GetOpenFileName(Variant initname, Variant filter, Variant initdir)

「ファイルを開く」ダイアログ

引数

引数はいずれも省略可能。

Initname
最初に表示するファイル名
未指定であれば空となる。
Filter
拡張子フィルタ
「テキストファイル|*.TXT|ワード文書|*.DOC」のように区切る。
「すべてのファイル」は自動的に表示される。
最初の拡張子が標準の拡張子とされる。
未指定であれば標準の拡張子は無し、フィルタは「すべてのファイル」のみとなる。
Initdir
初期ディレクトリ
※ Version2.0は効果なし(bug)

戻り値

ファイルを指定せずにキャンセルした場合、NULLが返る。

そうでなければ選択したパスが返されます。

サンプル

Dim obj, file
Set obj = CreateObject("SeraphyScriptDialog")
file = obj.GetOpenFileName("Foo.txt", "テキスト|*.txt|XML|*.xml|")
If Not IsNull(file) then
    MsgBox "選択したファイル=" & file
Else
    MsgBox "Cancelされました"
End If

VARIANT GetSaveFileName(Variant initname, Variant filter, Variant initdir)

「名前をつけて保存」ダイアログ

指定方法はGetOpenFileNameと同一です。

サンプル

Dim obj, file
Set obj = CreateObject("SeraphyScriptDialog")
file = obj.GetSaveFileName("Foo.txt", "テキスト|*.txt|XML|*.xml|")
If Not IsNull(file) then
    MsgBox "選択したファイル=" & file
Else
    MsgBox "Cancelされました"
End If

Variant BrowseForFolder(Variant startdir)

「フォルダを選択」ダイアログ

引数

startdir
最初に選択されているディレクトリを示します。
省略した場合はカレントディレクトリが指定されたとみなします。

戻り値

選択されずキャンセルされた場合はNULL。

フォルダが選択されＯＫされた場合はパスが返されます。

Short MessageBox(BSTR mes, Variant title, Variant type)

メッセージボックスを表示します。

メッセージボックスはタスクモーダルでフォアグランドに表示されます。

引数

mes
表示するメッセージを指定します。必須です。
Title
メッセージボックスのタイトルを指定します。 省略した場合は「エラー」と表示されます。
type
メッセージボックスのアイコンおよびボタンの種類の組み合わせを整数で指定します。
以下の説明の組み合わせができます。
省略するとエラーアイコンとOKボタンの組み合わせとなります。

Typeによってメッセージボックスのアイコンとタイプを設定できます。

以下のモードとアイコンの定数の組み合わせ(足し算)を指定できます。

    const MESSAGEBOXMODE_OK = 0 ' OK
    const MESSAGEBOXMODE_OKCANCEL = 1 ' OK or CANCEL
    const MESSAGEBOXMODE_YESNO = 2 ' YES or NO
    const MESSAGEBOXMODE_YESNOCANCEL = 3 ' YES or NO or CANCEL
    const MESSAGEBOXMODE_RETRYCANCEL = 4 ' RETRY or CANCEL
    const MESSAGEBOXMODE_ABORTRETRYIGNORE = 5 ' ABORT or RETRY or IGNORE

    const MESSAGEBOXICON_NORMAL = 0 ' NORMAL ICON
    const MESSAGEBOXICON_ERROR = 10 ' ERROR ICON
    const MESSAGEBOXICON_INFORMATION = 20 ' INFORMATION ICON
    const MESSAGEBOXICON_QUESTION = 30 ' QUESTION ICON

※ wsfファイルでreferenceによるタイプライブリを指定している場合は、上記定数名で値を参照することができます。

戻り値

戻り値は、YES/OK/RETRYが1。

NO/IGNOREが0

CANCEL/ABORTが-1となります。


SeraphyScriptDialogオブジェクト メソッド／シェル関連

SeraphyScriptDialogメソッド／シェル関連

Short ShellExecute(Variant verb, Variant appname, Variant option, Variant initdir, Variant showmode, Variant waitcount)

シェルでファイルを開きます。

引数

すべての引数は省略可能です。

verb
シェルにどのような目的でファイルを開くか指定します。
省略した場合は「OPEN」となります。
その他に一般的には「EDIT」「PRINT」などがありますが、ファイルの種類により対応しているVerbは異なります。
appname
実行するアプリケーション名、ファイルまたは関連づけられているドキュメントのパスを指定します。
option
実行するファイルに引き渡すオプション引数を指定します。
不要であれば省略できます。
initdir
実行するプロセスのカレントディレクトリを指定します。 省略した場合はカレントディレクトリが指定されたとみなします。
showmode
ウィンドウの開き方を示します。
以下の説明の数値のいずれかを指定できます。
省略した場合は「ShowNormal(0)」が指定されたとみなされます。
waitcount
プロセス終了までの待機時間を指定します。
終了待ち時間を0.1秒単位で指定します。
省略した場合は「なし」となります。
-1を指定すると終了するまで待機します。

showmodeは次の指定が可能です。

    const SHOWWINDOW_MODE_HIDE = 0 ' 不可視
    const SHOWWINDOW_MODE_NORMAL = 1 ' 標準サイズ
    const SHOWWINDOW_MODE_MAXIMIZED = 3 ' 最大表示
    const SHOWWINDOW_MODE_MINIMIZED = 2 ' 最小表示
    const SHOWWINDOW_MODE_MINNOACTIVE = 7 ' 最小表示・非アクティブ

※ wsfファイルでreferenceによるタイプライブリを指定している場合は、上記定数名で値を参照することができます。

戻り値

戻り値は0で正常終了、1がタイムアウト、2がプロセス終了不明を示します。

-1の場合はプロセスが起動できなかったことを示します。

注意

  • 待機中はスレッドが停止状態になります。
  • MDIアプリなど、1つのアプリで複数のドキュメントを開くことのできるプロセスの場合、プロセス終了を判定できない場合があることに注意してください。

BOOL VersionCheck(path, v1, v2, v3, v4)

ファイルのバージョンをチェックします。

引数

引数は省略不可能です。

path
バージョンリソースをもつファイルへのパスを指定します。
v1～v4
バージョン情報の「1.0.0.1」のような表記にしたがって整数で指定します。

戻り値

戻り値は、ファイルが存在しない場合、もしくは古い場合は0。

同等か、すでに新しいファイルがある場合は1。

-1の場合はバージョン情報が取得できない場合。

Long GetFileVersion(path)

ファイルのバージョンを取得する。

引数

バージョンリソースをもつファイルへのパスを指定します。

戻り値

ファイルのバージョンが取得できない場合は0を返します。

そうでない場合はlong整数を返します。

long値はバージョンのメジャーを上位16ビット、マイナーを下位16ビットに設定した32ビット整数となります。


SeraphyScriptDialogオブジェクト メソッド／システム関連

SeraphyScriptDialogメソッド／システム関連

BOOL ExitWindows(mode)

ウィンドウズをシャットダウンします。

引数

modeは次のものが指定可能です。

        const SHUTDOWNMODE_LOGOFF = 0 ' ログオフ
        const SHUTDOWNMODE_POWEROFF = 1 ' パワーオフ
        const SHUTDOWNMODE_REBOOT = 2 ' リブート
        const SHUTDOWNMODE_SHUTDOWN = 3 ' シャットダウン

※ wsfファイルでreferenceによるタイプライブリを指定している場合は、上記定数名で値を参照することができます。

戻り値

オペレーティングシステムに要求できた場合は常にTrueが返されます。

シャットダウン等の特権がない、あるいは要求できなかった場合はエラーが発生します。

※ 旧Version1.0ではエラーではなくFalseが返されていました。

備考

  • ログオフ以外の場合のパワーオフ、リブート等の事由として「アプリケーションによる計画済みメンテナンス」として記録されます。
  • シャットダウンは現在はパワーオフと同じです。(WindowsXP SP1以前のマシンが自力でPowerOffできなかった時代の名残)


SeraphyScriptDialogオブジェクト メソッド／ファイル関連

SeraphyScriptDialogメソッド／ファイル関連

VARIANT GetSpecialFolderPath(Short type)

特定フォルダを取得します。

引数

typeには整数でフォルダ種別を指定します。

以下の数値を指定できます。

    const FOLDERID_DESKTOP = &h0000 ' DESKTOP
    const FOLDERID_INTERNET = &h0001 ' INTERNET
    const FOLDERID_PROGRAMS = &h0002 ' PROGRAMS プログラムファイルズ
    const FOLDERID_CONTROLS = &h0003 ' CONTROLS
    const FOLDERID_PRINTERS = &h0004 ' PRINTERS
    const FOLDERID_PERSONAL = &h0005 ' PERSONAL 個人フォルダ(マイドキュメント)
    const FOLDERID_FAVORITES = &h0006 ' FAVORITES お気に入り
    const FOLDERID_STARTUP = &h0007 ' STARTUP スタートアップ
    const FOLDERID_RECENT = &h0008 ' RECENT 履歴
    const FOLDERID_SENDTO = &h0009 ' SENDTO 送る
    const FOLDERID_BITBUCKET = &h000a ' BITBUCKET
    const FOLDERID_STARTMENU = &h000b ' STARTMENU スタートメニュー
    const FOLDERID_MYDOCUMENTS = &h0005 ' MYDOCUMENTS
    const FOLDERID_MYMUSIC = &h000d ' MYMUSIC
    const FOLDERID_MYVIDEO = &h000e ' MYVIDEO
    const FOLDERID_DESKTOPDIRECTORY = &h0010 ' DESKTOPDIRECTORY デスクトップ
    const FOLDERID_DRIVES = &h0011 ' DRIVES
    const FOLDERID_NETWORK = &h0012 ' NETWORK
    const FOLDERID_NETHOOD = &h0013 ' NETHOOD
    const FOLDERID_FONTS = &h0014 ' FONTS フォント
    const FOLDERID_TEMPLATES = &h0015 ' TEMPLATES テンプレート
    const FOLDERID_COMMON_STARTMENU = &h0016 ' COMMON_STARTMENU
    const FOLDERID_COMMON_PROGRAMS = &h0017 ' COMMON_PROGRAMS
    const FOLDERID_COMMON_STARTUP = &h0018 ' COMMON_STARTUP
    const FOLDERID_COMMON_DESKTOPDIRECTORY = &h0019 ' COMMON_DESKTOPDIRECTORY
    const FOLDERID_APPDATA = &h001a ' APPDATA アプリケーションデータ
    const FOLDERID_PRINTHOOD = &h001b ' PRINTHOOD
    const FOLDERID_LOCAL_APPDATA = &h001c ' LOCAL_APPDATA
    const FOLDERID_ALTSTARTUP = &h001d ' ALTSTARTUP
    const FOLDERID_COMMON_ALTSTARTUP = &h001e ' COMMON_ALTSTARTUP
    const FOLDERID_COMMON_FAVORITES = &h001f ' COMMON_FAVORITES
    const FOLDERID_INTERNET_CACHE = &h0020 ' INTERNET_CACHE
    const FOLDERID_COOKIES = &h0021 ' COOKIES
    const FOLDERID_HISTORY = &h0022 ' HISTORY
    const FOLDERID_COMMON_APPDATA = &h0023 ' COMMON_APPDATA
    const FOLDERID_WINDOWS = &h0024 ' WINDOWS
    const FOLDERID_SYSTEM = &h0025 ' SYSTEM
    const FOLDERID_PROGRAM_FILES = &h0026 ' PROGRAM_FILES
    const FOLDERID_MYPICTURES = &h0027 ' MYPICTURES
    const FOLDERID_PROFILE = &h0028 ' PROFILE
    const FOLDERID_SYSTEMX86 = &h0029 ' SYSTEMX86
    const FOLDERID_PROGRAM_FILESX86 = &h002a ' PROGRAM_FILESX86
    const FOLDERID_PROGRAM_FILES_COMMON = &h002b ' PROGRAM_FILES_COMMON
    const FOLDERID_PROGRAM_FILES_COMMONX86 = &h002c ' PROGRAM_FILES_COMMONX86
    const FOLDERID_COMMON_TEMPLATES = &h002d ' COMMON_TEMPLATES
    const FOLDERID_COMMON_DOCUMENTS = &h002e ' COMMON_DOCUMENTS
    const FOLDERID_COMMON_ADMINTOOLS = &h002f ' COMMON_ADMINTOOLS
    const FOLDERID_ADMINTOOLS = &h0030 ' ADMINTOOLS
    const FOLDERID_CONNECTIONS = &h0031 ' CONNECTIONS
    const FOLDERID_COMMON_MUSIC = &h0035 ' COMMON_MUSIC
    const FOLDERID_COMMON_PICTURES = &h0036 ' COMMON_PICTURES
    const FOLDERID_COMMON_VIDEO = &h0037 ' COMMON_VIDEO
    const FOLDERID_RESOURCES = &h0038 ' RESOURCES
    const FOLDERID_RESOURCES_LOCALIZED = &h0039 ' RESOURCES_LOCALIZED
    const FOLDERID_COMMON_OEM_LINKS = &h003a ' COMMON_OEM_LINKS
    const FOLDERID_CDBURN_AREA = &h003b ' CDBURN_AREA
    const FOLDERID_COMPUTERSNEARME = &h003d ' COMPUTERSNEARME

※ wsfファイルでreferenceによるタイプライブリを指定している場合は、上記定数名で値を参照することができます。

※ 数値はWin32のSpecialFolderIdと同じであり、同じ数値を渡すことができます。

※ 太字は旧Version1.0のヘルプにも記載があった数値です。

戻り値

存在しない場合、取得不可能だった場合はNULLを返します。

そうでなければパスを返します。

BOOL CreateDirectory(BSTR path)

ディレクトリを作成します。

引数

作成するディレクトリのパスを指定します。

戻り値

すでにディレクトリが存在する場合はTRUEを返します。

存在しない場合はディレクトリの作成を行い、成功したらTRUEを返します。

ディレクトリが作成できなければFALSEを返します。

備考

作成しようとするディレクトリの親が存在しない場合は、先に親に遡って多層的に作成します。

BSTR GetTempPath()

テンポラリ・ディレクトリを取得します。

戻り値

システムのサポートするテンポラリディレクトリを取得します。

システムで設定していない場合はカレントデイレクトリとなります。

VARIANT GetTempFileName(Variant tempDir, Variant prefix)

テンポラリファイルを作成し取得します。

引数

引数はすべて省略可能。

tempDir
作成するディレクトリを指定します。
省略した場合はカレントディレクトリとなります。
Prefix
先頭３文字がテンポラリファイルの頭につけられます。
省略時は「tmp」となります。

戻り値

成功すると実際に空のテンポラリファイルが作成され、そのパスが返されます。

作成できなかった場合はNULLが返されます。

Long GetFileAttributes(BSTR path)

ファイルの属性を取得します。

戻り値

ファイルのWin32のファイル属性データそのまま返ります。

ファイルが存在しない、またはアクセスできない場合は-1が返されます。

Date GetFileLastWriteTime(BSTR path)

ファイルの最終更新日付を取得します

戻り値

ファイルの最終更新日が返されます。

取得できなければNULLが返ります。

Date GetFileCreationTime(BSTR path)

ファイルの作成日付を取得する 取得できなければNULLが返ります。

BOOL CopyFile(BSTR source, BSTR dist, Variant safemode)

ファイルのコピーを行います。

引数

source
コピー元のファイルのパス
dist
コピー先のファイルのパス
safemode
上書き禁止フラグ、Trueの場合は上書きできません。
省略時はFalseであり、コピー先にすでにファイルが存在する場合は上書きされます。

戻り値

コピーに成功するとTRUEが返ります。

BOOL MoveFile(BSTR source, BSTR dist, Variant safemode)

ファイルの移動を行います。

実際には、Sourceファイルをdistファイルにコピーしたあと、Sourceファイルを削除します。

引数

source
移動元のファイルのパス
dist
移動先のファイルのパス
safemode
上書き禁止フラグ、Trueの場合は上書きできません。
省略時はFalseであり、移動先にすでにファイルが存在する場合は上書きされます。

戻り値

コピーに成功するとTRUEが返ります。

※ コピー後にSourceの削除に失敗してもFALSEにはなりません。

注意

ファイルはドライブを超えての移動はできないという性質があり、本メソッドでは実装の簡略化のため、 移動ができる同一ドライブ内であっても、常にコピーして削除という動作を行います。

BSTR ChangeExtensionName(BSTR path, BSTR extname)

ファイル名の拡張子部分を指定拡張子に変更し返します。

引数

path
ファイル名またはファイルへのフルパスを指定します。
extname
変更する拡張子を指定します。(ドットは含みません。)

戻り値

拡張子を変更したパスが返されます。

extnameが空の場合は拡張子が除去されます。

既存のファイル名に拡張子がない場合は拡張子が追加されたのが返されます。

VARIANT GetLocalPathName(BSTR path)

FILEプロトコル指定のパスをローカル・パスに変換します。

引数

pathには変換元パスを指定します。

戻り値

変換結果が返されます。

ローカルファイルとして変換もしくは判別できない場合はNULLが返されます。

注意点

変換可能なものは、

  • file:///x:/… というファイルプロトコルのもの。
  • x:/… という絶対パスのもの。
  • \\srv\... というUNC形式のもの。

上記以外はNULLを返します。

VARIANT GetFileURL(BSTR path)

ローカル・パスにFILEプロトコルURLに変換します。

引数

pathには変換元パスを指定します。

戻り値

変換結果が返されます。

ファイルURLとして変換もしくは判別できない場合はNULLが返されます。

備考

Version2.0からのメソッドです。


SeraphyScriptDialogオブジェクト メソッド／イベント関連

SeraphyScriptDialogメソッド／イベント関連

Short GetASyncKeyState(vk)

非同期でキー入力を検査します。

引数

vkはWin32の仮想キーコードを指定する。

仮想キーコードは、0-9、a-zであればASCIIコードそのままに対応しています。

その他の定義としては以下のようなものがあります。(すべてのコードが本メソッドで使えるとは限りません。)

       const KEYCODE_LBUTTON = &h01 ' VK_LBUTTON
    const KEYCODE_RBUTTON = &h02 ' VK_RBUTTON
    const KEYCODE_CANCEL = &h03 ' VK_CANCEL
    const KEYCODE_MBUTTON = &h04 ' VK_MBUTTON
    const KEYCODE_XBUTTON1 = &h05 ' VK_XBUTTON1
    const KEYCODE_XBUTTON2 = &h06 ' VK_XBUTTON2
    const KEYCODE_BACK = &h08 ' VK_BACK
    const KEYCODE_TAB = &h09 ' VK_TAB
    const KEYCODE_CLEAR = &h0C ' VK_CLEAR
    const KEYCODE_RETURN = &h0D ' VK_RETURN
    const KEYCODE_SHIFT = &h10 ' VK_SHIFT
    const KEYCODE_CONTROL = &h11 ' VK_CONTROL
    const KEYCODE_MENU = &h12 ' VK_MENU
    const KEYCODE_PAUSE = &h13 ' VK_PAUSE
    const KEYCODE_CAPITAL = &h14 ' VK_CAPITAL
    const KEYCODE_KANA = &h15 ' VK_KANA
    const KEYCODE_HANGEUL = &h15 ' VK_HANGEUL
    const KEYCODE_HANGUL = &h15 ' VK_HANGUL
    const KEYCODE_JUNJA = &h17 ' VK_JUNJA
    const KEYCODE_FINAL = &h18 ' VK_FINAL
    const KEYCODE_HANJA = &h19 ' VK_HANJA
    const KEYCODE_KANJI = &h19 ' VK_KANJI
    const KEYCODE_ESCAPE = &h1B ' VK_ESCAPE
    const KEYCODE_CONVERT = &h1C ' VK_CONVERT
    const KEYCODE_NONCONVERT = &h1D ' VK_NONCONVERT
    const KEYCODE_ACCEPT = &h1E ' VK_ACCEPT
    const KEYCODE_MODECHANGE = &h1F ' VK_MODECHANGE
    const KEYCODE_SPACE = &h20 ' VK_SPACE
    const KEYCODE_PRIOR = &h21 ' VK_PRIOR
    const KEYCODE_NEXT = &h22 ' VK_NEXT
    const KEYCODE_END = &h23 ' VK_END
    const KEYCODE_HOME = &h24 ' VK_HOME
    const KEYCODE_LEFT = &h25 ' VK_LEFT
    const KEYCODE_UP = &h26 ' VK_UP
    const KEYCODE_RIGHT = &h27 ' VK_RIGHT
    const KEYCODE_DOWN = &h28 ' VK_DOWN
    const KEYCODE_SELECT = &h29 ' VK_SELECT
    const KEYCODE_PRINT = &h2A ' VK_PRINT
    const KEYCODE_EXECUTE = &h2B ' VK_EXECUTE
    const KEYCODE_SNAPSHOT = &h2C ' VK_SNAPSHOT
    const KEYCODE_INSERT = &h2D ' VK_INSERT
    const KEYCODE_DELETE = &h2E ' VK_DELETE
    const KEYCODE_HELP = &h2F ' VK_HELP
    const KEYCODE_LWIN = &h5B ' VK_LWIN
    const KEYCODE_RWIN = &h5C ' VK_RWIN
    const KEYCODE_APPS = &h5D ' VK_APPS
    const KEYCODE_SLEEP = &h5F ' VK_SLEEP
    const KEYCODE_NUMPAD0 = &h60 ' VK_NUMPAD0
    const KEYCODE_NUMPAD1 = &h61 ' VK_NUMPAD1
    const KEYCODE_NUMPAD2 = &h62 ' VK_NUMPAD2
    const KEYCODE_NUMPAD3 = &h63 ' VK_NUMPAD3
    const KEYCODE_NUMPAD4 = &h64 ' VK_NUMPAD4
    const KEYCODE_NUMPAD5 = &h65 ' VK_NUMPAD5
    const KEYCODE_NUMPAD6 = &h66 ' VK_NUMPAD6
    const KEYCODE_NUMPAD7 = &h67 ' VK_NUMPAD7
    const KEYCODE_NUMPAD8 = &h68 ' VK_NUMPAD8
    const KEYCODE_NUMPAD9 = &h69 ' VK_NUMPAD9
    const KEYCODE_MULTIPLY = &h6A ' VK_MULTIPLY
    const KEYCODE_ADD = &h6B ' VK_ADD
    const KEYCODE_SEPARATOR = &h6C ' VK_SEPARATOR
    const KEYCODE_SUBTRACT = &h6D ' VK_SUBTRACT
    const KEYCODE_DECIMAL = &h6E ' VK_DECIMAL
    const KEYCODE_DIVIDE = &h6F ' VK_DIVIDE
    const KEYCODE_F1 = &h70 ' VK_F1
    const KEYCODE_F2 = &h71 ' VK_F2
    const KEYCODE_F3 = &h72 ' VK_F3
    const KEYCODE_F4 = &h73 ' VK_F4
    const KEYCODE_F5 = &h74 ' VK_F5
    const KEYCODE_F6 = &h75 ' VK_F6
    const KEYCODE_F7 = &h76 ' VK_F7
    const KEYCODE_F8 = &h77 ' VK_F8
    const KEYCODE_F9 = &h78 ' VK_F9
    const KEYCODE_F10 = &h79 ' VK_F10
    const KEYCODE_F11 = &h7A ' VK_F11
    const KEYCODE_F12 = &h7B ' VK_F12
    const KEYCODE_F13 = &h7C ' VK_F13
    const KEYCODE_F14 = &h7D ' VK_F14
    const KEYCODE_F15 = &h7E ' VK_F15
    const KEYCODE_F16 = &h7F ' VK_F16
    const KEYCODE_F17 = &h80 ' VK_F17
    const KEYCODE_F18 = &h81 ' VK_F18
    const KEYCODE_F19 = &h82 ' VK_F19
    const KEYCODE_F20 = &h83 ' VK_F20
    const KEYCODE_F21 = &h84 ' VK_F21
    const KEYCODE_F22 = &h85 ' VK_F22
    const KEYCODE_F23 = &h86 ' VK_F23
    const KEYCODE_F24 = &h87 ' VK_F24
    const KEYCODE_NUMLOCK = &h90 ' VK_NUMLOCK
    const KEYCODE_SCROLL = &h91 ' VK_SCROLL
    const KEYCODE_OEM_NEC_EQUAL = &h92 ' VK_OEM_NEC_EQUAL
    const KEYCODE_OEM_FJ_JISHO = &h92 ' VK_OEM_FJ_JISHO
    const KEYCODE_OEM_FJ_MASSHOU = &h93 ' VK_OEM_FJ_MASSHOU
    const KEYCODE_OEM_FJ_TOUROKU = &h94 ' VK_OEM_FJ_TOUROKU
    const KEYCODE_OEM_FJ_LOYA = &h95 ' VK_OEM_FJ_LOYA
    const KEYCODE_OEM_FJ_ROYA = &h96 ' VK_OEM_FJ_ROYA
    const KEYCODE_LSHIFT = &hA0 ' VK_LSHIFT
    const KEYCODE_RSHIFT = &hA1 ' VK_RSHIFT
    const KEYCODE_LCONTROL = &hA2 ' VK_LCONTROL
    const KEYCODE_RCONTROL = &hA3 ' VK_RCONTROL
    const KEYCODE_LMENU = &hA4 ' VK_LMENU
    const KEYCODE_RMENU = &hA5 ' VK_RMENU
    const KEYCODE_BROWSER_BACK = &hA6 ' VK_BROWSER_BACK
    const KEYCODE_BROWSER_FORWARD = &hA7 ' VK_BROWSER_FORWARD
    const KEYCODE_BROWSER_REFRESH = &hA8 ' VK_BROWSER_REFRESH
    const KEYCODE_BROWSER_STOP = &hA9 ' VK_BROWSER_STOP
    const KEYCODE_BROWSER_SEARCH = &hAA ' VK_BROWSER_SEARCH
    const KEYCODE_BROWSER_FAVORITES = &hAB ' VK_BROWSER_FAVORITES
    const KEYCODE_BROWSER_HOME = &hAC ' VK_BROWSER_HOME
    const KEYCODE_VOLUME_MUTE = &hAD ' VK_VOLUME_MUTE
    const KEYCODE_VOLUME_DOWN = &hAE ' VK_VOLUME_DOWN
    const KEYCODE_VOLUME_UP = &hAF ' VK_VOLUME_UP
    const KEYCODE_MEDIA_NEXT_TRACK = &hB0 ' VK_MEDIA_NEXT_TRACK
    const KEYCODE_MEDIA_PREV_TRACK = &hB1 ' VK_MEDIA_PREV_TRACK
    const KEYCODE_MEDIA_STOP = &hB2 ' VK_MEDIA_STOP
    const KEYCODE_MEDIA_PLAY_PAUSE = &hB3 ' VK_MEDIA_PLAY_PAUSE
    const KEYCODE_LAUNCH_MAIL = &hB4 ' VK_LAUNCH_MAIL
    const KEYCODE_LAUNCH_MEDIA_SELECT = &hB5 ' VK_LAUNCH_MEDIA_SELECT
    const KEYCODE_LAUNCH_APP1 = &hB6 ' VK_LAUNCH_APP1
    const KEYCODE_LAUNCH_APP2 = &hB7 ' VK_LAUNCH_APP2
    const KEYCODE_OEM_1 = &hBA ' VK_OEM_1
    const KEYCODE_OEM_PLUS = &hBB ' VK_OEM_PLUS
    const KEYCODE_OEM_COMMA = &hBC ' VK_OEM_COMMA
    const KEYCODE_OEM_MINUS = &hBD ' VK_OEM_MINUS
    const KEYCODE_OEM_PERIOD = &hBE ' VK_OEM_PERIOD
    const KEYCODE_OEM_2 = &hBF ' VK_OEM_2
    const KEYCODE_OEM_3 = &hC0 ' VK_OEM_3
    const KEYCODE_OEM_4 = &hDB ' VK_OEM_4
    const KEYCODE_OEM_5 = &hDC ' VK_OEM_5
    const KEYCODE_OEM_6 = &hDD ' VK_OEM_6
    const KEYCODE_OEM_7 = &hDE ' VK_OEM_7
    const KEYCODE_OEM_8 = &hDF ' VK_OEM_8
    const KEYCODE_OEM_AX = &hE1 ' VK_OEM_AX
    const KEYCODE_OEM_102 = &hE2 ' VK_OEM_102
    const KEYCODE_ICO_HELP = &hE3 ' VK_ICO_HELP
    const KEYCODE_ICO_00 = &hE4 ' VK_ICO_00
    const KEYCODE_PROCESSKEY = &hE5 ' VK_PROCESSKEY
    const KEYCODE_ICO_CLEAR = &hE6 ' VK_ICO_CLEAR
    const KEYCODE_PACKET = &hE7 ' VK_PACKET
    const KEYCODE_OEM_RESET = &hE9 ' VK_OEM_RESET
    const KEYCODE_OEM_JUMP = &hEA ' VK_OEM_JUMP
    const KEYCODE_OEM_PA1 = &hEB ' VK_OEM_PA1
    const KEYCODE_OEM_PA2 = &hEC ' VK_OEM_PA2
    const KEYCODE_OEM_PA3 = &hED ' VK_OEM_PA3
    const KEYCODE_OEM_WSCTRL = &hEE ' VK_OEM_WSCTRL
    const KEYCODE_OEM_CUSEL = &hEF ' VK_OEM_CUSEL
    const KEYCODE_OEM_ATTN = &hF0 ' VK_OEM_ATTN
    const KEYCODE_OEM_FINISH = &hF1 ' VK_OEM_FINISH
    const KEYCODE_OEM_COPY = &hF2 ' VK_OEM_COPY
    const KEYCODE_OEM_AUTO = &hF3 ' VK_OEM_AUTO
    const KEYCODE_OEM_ENLW = &hF4 ' VK_OEM_ENLW
    const KEYCODE_OEM_BACKTAB = &hF5 ' VK_OEM_BACKTAB
    const KEYCODE_ATTN = &hF6 ' VK_ATTN
    const KEYCODE_CRSEL = &hF7 ' VK_CRSEL
    const KEYCODE_EXSEL = &hF8 ' VK_EXSEL
    const KEYCODE_EREOF = &hF9 ' VK_EREOF
    const KEYCODE_PLAY = &hFA ' VK_PLAY
    const KEYCODE_ZOOM = &hFB ' VK_ZOOM
    const KEYCODE_NONAME = &hFC ' VK_NONAME
    const KEYCODE_PA1 = &hFD ' VK_PA1
    const KEYCODE_OEM_CLEAR = &hFE ' VK_OEM_CLEAR

※ wsfファイルでreferenceによるタイプライブリを指定している場合は、上記定数名で値を参照することができます。

戻り値

前回以降押されていればプラス、

現在押されていればマイナス、

押されてなければ0。

備考

戻り値はWin32APIと同等である。

Vkには0を指定するとF10、-1でPAUSE、-2でSCROLLである。

DoEvents(Variant waittime)

イベントループでメッセージを処理します。

スクリプト実行によってスレッドが占有されていてもメッセージを処理する必要がある場合に呼び出します。

引数

waittimeは10mSec単位で待ち時間を指定し、何らかのメッセージを処理するか、指定時間経過するまで待機します。

省略時は待機時間なしとなります。

waittimeはVersion2.0からサポートされました。旧Version1.0では待機時間は0でした。

注意

スクリプトが実行されている同一スレッド上でスクリプト以外によって管理されているウィンドウがある場合、 本メソッドにより、それらのスレッドメッセージもまとめて処理されます。

その結果として、スクリプトの完了を待たずにボタンやメニューなどが操作、実行されうるので、状況により、 擬似的なマルチスレッド的な動作となる場合があり、その副作用には注意してください。

Sleep(Short waittim)

スレッドを指定時間停止します

引数

waittimはミリ秒で指定します。

注意

スレッドが停止するためウィンドウの描画などのメッセージ処理も停止されることに注意してください。

WaitCursor(Short sw)

実行中の砂時計カーソルを表示します。

引数

swが1であれば砂時計とし、0にすると標準となります。

注意

現在は呼び出し回数をカウントしていませんが、将来においては呼び出しをカウントする可能性があるのでフラグを立てるのと解除するのは１対となるようにしてください。


SeraphyScriptDialogオブジェクト メソッド／データ変換関連

SeraphyScriptDialogメソッド／データ変換関連

BSTR FloatS(Double val, Variant len)

実数を文字列に指定精度で変換し文字列を返します。

引数

Lenは省略可能で、その場合はDefaultFSプロパティの値が使用されます。

備考

詳しくはDefaultFSの項目を参照してください。

BSTR IntS(Long val, Variant len)

整数を文字列に指定桁数で変換し文字列を返します。

引数

Lenは省略可能で、その場合はDefaultISプロパティの値が使用されます。

備考

詳しくはDefaultISの項目を参照してください。

BOOL IsEqual(Double v1, Double v2, Variant tolerance)

実数を指定精度以内で一致するか検査します。

引数

Toleranceは省略可能で、その場合はDefaultToleranceプロパティが使用されます。

備考

詳しくはDefaultToleranceの項目を参照してください。

BOOL IsPointEqual(Double x1, double y1, Double x2, Double y2, Variant tolerance)

２点間の距離が指定精度以内にあるか検査します。

Toleranceは省略可能で、その場合はDefaultToleranceプロパティが使用される。

備考

詳しくはDefaultToleranceの項目を参照してください。


UserFormオブジェクト 概要

スクリプトによってダイアログを作成するオブジェクトです。

SeraphyScriptDialogオブジェクトの「CreateFormメソッド」によって生成されます。

    dim obj
    set obj = CreateObject("SeraphyScriptDialog")

    dim frm
    set frm = obj.CreateForm()

    frm.FormTitle = "モーダルダイアログのテスト"
    frm.DefineLabel("ダイアログのテスト")

    frm.ExecuteForm()

例: シンプルなモーダルダイアログ

ダイアログはモーダルもしくはモードレスとして表示することができます。

※ モーダルは、そのダイアログが表示されている間は親ウィンドウ等は操作不可となり、且つ、なんらかのアクションがあるまでスクリプトに制御を返しません。柔軟性がありませんが、扱いやすいモードです。

モードレスは、ウィンドウを表示した状態のままスクリプトに制御を返するため、柔軟な処理ができますが、制御するのは難しくなります。

コントロールの配置・利用方法

コントロールの配置

CreateFormでオブジェクトを作成したあと、 DefineXXXXX系メソッドでコントロールを配置します。

コントロールは定義した順に上から並べられます。

使用できるコントロールは以下のものがあります。

  • ラベル
  • エディットコントロール
  • ボタン付きエディットコントロール
  • ファイル参照ボタン付きエディットコントロール
  • ボタン
  • チェックボックス
  • ラジオボタン
  • コンボボックス
  • ドロップダウンリスト
  • リストボックス

コントロールの配置が終わったら、ExecuteFormもしくはComposeFormメソッドにより ダイアログを表示します。

※ 表示中のダイアログに対してコントロールの追加削除はできません。

コントロールへのアクセス

コントロールを配置する「DefineXXXXX系メソッド」は、 コントロール番号を返します。

この番号を使ってコンポーネントの状態にアクセスすることができます。

プロパティ

プロパティ | データ型 | 説明
ダイアログ全体
FormTitle | 文字列 | フォームのタイトル
FormPos | 文字列 | フォームの表示位置
FormWidth | Short | フォームの表示幅
EnableForm | Boolean | フォーム全体の有効・無効
ファイルのドロップ
AcceptDropFiles | Boolean | ファイルのドロップを許可
DropFiles | 文字列 | ドロップされたファイル一覧 (読み込み専用)
コントロールへのアクセス
Value(n) | Variant | コントロール番号nの値
Enable(n) | Boolean | コントロール番号nの有効無効の状態
IsModify(n) | Variant | コントロール番号nが入力によって変更されているか？ (読み込み専用)

メソッド

メソッド | 説明
コントロールの配置
ClearAllControls | ダイアログのすべてのコントロールの定義をクリアします。
DefineLabel | ラベル・コントロールを定義します。
DefineEdit | エディットコントロールを定義します。
DefineEditButton | ボタン付エディットコントロールを定義します。
DefineFileEdit | ファイル入力欄用コントロールを定義します。
DefineButton | ボタンを定義します。
DefineCheckButton | チェックボックスを定義します。
DefineRadioButton | ラジオボタンを定義します。
DefineComboBox | コンボボックスを定義します。
DefineDropdownList | ドロップダウンリストを定義します。
DefineListBox | リストボックスを定義します。
モーダルダイアログ
ExecuteForm | モーダル・ダイアログを実行します。
モードレスダイアログ
ComposeForm | モードレス・ダイアログを構築し表示開始します。
DestroyForm | モードレス・ダイアログを終了します。
WaitEvent | モードレス・ダイアログのメッセージループ処理


UserFormプロパティ

UserFormプロパティ／ダイアログ全体

BSTR FormTitle

フォームのタイトルを取得・設定します。

BSTR FormPos

フォームの表示位置を"X,Y"形式の文字列で取得・設定します。

指定されていない場合は空文字となります。

FormPosはVersion2.0からサポートされました。

Short FormWidth

フォームの表示幅を取得・設定します。

0未満は明示的な指定なしを意味します。

※ 最低50は必要です。

BOOL EnableForm

フォーム全体の有効・無効を取得・設定します。

解説

具体的にはモードレス・ダイアログをつくり、あるイベントに対応してサブ・フォームを表示するときに親を無効にしておく必要があります。

フォームが表示されていないと使えません。

UserFormプロパティ／ファイルのドロップ

SHORT AcceptDropFiles

ファイルのドロップを許可・不許可を取得・設定します。

    0 = ファイルのドロップを禁止する
    1 = ファイルのドロップを許可する。

許可されている場合にファイルがドロップされると、イベント番号9000でイベントが発生します。

※ モーダルダイアログなら、ドロップによってダイアログが終了します。

BSTR DropFiles

ドロップされたファイル一覧の文字列を取得します。

読み込み専用です。

ドロップされた場合、そのファイル名のリストが区切り文字「;」で区切られて入ります。

フォルダの場合も、そのままのパスが入ります。

UserFormプロパティ／コントロールへのアクセス

BSTR Value(Short n)

コントロール番号nを指定して、そのコントロールの値を読み書きするためのプロパティです。

フォームが表示されていない場合の書き込みは表示されたときに反映されます。

存在しないコントロール番号を指定した場合は常に空を読み込み、書き込みは無視されます。

BOOL Enable(Short n)

コントロール番号nを指定して、そのコントロールのの表示状態を読み書きするためのプロパティです。

フォームが表示されていない場合の書き込みは表示されたときに反映されます。

存在しないコントロール番号を指定した場合は常にTrueを返し、書き込みは無視されます。

BOOL IsModify(Short n)

コントロール番号nを指定して、そのコントロールが入力によって変更されているかを検査するプロパティです。

読み込み専用です。

フォームが表示されていなくても使えます。

存在しないコントロール番号を指定した場合は常にFALSEを返します。


UserFormメソッド／コントロールの配置/ClearAllControls

UserFormメソッド／コントロールの配置

ClearAllControls

ユーザー定義ダイアログに設定されたコントロール定義をリセットします。

備考

通常、使われません。

フォームの定義は、ExecuteFormメソッドを呼び出したあとも、明示的にコントロールを変更しないかぎり定義状態は変わりません。

再度ExecuteFormメソッドを呼び出すことが可能です。


UserFormメソッド／コントロールの配置/DefineLabel

UserFormメソッド／コントロールの配置

Short DefineLabel(BSTR title)

titleで指定された文字をもつラベルを定義します。

引数

title
表示する文字列を指定します。

戻り値

コントロール番号が返されます。

備考

Valueプロパティを設定することでプログラム的に表示内容を変更することもできます。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
frm.DefineLabel "本日の日付:"
Dim lbl2: lbl2 = frm.DefineLabel("")
frm.Value(lbl2) = FormatDateTime(Now, vbLongDate)
frm.Enable(lbl2) = False
frm.ExecuteForm()

例: ラベルの例


UserFormメソッド／コントロールの配置/DefineEdit

UserFormメソッド／コントロールの配置

Short DefineEdit(VARIANT title, VARIANT value, VARIANT multiline)

エデイットコントロールを作成します。

引数

title
タイトルを指定する場合、左側にタイトル欄が作成されます。
省略した場合はタイトル欄は作成されません。
value
初期値を指定します。
Multiline
複数行エディットコントロールにする場合に、その行数を指定します。
Multilineは複数行にした場合、改行が許可されます。

戻り値

コントロール番号が返されます。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim edt1: edt1 = frm.DefineEdit(, "edt1-value")
Dim edt2: edt2 = frm.DefineEdit("edt2-title", "edt2-value")
Dim edt3: edt3 = frm.DefineEdit(,"xx" & vbCrLf & "yy", 5)
Dim btn1: btn1 = frm.DefineButton("OK")
If frm.ExecuteForm() = btn1 Then
    MsgBox frm.Value(edt1) & ":" & frm.Value(edt2) & ":" & frm.Value(edt3)
End If

例: エディットボックスの例


UserFormメソッド／コントロールの配置/DefineEditButton

UserFormメソッド／コントロールの配置

Short DefineEditButton(VARIANT title, VARIANT value, VARIANT btnTitle, VARIANT commandnumber)

ボタン付エディットコントロールを作成します。

引数

title
タイトルを指定する場合、左側にタイトル欄が作成されます。
省略した場合はタイトル欄は作成されません。
value
初期値を指定します。
btnTitle
右側に作成されるボタン欄のタイトルを指定します。
commandnumber
ボタンが押されたときにイベントとして返される値を指定します。
省略するとコントロール番号と同じとなります。

戻り値

コントロール番号が返されます。

備考

コントロール番号は定義順に1より割り当てられるため、commandnumberを明示的に指定する場合には、 他のコントロール番号と衝突しないように十分に大きな値を設定してください。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim edt1: edt1 = frm.DefineEditButton(, "edt1-value", "ボタン1")
Dim edt2: edt2 = frm.DefineEditButton("edt2-label:", "edt2-value", "ボタン2")
Dim ret: ret = frm.ExecuteForm()
If ret = edt1 Then
    MsgBox frm.Value(edt1)
ElseIf ret = edt2 Then
    MsgBox frm.Value(edt2)
End If

例: エディットボタンの例


UserFormメソッド／コントロールの配置/DefineFileEdit

UserFormメソッド／コントロールの配置

Short DefineFileEdit(VARIANT title, VARIANT value, VARIANT btnTitle, VARIANT mode, VARIANT filter)

ファイルを開く・名前をつけて保存ダイアログのボタンをもつエデイットコントロールを作成します。

レイアウトはDefineEditButtonと同じですが、ボタン押下によるコマンドイベントは発生しません。

引数

title
タイトルを指定する場合、左側にタイトル欄が作成されます。
省略した場合はタイトル欄は作成されません。
value
初期値を指定します。
btnTitle
右側に作成されるボタン欄のタイトルを指定します。
mode
ファイルダイアログの種類を指定します。
0で「ファイルを開く」ダイアログ、1で「ファイルの保存」ダイアログとなります。
省略時は「ファイルを開く」ダイアログとなります。
filter
ファイルの種類を指定します。
「ワード|*.DOC;*.TXT|エクセル|*.XLS;*.CSV」のように区切り文字として「|」を使ってフィルタを指定します。
また「全てのファイル」は自動的に最後に作られます。
最初のフィルタに指定された拡張子がデフォルトの拡張子となります。

戻り値

コントロール番号が返されます。

備考

エディットコントロール部はファイルのパスへのオートコンプリートが有効となります。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim edt1: edt1 = frm.DefineFileEdit(, "edt1-value","開く", 0, "テキスト|*.txt")
Dim edt2: edt2 = frm.DefineFileEdit("edt2-label:", "edt2-value", "保存", 1, "データ|*.dat")
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "Open=" & frm.Value(edt1) & vbCrLf & "Save=" & frm.Value(edt2)
End If

例: ファイルエディットの例


UserFormメソッド／コントロールの配置/DefineButton

UserFormメソッド／コントロールの配置

Short DefineButton(BSTR title, Variant commandnumber)

ボタンを作成します。

引数

title
ボタンのタイトルを指定します。
複数ボタンを横に並べて表示する場合には、「a;b;c」のように区切り文字「;」によって区切ります。
commandnumber
ボタンが押されたときのイベントとして返される番号で、最初のボタンから1づつカウントアップされます。
たとえば、「a;b;c」と3つのボタンを定義し、commandnumberが100であれば、ボタンCは102という番号が返ります。
Commandnumberを省略するとコントロール番号と同じ番号になりますが、 2つ以上のボタンを使う場合は次のコントロールのイベントと重複するため、必ずcommandnumberに大きな値を指定する必要があります。

戻り値

コントロール番号が返されます。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim btn1: btn1 = frm.DefineButton("コマンド1;コマンド2;コマンド3", 10)
Dim btn2: btn2 = frm.DefineButton("コマンド4;コマンド5", 20)
Dim btn3: btn3 = frm.DefineButton("コマンド6")
Dim ret: ret = frm.ExecuteForm()
MsgBox "commandnumber=" & ret

例: ボタンの例


UserFormメソッド／コントロールの配置/DefineCheckButton

UserFormメソッド／コントロールの配置

Short DefineCheckButton(BSTR title, Variant value, Variant mode)

チェックボックスを作成します。

引数

title
ボタンのタイトルを指定します。
複数ボタンの場合には、「a;b;c」のように区切り文字「;」によって区切ります。
value
1ならばオン、0ならばオフを意味します。
複数ボタンの場合は文字列で「01100」のように指定します。
mode
1ならば縦方向、0ならば横方向にボタンを並べます。
省略時は横方向へ並べます。

戻り値

コントロール番号が返されます。

備考

タイトル欄に区切り文字「;」を指定した場合、複数チェックボックスが作成されます。

複数チェックボックスは「a;b;c;d;e」のように指示して作成し、valueは、それぞれ「01100」のように文字列で指定します。

左の桁から最初のボタンとなります。

この例ではBボタンとCボタンがONとなります。

操作が煩雑になるので縦方向のチェックボタンであればDefineCheckButtonを繰り返したほうがよいでしょう。

サンプル1 (横方向)

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim chk1: chk1 = frm.DefineCheckButton("チェック1;チェック2;チェック3", "001")
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "chk=" & frm.Value(chk1)
End If

例: チェックボタンの例(横方向)

サンプル2 (縦方向)

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim chk1: chk1 = frm.DefineCheckButton("チェック1;チェック2;チェック3", "001", 1)
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "chk=" & frm.Value(chk1)
End If

例: チェックボタンの例(縦方向)

サンプル3 (縦方向・シンプル)

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim chk1: chk1 = frm.DefineCheckButton("チェック1", 0, 1)
Dim chk2: chk2 = frm.DefineCheckButton("チェック2", 0, 1)
Dim chk3: chk3 = frm.DefineCheckButton("チェック3", 1, 1)
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "chk=" & frm.Value(chk1) & frm.Value(chk2) & frm.Value(chk3)
End If

例: チェックボタンの例(縦方向・シンプル)


UserFormメソッド／コントロールの配置/DefineRadioButton

UserFormメソッド／コントロールの配置

Short DefineRadioButton(BSTR title, Variant value, Variant mode)

ラジオボタンを作成します。

引数

title
タイトル欄を「;」で区切り、「a;b;c;d;e」のようにして複数ラジオボタンのグループを作成します。
value
チェックされている番号を指定します。
左側より0番から始まる整数となります。
省略した場合は未選択となります。
mode
1ならば縦方向、0ならば横方向にボタンを並べます。
省略時は横方向へ並べます。

戻り値

コントロール番号が返されます。

備考

ラジオボタンは選択したボタン位置(先頭より0から始まる数値)となります。

未選択の場合は-1となります。

サンプル1 (横方向)

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim chk1: chk1 = frm.DefineRadioButton("ラジオ1;ラジオ2;ラジオ3", 0)
Dim chk2: chk2 = frm.DefineRadioButton("ラジオa;ラジオb")
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "chk1=" & frm.Value(chk1) & vbCrLf & "chk2=" & frm.Value(chk2)
End If

例: ラジオボタンの例(横方向)

サンプル2 (縦方向)

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim chk1: chk1 = frm.DefineRadioButton("ラジオ1;ラジオ2;ラジオ3", 0, 1)
frm.DefineLabel ""
Dim chk2: chk2 = frm.DefineRadioButton("ラジオa;ラジオb",,1)
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "chk1=" & frm.Value(chk1) & vbCrLf & "chk2=" & frm.Value(chk2)
End If

例: ラジオボタンの例(縦方向)


UserFormメソッド／コントロールの配置/DefineComboBox

UserFormメソッド／コントロールの配置

Short DefineComboBox(Variant title, Variant value, Variant list)

コンボボックスを作成します。

編集可能なエディットボックスと、ドロップダウンリストの組み合わせです。

引数

title
タイトル欄は省略可能で、指定した場合は左側にタイトルが作成されます。
value
エデイットコントロール部にはvalueが初期値として入ります。
list
ドロップダウンによって選択できるリストはlistに区切り文字「;」によって指定します。

戻り値

コントロール番号が返されます。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim cbo1: cbo1 = frm.DefineComboBox()
Dim cbo2: cbo2 = frm.DefineComboBox(,"data2","data1;data2;data3")
Dim cbo3: cbo3 = frm.DefineComboBox("label3",,"data1a;data2a;data3a")
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "cbo1=" & frm.Value(cbo1) & vbCrLf & _
        "cbo2=" & frm.Value(cbo2) & vbCrLf & _
        "cbo3=" & frm.Value(cbo3)
End If

例: コンボボックスの例


UserFormメソッド／コントロールの配置/DefineDropdownList

UserFormメソッド／コントロールの配置

Short DefineDropdownList(Variant title, Variant value, Variant list)

ドロップダウンリストボックスを作成します。

指定方法はComboBoxとほぼ同じですが、エディットボックスは編集不可能であり、 valueが選択番号となります。

引数

title
タイトル欄は省略可能で、指定した場合は左側にタイトルが作成されます。
value
リストの0より始まる選択番号を数値で指定します。
未選択の場合は-1を指定します。
list
ドロップダウンによって選択できるリストはlistに区切り文字「;」によって指定します。

戻り値

コントロール番号が返されます。

備考

未選択を表すValue値は-1となります。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim cbo1: cbo1 = frm.DefineDropdownList(,1,"data1;data2;data3")
Dim cbo2: cbo2 = frm.DefineDropdownList("label3",,"data1a;data2a;data3a")
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "cbo1=" & frm.Value(cbo1) & vbCrLf & _
        "cbo2=" & frm.Value(cbo2) & vbCrLf
End If

例: ドロップダウンリストの例


UserFormメソッド／コントロールの配置/DefineListBox

UserFormメソッド／コントロールの配置

Short DefineListBox(Variant list, Variant value, Variant line, Variant multi)

リストボックスを作成します。

引数

list
表示するリスト項目をセミコロン区切りで定義します。
たとえば「abc;def;xyz」のように指示します。
value
初期選択とするリストの0から始まる選択番号を整数で指定します。
省略すると未選択となります。
multi引数を1とした場合は複数選択可能となり、その場合はセミコロン区切りで複数の選択番号を文字列で指定します。
たとえば「0;1」のように指定します。
line
リストの表示行数を指定します。
省略するか1未満の場合は1行が設定されます。
multi
1を指定した場合は複数選択可能となります。
省略した場合、もしくは0の場合は単一選択となります。

戻り値

コントロール番号が返されます。

備考

未選択の場合のValue値は-1となります。

lineで指定する行数は、コントロールの行数を表しており、中のアイテムの行数とは無関係です。

通常、コントロールの高さのほうがアイテムの高さよりも大きいことに注意してください。

サンプル

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
Dim lst1: lst1 = frm.DefineListBox("a;b;c")
Dim lst2: lst2 = frm.DefineListBox("abc;def;xyz", 1, 3)
Dim lst3: lst3 = frm.DefineListBox("月;火;水;木;金;土;日", "0;1;2", 7, 1)
Dim btn1: btn1 = frm.DefineButton("OK")
Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox "lst1=" & frm.Value(lst1) & vbCrLf _
        & "lst2=" & frm.Value(lst2) & vbCrLf _
        & "lst3=" & frm.Value(lst3)
End If

例: リストボックスの例


UserFormメソッド／モーダルダイアログ

Short ExecuteForm

モーダル・ダイアログの実行を行います。

ボタンが押されるか、ウィンドウがクローズされるまで制御を返しません。

戻り値

押されたボタンのcommandnumberか、あるいは-1が返ります。

-1はウィンドウのクローズを意味します。

備考

  • 本メソッドを実行する前にフォームがすでに表示されていてはなりません。
  • ESCキー押下するとウィンドウのクローズとなります。
  • 本メソッドの実行によりフォームが表示され、ウィンドウを閉じるかボタンを押下し制御が返されるとフォームは非表示となります。
  • 非表示になったフォームは再度本メソッドで表示させることができます。

モーダルの例

ソースコード

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
frm.FormTitle = "ユーザー情報の入力"
frm.FormWidth = 250

frm.DefineLabel "姓を入れてください"
Dim nEdit1: nEdit1 = frm.DefineEdit()

frm.DefineLabel "名前を入れてください"
Dim nEdit2: nEdit2 = frm.DefineEdit()

Dim btn1: btn1 = frm.DefineButton("了解;ｷｬﾝｾﾙ")

Dim ret: ret = frm.ExecuteForm()
If ret = btn1 Then
    MsgBox frm.Value(nEdit1) & frm.Value(nEdit2)
End If

実行結果

例: モーダルの例

解説

フォーム上にDefineButtonメソッドにより2個のボタンを定義しています。

明示的にcommandnumberを指定しない場合、最初のボタンのcommandnumberはコントロール番号と同じです。

そのため、「了解」ボタンが押された場合のみ、エディットボックス1,2の内容をメッセージボックスに表示しています。

ESCキー、あるいは×ボタンによりウィンドウを閉じるか、あるいはキャンセルボタンを押下した場合は無視しています。

なお、フォームの幅はFormWidthで標準より少し小さくしています。


UserFormメソッド／モードレスダイアログ

Short ComposeForm

モードレス・ダイアログを表示します。

戻り値

成功した場合は0以外が返されます。

なお、旧Version1.0ではフォームがすでに表示されている場合は0を返しましたが、 Version2.0ではエラーとなります。

備考

フォームがすでに表示されていてはなりません。

実際にモードレスダイアログを機能させるには、WaitEventメソッドを繰り返し呼び出す必要があります。

DestroyForm

モードレス・ダイアログを終了します。

備考

フォームがすでに表示されている必要があります。

Short WaitEvent(Variant timeout)

モードレス・ダイアログ用イベントループを処理します。

引数

timeoutは10mSec単位の待ち時間を指定します。

省略した場合は待ち時間なしとなります。

指定した時間が経過するか、何らかのコマンド番号が発生すると制御が返されます。

戻り値

何らかのコマンド番号が発生した場合は、待ち時間を待たず、そのコマンド番号を直ちに返します。

そうでない場合は待ち時間を経過後、NULLを返します。

備考

バックグラウンドで何か処理をしたい場合はtimeout値には小さな値を指定しループ中で処理を行います。

フォームのイベントを待つだけなら大きな値を指定します。

イベントはボタンやウィンドウを閉じる場合はモーダル・ダイアログの場合と同様な戻り値が返ります。

そのほかに、チェックボタンやラジオボタン、リストボックスが操作された場合には、そのコントロール番号が返ります。 (※ Version2.0ではイベントは発生しません。)

イベントがなければNULLが返ります。

SeraphyScriptDialogオブジェクトの基本クラスのDoEventsと同等な機能を果たしますが、 モードレスダイアログのイベントを受け取る場合は、こちらを使ってください。

注意

スクリプトが実行されている同一スレッド上でスクリプト以外によって管理されているウィンドウがある場合、 本メソッドにより、それらのスレッドメッセージもまとめて処理されます。

その結果として、スクリプトの完了を待たずにボタンやメニューなどが操作、実行されうるので、状況により、 擬似的なマルチスレッド的な動作となる場合があり、その副作用には注意してください。

モードレスの例

ソースコード

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")
Dim frm: Set frm = obj.CreateForm()
frm.FormTitle = "ユーザー情報の入力"

frm.DefineLabel "姓を入れてください"
Dim nEdit1: nEdit1 = frm.DefineEdit()
frm.DefineLabel "名前を入れてください"
Dim nEdit2: nEdit2 = frm.DefineEdit()

Dim btn1: btn1 = frm.DefineButton("了解;ｷｬﾝｾﾙ")

Dim lbl1: lbl1 = frm.DefineLabel("")
frm.Enable(lbl1) = False

dim cnt
frm.ComposeForm()
Do
    cnt = cnt + 1
    frm.Value(lbl1) = FormatDateTime(Now, vbLongTime) & ":cnt=" & cnt

    Dim ret: ret = frm.WaitEvent(100)
    If Not IsNull(ret) Then
        ' コマンド番号あり
        If ret = btn1 Then
            ' 了解ボタン押下か？
            Dim name
            name = frm.Value(nEdit1) & frm.Value(nEdit2)
            If Len(name) > 0 Then
                ' 空でなければメッセージボックスに表示
                obj.MessageBox name, "ユーザ名", 0
                Exit Do
            Else
                obj.MessageBox "ユーザ名を入れてください"
            End If
        Else
            ' ×ボタンで閉じたか、キャンセルボタンか？
            Exit Do
        End If
    End If
Loop
frm.DestroyForm()

実行結果

例: モードレスの例

解説

フォーム上にDefineButtonメソッドにより2個のボタンを定義しています。

明示的にcommandnumberを指定しない場合、最初のボタンのcommandnumberはコントロール番号と同じです。

そのため、「了解」ボタンが押された場合のみ、エディットボックス1,2の内容をメッセージボックスに表示しています。

ESCキー、あるいは×ボタンによりウィンドウを閉じるか、あるいはキャンセルボタンを押下した場合は無視しています。

モードレスではコマンドボタンが押下されなくてWaitEventメソッドの制御が返るため、ウィンドウを閉じるべきと判断できるまでループで繰り返し呼び出す必要があります。

ループしていることが視覚的にわかるようにフォームの下に現在時刻とループ回数を示すラベルを設置しています。

ボタンのイベントを判定する時点では、まだフォームは閉じられていないため、フォームを表示したまま、テキストボックスの中身を検証してエラーを表示する、などの動作ができます。

2つのモードレスの例

ソースコード

Option Explicit
Dim obj: Set obj = CreateObject("SeraphyScriptDialog")

Dim frm1: Set frm1 = obj.CreateForm()
frm1.FormTitle = "フォーム1"
Dim lbl1: lbl1 = frm1.DefineLabel("")
Dim btn1: btn1 = frm1.DefineButton("了解1;終了")
frm1.FormPos = "200,200"

Dim frm2: Set frm2 = obj.CreateForm()
frm2.FormTitle = "フォーム2"
Dim lbl2: lbl2 = frm2.DefineLabel("")
Dim btn2: btn2 = frm2.DefineButton("了解2")
frm2.FormPos = "200,300"

dim cnt

frm1.ComposeForm()
frm2.ComposeForm()

Do
    cnt = cnt + 1
    frm1.Value(lbl1) = "cnt=" & cnt
    frm2.Value(lbl2) = "cnt=" & cnt

    ' コマンドが発生していれば受け取る
    Dim ret1: ret1 = frm1.WaitEvent()
    If Not IsNull(ret1) Then
        If ret1 = btn1 + 1 Or ret1 = -1 Then
            ' 終了ボタンもしくは×ボタンの場合
            Exit Do
        Else
            MsgBox "frm1=" & ret1
        End If
    End If

    ' コマンドが発生していれば受け取る
    Dim ret2: ret2 = frm2.WaitEvent()
    If Not IsNull(ret2) Then
        MsgBox "frm2=" & ret2
    End If

    ' 二つのフォームのメッセージを一括処理する
    obj.DoEvents 100
Loop

frm1.DestroyForm()
frm2.DestroyForm()

実行結果

例: 2つのモードレスの例

解説

同時に2つ以上のモードレスを操作する場合、それぞれのイベントはフォームに対するWaitEventメソッドで取得できます。

ただし待ち時間を指定するとレスポンスが悪くなるため、WaitEventの待機時間はゼロにします。

かわりに、DoEventsメソッドを使いメッセージ処理を一括で行わせます。

ウィンドウが表示されているかぎりメッセージ処理は随時必要とされるため、通常、 DoEventに指定した待機時間よりも早く待機解除されますが、待機を指定しないよりは無駄な処理は少なくなります。


OutputWindowオブジェクト 概要

OutputWindowオブジェクトは、サイズ変更可能なテキスト表示用のウィンドウです。

SeraphyScriptDialogオブジェクトのCreateOutputWindowメソッドによって生成されます。

スクリプトの進行状態などを逐次表示するなどの用途を想定しています。

    Dim obj, wnd, cnt
    Set obj = CreateObject("SeraphyScriptDialog")
    Set wnd = obj.CreateOutputWindow()
    wnd.Visible = true
    cnt = 0
    Do While(cnt < 100)
        cnt = cnt + 1
        wnd.Text = "処理工程数 " & cnt & "/100"
        obj.DoEvents
        obj.Sleep(100)
    Loop
    MsgBox "ok"

例: アウトプットウィンドウの表示

アウトプットウィンドウはモードレスダイアログと似ていて、ウィンドウを表示したあとスクリプトに制御を返すため、 ウィンドウのさまざまなメッセージを処理するために、スクリプトが定期的にDoEvents、もしくWaitEventはメソッドを呼び出さなければなりません。

モードレスダイアログと併用する場合は、WaitEventを使用することで、アウトプットウィンドウのメッセージ処理も同時に行われます。

モードレスウィンドウがない場合は、DoEventsを用いてください。

注意点

テキストはユーザーによって書き換え可能です。

Textプロパティを読み取ると、その時点のウィンドウの内容が返されます。

ウィンドウを破棄するためのメソッドはありません。スコープを抜けると自動的に破棄されます。

※ 将来のバージョンにおいては本ウィンドウは別スレッドで動作する可能性もあります。

プロパティ

プロパティ | データ型 | 説明
表示制御
Visible | Boolean | ウィンドウの表示・非表示
Enable | Boolean | ウィンドウの有効・無効
位置・サイズ
PosX | 数値 | ウィンドウの左上のＸ座標
PosY | 数値 | ウィンドウの左上のＹ座標
Width | 数値 | ウィンドウの幅
Height | 数値 | ウィンドウの高さ
内容
Text | 文字列 | ウィンドウに表示するテキスト
Title | 文字列 | ウィンドウのキャプション


Listオブジェクト 概要

Listオブジェクトは、サイズ可変な文字列リストを作成し、且つ、擬似的な二次元配列としてアクセスできるオブジェクトです。

SeraphyScriptDialogオブジェクトからCreateListメソッドによって生成します。

文字列データを一時的に蓄積するような用途に特化しています。

データは文字列に限り、特定の区切り文字によって文字列を区切り、行番号と列番号によるアクセスが可能となっています。

※ 通常の可変長配列であれば、現在ではシステム標準の"Scripting.Dictionary"オブジェクトや、 DotNETのコンポーネントをCOM経由で利用する"System.Collections.ArrayList"オブジェクトのような方法など、 さまざまな汎用的な手段が用意されており、そちらを使うほうが良いでしょう。

プロパティ

プロパティ | データ型 | 説明
設定
ColSeparateChar | 数値 | サブ項目の区切り文字を設定する。(デフォルトはタブもしくは空白を区切りとみなす.)
ColSparateShortSpaceture | Boolean | 連続する空白を1つの区切りとみなすか？(デフォルトはTrue)
データ
Count | Long | リストの要素数を返す
Value(idx) | 文字列 | リストの指定位置のデータを設定・取得
LastValue | 文字列 | 末尾のデータを設定・取得
ColValue(idx,colidx) | 文字列 | リストの指定位置の指定サブ項目を設定・取得
ColCount(idx) | Short | リストの指定位置にあるサブ項目数を返す

メソッド

メソッド | 説明
リスト操作
AddHead(BSTR mes) | リストの先頭に追加します。
AddTail(BSTR mes) | リストの末尾に追加します。
Insert(Long idx, BSTR mes) | 指定位置の追加に追加します。
RemoveHead | リストの先頭を削除します。
RemoveTail | リストの末尾を削除します。
Remove(Long idx) | 指定位置を削除します。
RemoveAll | すべて削除します。
検索
long Find(Long start, Long end, BSTR strMatch, VARIANT type) | 文字列を検索します。 Startは-1を指定すると最初から。Endは-1を指定すると最後となります。 Start～End間で検索を行います。 Typeは省略時0となり、0の場合は一致する文字が含まれていれば成立、1ならば先頭が一致すれば成立、2は全て一致しなければ成立しない。 Colidxはサブ項目を指定して検索します。
long FindCol(Long start, Long end, Short colidx, BSTR strMatch, VARIANT type)
特殊
ChangeTerminateChar(Long start, Long end, BSTR strNewSeparateChar, VARIANT md) | 区切り文字を変換します。 現在有効な区切り文字で識別されるサブ項目を、新しい区切り文字で区切りなおします。 Startは-1で最初から。Endも-1で末尾までの範囲を指定します。 Mdは変換後に、strNewSeparateCharを新しい区切り文字として認識するか指定する。ディフォルトは区切り文字として識別しません。


技術的な注意事項

スレッドの制約について

  • SeraphyScriptDialogはUI用コンポーネントでの標準であるSTA(シングルスレッドアパートメント)で動作するCOMオブジェクトとして作成されています。
  • マルチスレッドからの呼び出しには使用できません。
  • また、WindowsのWin32の原則として、ウィンドウを作成したスレッドがメッセージポンプでメッセージを処理する必要があるため、 スクリプト上でウィンドウを作成した場合、そのウィンドウは、スクリプト内(もしくは、スクリプトと同じスレッド内)で処理しなければならないことに注意してください。

モードレス表示、メッセージループについて

  • SeraphyScriptDialogのDoEventsメソッド、およびWaitEventメソッドはそのスレッドのメッセージキューをWindowsの標準的な方法で処理します。
  • このときアプリケーションの同一スレッド上に他のUI要素がある場合には、そのUIのメッセージもWindowsの標準的な方法でまとめて処理されます。
  • このとき、もしアプリケーションがメッセージ処理に独自処理を行っていた場合には、それらの処理が行われず、予期せぬ結果になる可能性があります。
  • また、このような場合には、スクリプトを動作させながら、ほかのUI要素も反応できるため、擬似的にマルチスレッド的に見えるかもしれませんが、おそらく、アプリケーションに再入可能になっていない部分がある場合には、アプリケーションが想定していない動作となる可能性があります。
  • これはアプリケーションの問題ではなく(また、SeraphyScriptDialogの問題でもなく)メカニズム的に、そのようなものだとご理解ください。
  • なお、DoEvents, WaitEventを使わない、モードレスダイアログの場合、親ウィンドウはディセーブル状態となり操作不可能となるため、問題となる可能性は低いと考えられます。
  • WSHから使う場合には、WSHはシングルスレッドで動作しており、かつ、他のウィンドウはありませんので、この問題は生じません。

モーダル表示について

  • 旧バージョンVersion1.0のモーダル表示は、MFCのCDialog::DoModalメソッドを単純に呼び出していました。
  • Version2.0では、実質的にモーダルもモードレスと同じようにメッセージを処理しています。
  • モーダルがモードレスと違なる点は、
    • イベントが発生するまでスクリプト側に制御を戻さない
    • 現在アクティブなウィンドウをディセーブルにしてからフォームを構築する
    となります。


技術的な注意事項

wsfファイルによる定数の参照

定数の参照

SeraphyScriptDialogはVersion2以降、タイプライブラリ内に定数を定義しており、 タイプライブラリをスクリプトから参照できる場合、その定数に定数名でアクセスすることができます。

WSHでは、wsfファイルのreferenceタグを使用することで、タイプライブラリを参照できます。

サンプルコード

以下は、「デスクトップ」の特殊フォルダ位置を取得するためのサンプルコードです。

デスクトップを表す定数「FOLDERID_DESKTOPDIRECTORY」をタイプライブラリより参照しています。

    <?xml version="1.0" encoding="UTF-8" ?>
    <job>
       <object id="scrdlg" progid="SeraphyScriptDialog" />
       <reference object="SeraphyScriptDialog"/>
       <script language="VBScript">
       <![CDATA[
          Option Explicit
          Dim desktopdir
          desktopdir = scrdlg.GetSpecialFolderPath(FOLDERID_DESKTOPDIRECTORY)
          WScript.Echo "desktop dir=" & desktopdir
       ]]>
       </script>
    </job>


既知のバグ

GetOpenFileName, GetSaveFileName

引数のInitdirが無視される。

Version2.0の不具合。

WaitEvent

チェックボックス、ラジオボタン、リストボックスなどの変更イベントが通知されない。

Version2.0の不具合。