このオブジエクトはウィンドウ自身であり、ウィンドウの表示と制御を行います。
Instanceオブジェクトには自動的に作成されたOverlappedWindowオブジェクトが、「MainFrame」というプロパティで存在します。
Dim Obj
Set Obj = WScript.CreateObject("SeraphyScriptTools.OverlappedWindow")
"SeraphyScriptTools.OverlappedWindow"がProgIDとなります。
複数個作成した場合には、それぞれは、タスクバーに別々のウィンドウとして表示されます。
Instanceオブジェクトは初期設定済みのOverlappedWindowオブジェクトをMainFrameというプロパティ名で所有しています。
通常、メインウィンドウは、こちらを使うと便利です。
タスクバーに表示される別ウィンドウをInstanceオブジェクトから作成できます。
それぞれのウィンドウがタスクバーに表示されます。
作成されるオブジェクトはOverlappedWindowオブジェクトですが、親子関係があり、タスクバーには表示されません。作成もとになったオブジェクトと一緒に切り替わります。
子ダイアログを作成する場合などで利用します。
まだウィンドウが作成されていないのなら作成し、ウィンドウを表示します。
captionはウィンドウのタイトルを指定することができます。
Openメソッドの呼び出しの如何にかかわらず、ウィンドウを必要とするメソッド、プロパティを呼び出した場合には自動的にウィンドウは作成されます。(ただし、非表示のままです。)
しかし、このメソッドを呼び出してウィンドウを明示的に作成することをオススメします。
戻り値は自分自身を返します。
したがって、このOpenメソッドの戻り値をつかって連続的にメソッドの呼び出しが可能です。
ウィンドウを閉じます。
一度作成されたウィンドウはオブジェクトが破棄されるまで破棄されることはありません。
Closeは非表示になり、QuitプロパティがTrue(真)
になります。
ウィンドウのスタイルを設定します。
ウィンドウが生成済みであれば直ちに反映します。そうでなければ作成時に使用されます。
frame
はフレーム(ウィンドウ枠)のスタイルを指定します。
True(真) でサイズ変更枠、False(偽)で固定枠になります。
captionbarは、ウィンドウキャプション、システムメニューの有り無しを指定します。
システムメニューを持つと自動的にサイズ可変ウィンドウにかわります。
0 = キャプションバーがありません。
1 = キャプションあり
2 = システムメニューあり
max_minは最大化・最小化ボタンの指定を行います。
最大化・最小化ボタンをもつと自動的にシステムメニューを持ちます。
0 = なし
1 = 最小化
2 = 最大化
3 = 最小化・最大化
メソッドの戻り値は自分自身を返します。
つづけてメソッドを呼び出すことができます。
ウィンドウの配置を指定します。
ウィンドウが生成済みであれば直ちに反映します。そうでなければ作成時に使用されます。
xとyはウィンドウの表示位置を指定します。
width、heightは幅と高さを指定します。
メソッドの戻り値は自分自身を返します。
現在のウィンドウに所有される子フレーム・オブジェクトを生成します。
生成されたOverlappedWindowオブジェクトを返します。
子フレームは、タスクバーにキャプションをもちません。
また親がCloseされると、子もCloseされます。
ウィンドウにフォーカスを与えます。
ウィンドウにキーボード入力権を与えられるように試みます。
ウィンドウにメニューを作成します。
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を空にして渡すと、メニューが削除されます。
メニューにレ点マークをつけたり、消したりします。
cmdnoがコマンド番号を指定します。
modeがFalseで解除、Trueでレ点をつけます。
メニューを有効・無効化します。
cmdnoがコマンド番号、modeがTrueで有効、Falseで無効化となります。
CheckMenuと併用することはできません。(解除されます。)
最後にイベントを発生させたマウス位置で任意のポップアップメニューを表示します。
formatは、項目名をカンマで区切ります。
offsetはコマンドイベントを発生させたときのコマンド番号のスタート値を指定します。
returnvalueはポップアップメニューからコマンドを選択した場合は0以外の値が入ります。
ただし、offsetに0を指定するか、省略した場合はコマンドイベントは発生しません。
かわりに、ポップアップメニューの項目順に1から始まる番号から返されます。
メニューが選択されなかった場合は0が返ります。
例)
TrackPopupMenu "A,B,C"
この場合、Bを選ぶと2が返ります。
タイマーイベントを起動します。
timはミリ秒単位で指定します。
0を指定するとタイマーを停止させます。
タイマーは繰り返し イベントを発生させます。
他のイベントと異なりユーザーの操作とは関係なく割り込んでイベントが発生します。
タイマーイベントにかぎり、Eventプロパティーは設定されません。(以前のイベントのままです。)
タイマーの精度は低いうえにスクリプトのレスポンスに大きく依存するので注意してください。
システムカラーを取得します。typはシステムカラー定義値です。
Win32APIのGetSysColorそのものです。
ウィンドウをリフレッシュし描画しなおします。
通常は、ほとんど使う必要はありません。
Canvasオブジェクト
を直ちに画面に反映させるときに使います。
このメソッドを呼び出さない限り、自動的には描画されません。
メッセージループを実行し、イベントが発生するまでtim時間まで待機します。
イベントが発生した場合、Trueが返ります。
timはミリ秒単位で指定します。
もし、Instanceオブジェクトを使っている場合は、InstaceオブジェクトのWaitEventを使うと、すべてのウィンドウに対してメッセージループを正しく使うことができます。
メッセージループの定型的なルーチンを簡便にするためのユーテリティー関数です。
Openメソッドを呼び出しウィンドウを表示させ、QuitプロパティーがtrueになるまでWaitEventをループしつづけます。
ループから抜けたらCloseメソッドを呼び出します。
戻り値は、エンターキーで1、ESCキーで2、×ボタンで3が返ります。
単純なダイアログボックスの利用に使います。
pathで指定されたアイコンファイルを読み込んでウィンドウにアイコンを登録します。
イベントがある場合は、イベントコードが返ります。
AutoMessageLoopがTrueである場合は、WaitEventを呼び出すと自動的に呼ばれるため通常は使いません。
しかし、イベントを処理できないスクリプト環境では自分でイベントを処理するために呼び出すことができます。
閉じるボタン(Xボタン)のないウィンドウを指示します。
ウィンドウが作成してから指定することはできません。
True(真) で閉じるボタンがなくなります。
標準はFalseです。
閉じるボタン(Xボタン)を押すと、ただちにウィンドウをCloseメソッドを呼び出した状態にするか指定します。
標準はTrue(真)です。
ウィンドウにファイルのドロップを許可するか指定します。
ドロップされると、OnDropFilesイベントが発生します。
標準はFalse(偽) です。
ウィンドウスタイル、ウィンドウの拡張スタイルを直接指示できます。
ウィンドウが作成済みならば、ただちに反映されます。
ウィンドウのクラス名を返します。
通常使うことはないでしょう。
ダブルバッファで画面を描画します。
チラツキを防ぐためにスクリーン用デバイスコンテキストを2つ使い、描画が完了してからフリップします。
標準はTrue(真)です。
ピクチャーを使う場合は非常にチラツキが大きくなるので、常にTrueにすべきです。
ウィンドウを表示・非表示させます。
True(真)にするときウィンドウが作成されていない場合は作成します。
False
(偽)にするときにウィンドウが作成されていなければ何もしません。
ウィンドウの無効・有効を切り替えます。
ウィンドウが作成されていない場合はただちに作成されます。
ウェイトカーソルを指定します。0の場合は通常カーソル。
1以上であればウェイトカーソルを表示します。
InstanceオブジェクトのWaitCursorを使うと、全ウィンドウに適用できます。
ウィンドウの最小化・最大化を設定・取得します。
False (偽)にすると通常表示になります。
ウィンドウが作成されていない場合は、ただちに作成されます。
ウィンドウを最前面にしたり、解除したりします。
ウィンドウが作成されていない場合は、ただちに作成されます。
ウィンドウの位置、サイズの設定・取得ができます。
まとめて設定する場合は、SetPlacementメソッドを使います。
ウィンドウの描画可能領域のサイズをピクセル単位で取得します。
取得のみ可能です。
ウィンドウの描画可能領域のサイズをミリ単位で返します。
取得のみ可能です。
背景色の設定・取得ができます。
"&H FFFFFF"がホワイトとなります。
ウィンドウが、はじめて作成された場合、Openメソッドをつかった場合にFalse
(偽)に設定されます。
Closeメソッドまたは×ボタンがおされた場合にTrue(真)
になります。
内部的にはイベント判定などのウィンドウの有効チェックに使われています。
スクリプトから変更することも可能です。
メッセージループから抜ける判定などに使います。
メッセージループのあとでイベント処理を自動的に行います。
WSHやHTML以外でイベントを処理できないスクリプト環境上では、自分でメッセージを処理する必要があり、そのようなときにFALSEにします。
ウィンドウハンドル。読み取り専用です。通常は使わないでください。
ドロップされたファイルのパスをバリアント配列で返します。
読み取り専用です。
イベントが発生していないことを示します。
読み取り専用です。
通常は使いません。
OK、CANCEL、EXITの終了コードを1、2、3の数値で示します。
このウィンドウが内部的にもつCanvasオブジェクトを返します。
ベクターグラフィクスの描画は、このCanvasオブジェクトに対して操作します。
イベントの詳細な情報をもつEventオブジェクトを返します。
どのボタンが押されたのか?イベント発生時のマウス位置などを知る場合に使います。
コントロールを管理するフォームオブジェクトを返します。
コントロールの生成や制御を、このオブジェクトから行います。
OverlappedWindowオブジェクトに格納される、ユーザーが自由に使えるリ連想配列。
OverlappedWindowとともに保持されたほうが都合の良いデーターを格納しておくことができます。
VBScriptのClassオブジェクトを指定します。
ここで指定されたIDispatchインターフェイスに対して、イベントに対応したメソッドの呼び出しを行います。
NULLを渡すことで、クラスへの接続を解除します。
クラスが接続されている間は、クラスの実体がなくならないことに注意してください。
ウィンドウの×ボタンを押したとき、Closeメソッドを呼び出したとき、などウィンドウが閉じられたときにVBScriptのクラスオブジェクトがあれば、これをリリースします。
ディフォルトはTRUEです。
これによってVBScriptでは、ウィンドウが閉じられたときクラスへの参照がなくなることにより、自動的にClass_Terminateイベントが発生し、ウィンドウを閉じた場合の処理できるようになります。
このメカニズムを利用せず、一度閉じたウィンドウを再利用する場合などは、FALSEに指定しておきます。
クラスが接続されている間は、クラスの実体がなくならないことに注意してください。
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オブジェクトを利用する場合は、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などのメソッドが呼び出されます。
ウィンドウの中でクリックされたことを通知します。
ウィンドウの中で右クリックされたことを通知します
ダブルクリックされたことを通知します
右ダブルクリックを通知します
ウィンドウのサイズが変更されたことを通知します
メニュー、コントロールやボタンが押されたことを通知します
EventオブジェクトのParameterにはコントロールのIDまたはメニューIDが入ります。
ファイルがドロップされたことを通知します
マウスが動くと通知します
マウスボタンを離されたときに通知されます
右マウスボタンが離されたときに通知されます
右マウスボタンが離される前にキャンセル操作が行われたことを通知します
マウスボタンが離される前にキャンセル操作が行われたことを通知します
タイマーを通知します。
ただし、タイマーイベントはイベントプロパティを更新しません。
また、Ex版イベントはありません。
エンターキーが押されたか、ID=1のボタンが押されたことを通知します
エスケープキーが押されたか、ID=2のボタンが押されたことを通知します
「ウィンドウを閉じるボタン」か、ID=3のボタンが押されたときに通知します。
Closeメソッド等を実行しても呼び出されません。
ウィンドウ上にフォーカスがあり、キーボードが押された場合にイベントが発せられます。
Parameterはキーの仮想コード、ExtParameterにはシフトキー、コントロールキーの状態が入ります。
ツリービュー、リストビュー上で右クリックされたことを通知します。
EventのParameterにはコントロールのIDが入ります。
ツリービュー、リストビュー上でDELETEキーが押されたことを通知します。
EventのParameterにはコントロールのIDが入ります。
ウィンドウの実体が生成されたときに発生するイベントです。
Classオブジェクトの場合は呼び出されません。
ウィンドウの実体が破棄されたときに発生するイベントです。
ウィンドウの破棄はオブジェクトの破棄と同時です。
Classオブジェクトの場合は呼び出されません。