OverlappedWindow


 このオブジエクトはウィンドウ自身であり、ウィンドウの表示と制御を行います。

 Instanceオブジェクトには自動的に作成されたOverlappedWindowオブジェクトが、「MainFrame」というプロパティで存在します。

@ 直接生成する方法

Dim Obj
Set Obj = WScript.CreateObject("SeraphyScriptTools.OverlappedWindow")

"SeraphyScriptTools.OverlappedWindow"がProgIDとなります。
複数個作成した場合には、それぞれは、タスクバーに別々のウィンドウとして表示されます。

A InstanceオブジェクトのMainFeameオブジェクトプロパティを使う方法

Instanceオブジェクトは初期設定済みのOverlappedWindowオブジェクトをMainFrameというプロパティ名で所有しています。
通常、メインウィンドウは、こちらを使うと便利です。

B InstanceオブジェクトのCreateFrameメソッドを使う方法

タスクバーに表示される別ウィンドウをInstanceオブジェクトから作成できます。
それぞれのウィンドウがタスクバーに表示されます。

C OverlappendWindowオブジェクトのCreateChildオブジェクトを使う方法

作成されるオブジェクトはOverlappedWindowオブジェクトですが、親子関係があり、タスクバーには表示されません。作成もとになったオブジェクトと一緒に切り替わります。

子ダイアログを作成する場合などで利用します。


ref Open [caption]

 まだウィンドウが作成されていないのなら作成し、ウィンドウを表示します。
 captionはウィンドウのタイトルを指定することができます。

  Openメソッドの呼び出しの如何にかかわらず、ウィンドウを必要とするメソッド、プロパティを呼び出した場合には自動的にウィンドウは作成されます。(ただし、非表示のままです。)
 しかし、このメソッドを呼び出してウィンドウを明示的に作成することをオススメします。

 戻り値は自分自身を返します。
 したがって、このOpenメソッドの戻り値をつかって連続的にメソッドの呼び出しが可能です。

 

Close

 ウィンドウを閉じます。
 一度作成されたウィンドウはオブジェクトが破棄されるまで破棄されることはありません。
 Closeは非表示になり、QuitプロパティがTrue(真) になります。

 

ref SetWindowStyle frame , [captionbar] , [max_min]

 ウィンドウのスタイルを設定します。
 ウィンドウが生成済みであれば直ちに反映します。そうでなければ作成時に使用されます。

 frame はフレーム(ウィンドウ枠)のスタイルを指定します。
 True(真) でサイズ変更枠、False(偽)で固定枠になります。

 captionbarは、ウィンドウキャプション、システムメニューの有り無しを指定します。
 システムメニューを持つと自動的にサイズ可変ウィンドウにかわります。
 0 = キャプションバーがありません。
 1 = キャプションあり
 2 = システムメニューあり

 max_minは最大化・最小化ボタンの指定を行います。
 最大化・最小化ボタンをもつと自動的にシステムメニューを持ちます。
 0 = なし
 1 = 最小化
 2 = 最大化
 3 = 最小化・最大化

 メソッドの戻り値は自分自身を返します。
 つづけてメソッドを呼び出すことができます。

 

ref SetPlacement [x] , [y] , [width] , [height]

 ウィンドウの配置を指定します。
 ウィンドウが生成済みであれば直ちに反映します。そうでなければ作成時に使用されます。

 xとyはウィンドウの表示位置を指定します。
 width、heightは幅と高さを指定します。

 メソッドの戻り値は自分自身を返します。

 

obj CreateChild

 現在のウィンドウに所有される子フレーム・オブジェクトを生成します。
 生成されたOverlappedWindowオブジェクトを返します。
 子フレームは、タスクバーにキャプションをもちません。
 また親がCloseされると、子もCloseされます。

SetFocus

 ウィンドウにフォーカスを与えます。

SetForgroundWindow

 ウィンドウにキーボード入力権を与えられるように試みます。

SetMenu format

 ウィンドウにメニューを作成します。
 formatに指定された文字列を解釈し、メニューを作成します。
 書式はつぎのとおり。

 /グループ名1,メニュー項目1,2,3/グループ名2,メニュー項目1

 最初に「/」から始まるグループ名を定義します。
 つぎにメニュー項目を定義します。メニュー定義は「,(カンマ)」によって区切られます。
 カンマのかわりに「;(コロン )」で区切るとメニュー区切りになります。
 最初のグループが100番、次のグループが200番というようにID番号が連番づけられます。

 例)
 SetMenu "/FILE,NEW,OPEN,SAVE,SAVE AS;EXIT/EDIT,COPY,CUT,PASTE/HELP,HELP"

 この場合、NEWコマンドを選ぶと100番、PASTEを選ぶと202番のコマンド番号でイベントが発生します。

 formatを空にして渡すと、メニューが削除されます。

CheckMenu cmdno , mode

 メニューにレ点マークをつけたり、消したりします。
 cmdnoがコマンド番号を指定します。
 modeがFalseで解除、Trueでレ点をつけます。

EnableMenu cmdno , mode

 メニューを有効・無効化します。
 cmdnoがコマンド番号、modeがTrueで有効、Falseで無効化となります。
 CheckMenuと併用することはできません。(解除されます。)

returnvalue TrackPopupMenu format , offset

 最後にイベントを発生させたマウス位置で任意のポップアップメニューを表示します。
 formatは、項目名をカンマで区切ります。
 offsetはコマンドイベントを発生させたときのコマンド番号のスタート値を指定します。
 returnvalueはポップアップメニューからコマンドを選択した場合は0以外の値が入ります。

 ただし、offsetに0を指定するか、省略した場合はコマンドイベントは発生しません。
 かわりに、ポップアップメニューの項目順に1から始まる番号から返されます。
 メニューが選択されなかった場合は0が返ります。

 例)
 TrackPopupMenu "A,B,C"
 この場合、Bを選ぶと2が返ります。

 

SetTimer tim

 タイマーイベントを起動します。
 timはミリ秒単位で指定します。
 0を指定するとタイマーを停止させます。
 タイマーは繰り返し イベントを発生させます。
 他のイベントと異なりユーザーの操作とは関係なく割り込んでイベントが発生します。
 タイマーイベントにかぎり、Eventプロパティーは設定されません。(以前のイベントのままです。)
 タイマーの精度は低いうえにスクリプトのレスポンスに大きく依存するので注意してください。

long GetSysColor typ

 システムカラーを取得します。typはシステムカラー定義値です。
 Win32APIのGetSysColorそのものです。

Refresh

 ウィンドウをリフレッシュし描画しなおします。
 通常は、ほとんど使う必要はありません。

Draw

 Canvasオブジェクト を直ちに画面に反映させるときに使います。
 このメソッドを呼び出さない限り、自動的には描画されません。

BOOL WaitEvent tim

 メッセージループを実行し、イベントが発生するまでtim時間まで待機します。
 イベントが発生した場合、Trueが返ります。
 timはミリ秒単位で指定します。
 もし、Instanceオブジェクトを使っている場合は、InstaceオブジェクトのWaitEventを使うと、すべてのウィンドウに対してメッセージループを正しく使うことができます。

short DoModal

 メッセージループの定型的なルーチンを簡便にするためのユーテリティー関数です。
 Openメソッドを呼び出しウィンドウを表示させ、QuitプロパティーがtrueになるまでWaitEventをループしつづけます。
 ループから抜けたらCloseメソッドを呼び出します。
 戻り値は、エンターキーで1、ESCキーで2、×ボタンで3が返ります。
 単純なダイアログボックスの利用に使います。

LoadIcon path

pathで指定されたアイコンファイルを読み込んでウィンドウにアイコンを登録します。

 

ver DoEvent

イベントがある場合は、イベントコードが返ります。
AutoMessageLoopがTrueである場合は、WaitEventを呼び出すと自動的に呼ばれるため通常は使いません。
しかし、イベントを処理できないスクリプト環境では自分でイベントを処理するために呼び出すことができます。

 

 

ウィンドウ関連プロパティ

BOOL CreateNoCloseWindow

 閉じるボタン(Xボタン)のないウィンドウを指示します。
 ウィンドウが作成してから指定することはできません。
 True(真) で閉じるボタンがなくなります。
 標準はFalseです。

BOOL AutoClose

 閉じるボタン(Xボタン)を押すと、ただちにウィンドウをCloseメソッドを呼び出した状態にするか指定します。
 標準はTrue(真)です。

BOOL AcceptFiles

 ウィンドウにファイルのドロップを許可するか指定します。
 ドロップされると、OnDropFilesイベントが発生します。
 標準はFalse(偽) です。

long Style
long Exstyle

 ウィンドウスタイル、ウィンドウの拡張スタイルを直接指示できます。
 ウィンドウが作成済みならば、ただちに反映されます。

BSTR ClassName

 ウィンドウのクラス名を返します。
 通常使うことはないでしょう。

BOOL DoubleBuffer

 ダブルバッファで画面を描画します。
 チラツキを防ぐためにスクリーン用デバイスコンテキストを2つ使い、描画が完了してからフリップします。
 標準はTrue(真)です。
 ピクチャーを使う場合は非常にチラツキが大きくなるので、常にTrueにすべきです。

BOOL Visible

 ウィンドウを表示・非表示させます。
 True(真)にするときウィンドウが作成されていない場合は作成します。
 False (偽)にするときにウィンドウが作成されていなければ何もしません。

BOOL Enable

 ウィンドウの無効・有効を切り替えます。
 ウィンドウが作成されていない場合はただちに作成されます。

short WaitCursor

 ウェイトカーソルを指定します。0の場合は通常カーソル。
 1以上であればウェイトカーソルを表示します。
 InstanceオブジェクトのWaitCursorを使うと、全ウィンドウに適用できます。

BOOL Iconic
BOOL Zoomed

 ウィンドウの最小化・最大化を設定・取得します。
 False (偽)にすると通常表示になります。
 ウィンドウが作成されていない場合は、ただちに作成されます。

BOOL TopMose

 ウィンドウを最前面にしたり、解除したりします。
 ウィンドウが作成されていない場合は、ただちに作成されます。

short PosX
short PosY
short Width
short Height

 ウィンドウの位置、サイズの設定・取得ができます。
 まとめて設定する場合は、SetPlacementメソッドを使います。

long ClientWidth
long ClientHeight

 ウィンドウの描画可能領域のサイズをピクセル単位で取得します。
 取得のみ可能です。

double innerWidth
double innerHeight

 ウィンドウの描画可能領域のサイズをミリ単位で返します。
 取得のみ可能です。

long backColor

 背景色の設定・取得ができます。
 "&H FFFFFF"がホワイトとなります。

BOOL Quit

 ウィンドウが、はじめて作成された場合、Openメソッドをつかった場合にFalse (偽)に設定されます。
 Closeメソッドまたは×ボタンがおされた場合にTrue(真) になります。
 内部的にはイベント判定などのウィンドウの有効チェックに使われています。
 スクリプトから変更することも可能です。
 メッセージループから抜ける判定などに使います。

BOOL AutoMessageLoop

 メッセージループのあとでイベント処理を自動的に行います。
 WSHやHTML以外でイベントを処理できないスクリプト環境上では、自分でメッセージを処理する必要があり、そのようなときにFALSEにします。

long HWND

 ウィンドウハンドル。読み取り専用です。通常は使わないでください。

safearray DropFiles

 ドロップされたファイルのパスをバリアント配列で返します。
 読み取り専用です。

BOOL EmptyEvent

 イベントが発生していないことを示します。
 読み取り専用です。
 通常は使いません。

short ExitCode

 OK、CANCEL、EXITの終了コードを1、2、3の数値で示します。


オブジェクト関連プロパティ

obj Canvas

 このウィンドウが内部的にもつCanvasオブジェクトを返します。
 ベクターグラフィクスの描画は、このCanvasオブジェクトに対して操作します。

obj Event

 イベントの詳細な情報をもつEventオブジェクトを返します。
 どのボタンが押されたのか?イベント発生時のマウス位置などを知る場合に使います。

obj Form

 コントロールを管理するフォームオブジェクトを返します。
 コントロールの生成や制御を、このオブジェクトから行います。

obj Object ( X )

 OverlappedWindowオブジェクトに格納される、ユーザーが自由に使えるリ連想配列。
 OverlappedWindowとともに保持されたほうが都合の良いデーターを格納しておくことができます。

obj ClassObject

 VBScriptのClassオブジェクトを指定します。
 ここで指定されたIDispatchインターフェイスに対して、イベントに対応したメソッドの呼び出しを行います。
 NULLを渡すことで、クラスへの接続を解除します。
 クラスが接続されている間は、クラスの実体がなくならないことに注意してください。

BOOL AutoReleaseClassObject

 ウィンドウの×ボタンを押したとき、Closeメソッドを呼び出したとき、などウィンドウが閉じられたときにVBScriptのクラスオブジェクトがあれば、これをリリースします。
 ディフォルトはTRUEです。
 これによってVBScriptでは、ウィンドウが閉じられたときクラスへの参照がなくなることにより、自動的にClass_Terminateイベントが発生し、ウィンドウを閉じた場合の処理できるようになります。
 このメカニズムを利用せず、一度閉じたウィンドウを再利用する場合などは、FALSEに指定しておきます。
 クラスが接続されている間は、クラスの実体がなくならないことに注意してください。



《 WScriptオブジェクト接続の場合 》

 WScript.ConnectObjectメソッドで、OverlappedWindowのイベントをスクリプトに接続します。

 イベントが発生すると、????OnClickというサブルーチンが自動的に呼び出されます。
 ????は、ConectObjectメソッドで任意の名前を指定することができます。

 WScriptはイベント・ハンドラに引数をもてるので、末尾にExがつくイベントをハンドルすると便利です。
 これらのハンドラは引数に、イベントを発生させたOverlappedWindowオブジェクトが渡されます。
 サブルーチンでは、イベント発生源であるOverlappedWindowにアクセスしやすくなります。

例)
 WScript.ConnectObject Obj , "EVENT_"

 たとえば、OnCommandExイベントを受け取るには

 sub EVENT_OnCommandEx ( wnd )
   if (wnd.Event.Parameter = ・・・
   ・・・
 end sub

 のようなサブルーチンを書きます。

《 VBScriptのClassオブジェクトを利用する場合 》

 VBScriptのClassオブジェクトを利用する場合は、OverlappedWindowオブジェクトのClassObjectプロパティに、Classオブジェクトを指定します。
 ClassObjectプロパティはオブジェクトの代入を前提していますが、VBScriptの変数への代入ではないので、SETステートメントは不要です。(Nothingの代入もできません。)
 イベントが発生すると、自動的に「OnClick」などの名前で定義されているサブルーチン(メソッド)が呼び出されます。
 Ex版のメソッドはありません。また、InitWindow、ExitWindowもありません。
 これらはクラス自身の機能によって実現可能です。
 クラスのメンバー変数に、OverlappedWindow自身を入れておくとアクセスしやすくなるため便利です。
 開始前・終了後処理はクラスのclass_initialize,class_terminateなどのイベントを利用します。

例)

 class OverlappedWindow
  private wnd
  public sub class_initialize
    set wnd = CreateObject("SeraphyScriptTools.OverlappedWindow")
    wnd.ClassObject = me
    wnd.DoModal
  end sub
  public sub OnClick
    ・・・
  end sub
 end class

 dim obj
 set obj = new OverlappedWindow

この例では OverlappedWindowクラスのオブジェクトを生成します。
クラスが生成されると、Initializeが自動的に実行され、OverlappedWindowオブジェクトが生成されます。
このオブジェクトにクラス自身を意味する「me」が渡されます。
そして、メッセージループを開始します。
イベントが発生すると、OnClickなどのメソッドが呼び出されます。

 

[イベントの種類]

OnClick
OnClickEx window

 ウィンドウの中でクリックされたことを通知します。

 

OnRClick
OnRClickEx window

 ウィンドウの中で右クリックされたことを通知します

 

OnDblClick
OnDblClickEx window

 ダブルクリックされたことを通知します

 

OnRDblClick
OnRDblClickEx window

 右ダブルクリックを通知します

 

OnSize
OnSizeEx window

 ウィンドウのサイズが変更されたことを通知します

 

OnCommand
OnCommandEx window

 メニュー、コントロールやボタンが押されたことを通知します
 EventオブジェクトのParameterにはコントロールのIDまたはメニューIDが入ります。
 

OnDropFiles
OnDropFilesEx window

 ファイルがドロップされたことを通知します

 

OnMouseMove
OnMouseMoveEx window

 マウスが動くと通知します

 

OnClickOut
OnClickOutEx window

 マウスボタンを離されたときに通知されます

 

OnRClickOut
OnRClickOutEx window

 右マウスボタンが離されたときに通知されます

 

OnRClickCancel
OnRClickCancelEx window

 右マウスボタンが離される前にキャンセル操作が行われたことを通知します

 

OnClickCancel
OnClickCancelEx window

 マウスボタンが離される前にキャンセル操作が行われたことを通知します

 

OnTimer

 タイマーを通知します。
 ただし、タイマーイベントはイベントプロパティを更新しません。
 また、Ex版イベントはありません。

 

OnOK
OnOKEx window

 エンターキーが押されたか、ID=1のボタンが押されたことを通知します

 

OnCancel
OnCancelEx window

 エスケープキーが押されたか、ID=2のボタンが押されたことを通知します

 

OnExit
OnExitEx window

 「ウィンドウを閉じるボタン」か、ID=3のボタンが押されたときに通知します。
 Closeメソッド等を実行しても呼び出されません。

OnKeydown
OnKeydownEx window

 ウィンドウ上にフォーカスがあり、キーボードが押された場合にイベントが発せられます。
 Parameterはキーの仮想コード、ExtParameterにはシフトキー、コントロールキーの状態が入ります。

OnContextMenu
OnContextMenuEx window

 ツリービュー、リストビュー上で右クリックされたことを通知します。
 EventのParameterにはコントロールのIDが入ります。

OnContextDelete
OnContextDeleteEx window

 ツリービュー、リストビュー上でDELETEキーが押されたことを通知します。
 EventのParameterにはコントロールのIDが入ります。

InitWindow

 ウィンドウの実体が生成されたときに発生するイベントです。
 Classオブジェクトの場合は呼び出されません。

ExitWindow

 ウィンドウの実体が破棄されたときに発生するイベントです。
 ウィンドウの破棄はオブジェクトの破棄と同時です。
 Classオブジェクトの場合は呼び出されません。