QX MACRO (NT&2000&95&98&ME 版 ver 6.5) マクロの概要 注意点(マクロを作成する前に必ず参照してください) マクロ作成手順(マクロの簡単な作り方および使い方) マクロ作成手順(自動実行マクロ) サンプルマクロについて マクロの自動インストール ステートメント / 関数(マクロの基本です) プロパティ / メソッド(QXを制御します) 変数 定数 演算子 演算子の優先順位 演算についての注意 命名規則(変数やプロシージャなどの名前の付け方) 自動実行マクロ マクロの中止 DLLの呼び出し ステートメント/関数 索引 用途別ステートメント/関数 プロパティ/メソッド 索引 QXでの基本機能 一覧 マクロを作ったら... マクロサンプルのヘルプ 変更履歴(以前のバージョンからの変更点) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロの概要  QXのマクロはBASICという言語と同様の文法です。  キー/メニュー/ツールバー/ステータスバーなどにマクロを割り当てられます。  既存のDLLを呼び出すことにより、マクロの言語仕様だけでは不可能なことも実現できます。  1つのファイルに複数のマクロを記述できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロ作成手順  > の後に書かれているのは操作例です。 一般マクロのとき ■ ファイル名を決める >QXW32.EXE のあるディレクトリで TEST.MAC を開く ■ プロシージャ名を考える >main にする ■ プロシージャの内容を記述する >'文書に MACRO TEST と入力するマクロ >proc main() > if @hwnd = 0 then exit proc > @Input "MACRO TEST" >end proc ■ 保存する >上書き保存を実行して、TEST.MAC を保存する ■ すぐに実行するには >マクロ一覧(MacroList)を実行して TEST を選べば、すぐに実行できます。 ■ キー/メニュー/ツールバーのどれにマクロを割り当てるか決める >・ キーに割り当てるとき(キー定義設定 @KeySet を実行してください) >・ ツールバーに割り当てるとき (ツールバー設定 @ToolBarSet を実行してください) >・ メニューに割り当てるとき >QXWKEY.INI ファイルを書き換えてください。 >[PopupMenu] または [MenuBar] 以後の好みの位置に > "マクロ TEST" $TEST.MAC,main >と記述し、保存する。 ■ QXWKEY.INI を書き換えたときは、QXを終了し再起動する。 ■ 動作を確認する。 >割り当てたキーを押すかツールバー/メニューを選んで動作を確認する。  注意:キー定義ファイルを書き換えた後は、QXを再起動する必要がありますが、マクロファイルだけを書き換えたときは再起動の必要はありません。  マクロ実行時にエラーが発生したときに、Shift を押しながらOKボタンを押すと、該当ファイルを開きます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロ作成手順(自動実行マクロ) その1 キー定義ファイルにマクロファイル名を記述する方式。  > の後に書かれているのは操作例です。  一般マクロのときと同様にマクロファイルを作成し、QXWKEY.INI を書き換えます。 >[Macro] >AutoMacro=QAUTOMAC.MAC >と記述し、保存する(ファイル名が QAUTOMAC.MAC のとき)。  自動実行マクロを書き換えたときは、必ずQXを再起動しなければなりません。 ------------------------------------------------------------------------------ その2 ファイル追加方式  以下の ファイル名,プロシージャ名 で、QXのあるディレクトリまたは共通設定で設定したディレクトリにマクロファイルを作成します。 QAOPEN??.MAC,AutoOpen QAOPND??.MAC,AutoOpened QACLS??.MAC,AutoClose QACLSD??.MAC,AutoClosed QACLICK.MAC,AutoClicked QACLICK.MAC,AutoDoubleClicked ?? は 01 〜 10 までの数字。  それぞれ、文書を開く直前、開いた直後、閉じた直後、クリック、ダブルクリックした直後に実行されるマクロです。  QXを再起動する必要はありません。マクロファイルを作成(または更新)すると、すぐに有効になります。 例 QAOPND01.MAC というファイルに以下の内容を記述します。 proc AutoOpened beep end proc ファイルを開くたびに、beep が実行されます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ サンプルマクロについて 拡張キットに添付されているサンプルマクロは自由に変更して使用してもかまいません。 自作のマクロを公開(アップロード)するときに、サンプルマクロの一部を流用してもかまいません。また、サンプルマクロを一部変更して、高機能にしたものを公開(アップロード)してもかまいません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロの自動インストールおよび、メニューの淡色表示、ステータスバーメッセージ  この説明は主にマクロ作者のための機能です。  以下の機能により、マクロファイルなどをマクロディレクトリにコピーし、QXを再起動するだけで、メニューにマクロを実行する項目をインストールできます。 ■ マクロファイルを自動的にメニューに組み込めます。 ■ ある条件下で実行できないマクロはメニューを淡色表示(使用不可)させたり、ツールバーを押せなくしたりできます。ただし、マクロ一覧(MacroList)からやキーボードからの実行は可能ですので、マクロ内でチェックが不要になるわけではありません。 ■ メニュー、ツールバーに割り当てたマクロに対して、ステータスバーに表示するメッセージを定義できます。  これらの機能により、マクロで実現している機能も、実行速度を除けば基本機能と変わらないように使用できます。 ------------------------------------------------------------------------------  QX起動時にマクロディレクトリから *.qma が読み込まれます。メニュー定義部分があれば、メニューに追加します。  メニューバー文字列の1文字目に # がついているメニューに追加します。 例  キー定義ファイル(qxwkey.ini)に menubar "#マクロ2(&Q)" のように記述します。 *.qma の書式1 ファイル名使用不可にする条件ステータスバーに表示するメッセージ *.qma の書式2 "メニュー文字列"実行するマクロ名または機能名  区切りは、タブまたはスペースにして下さい。  以上の2種類(使用不可にするための記述とメニューに追加するための記述)を必要な数だけ記述して下さい。どちらかだけでもかまいません。  *.qma のファイル名はなるべくマクロファイル名の拡張子を qma に変えるだけにして下さい。 ● メニュー文字列の補足 > が1文字目にあると階層化 < が1文字目にあると階層化終了 - だけの行はセパレータ [1] があるとそれ以降の定義をポップアップメニューに追加します。 [2] があるとそれ以降の定義をポップアップメニュー(選択時)に追加します。 [3] があるとそれ以降の定義をツールバー/ステータスバー上での右クリックメニューに追加します。 [4] があるとそれ以降の定義をステータスライン/ルーラ上での右クリックメニューに追加します。 [5] があるとそれ以降の定義を行番号/マーク上での右クリックメニューに追加します。 [11]があるとそれ以降の定義を常駐リスト-編集中の文書一覧に追加します。 [12]があるとそれ以降の定義を常駐リスト-最近編集した文書一覧に追加します。 [13]があるとそれ以降の定義を常駐リスト-ファイル一覧に追加します。 [11] [12] [13] は @@Command$(1) に 選択しているファイル名が格納される [14]があるとそれ以降の定義を常駐リスト-その他の一覧に追加します。 @@Command$(1) に 選択している項目が格納される [15]があるとそれ以降の定義を常駐リスト-バインダ一覧に追加します。 @@Command$(1) に ファイル名、@@Command$(2) にバインダの番号が格納される [16]があるとそれ以降の定義を常駐リスト-ユーザ定義一覧に追加します。 @@Command$(1) には リストボックス項目の文字列、@@Command$(2) にはインデックス(0〜 ) [英字1文字] があるとそれ以降の定義をプルダウンメニューに追加します。  注意:指定した英字をニーモニックとするメニューに追加する点に注意して下さい。  例 [F] があるとそれ以降の定義を「ファイル(F)」プルダウンメニューに追加します。  例 [E] があるとそれ以降の定義を「編集(E)」プルダウンメニューに追加します。 [メニューバー文字列] があるとメニューバーに追加し、以降の行をそれに追加します。注意;メニューバーの表示エリアは限られているため、なるべく使用しないで下さい。  例 [TEST] があるとメニューバーに「TEST」を作成します。そして、以降の行を「TEST」に追加します。 例 -- test.qma -- [15] "テスト" test.mac -- test.mac -- proc main print cformat$("ファイル名 %s バインダ番号 %s", @@Command$(1), @@Command$(2)) end proc ● 使用不可にする条件の補足 1 文書を1つも編集していない 2 文書を1つしか編集していない E これ以上文書を開けない 以下カレント文書に関するもの R 編集禁止 S 選択されている C 文字/行選択されている B 箱型選択されている s 選択されていない c 文字/行選択されていない b 箱型選択されていない N (無題)ファイルである M 編集されていない A 文書が途中までしか読み込まれていない F フリーカーソルモードである P プロポーショナルフォントを使用している 0 使用不可にしない(ステータスバーに表示するメッセージだけを記述したいときに使用します) 例 QFILEIN.MAC,filein 1SR ファイル埋め込み 文書を1つも編集していないか、編集していても選択されていたり、編集禁止のときはメニューを淡色表示にします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロを作ったら...  有用なマクロができたら、NIFTY-Serve FWINAL LIB 19 にアップロードしましょう。  HomePage 上で発表している場合は作者までお知らせ下さい。http://www2k.biglobe.ne.jp/~araken/ のQXのページからリンクします。  使い方を記述したドキュメントはマクロファイルの拡張子を TXT にしたものにしましょう。Windows 標準のヘルプファイルの場合は、拡張子を HLP にしたものにしましょう。 例  ABCD.MAC というマクロファイルを作成したときは、ABCD.TXT または ABCD.HLP というファイル名でドキュメントを作成します。  複数のマクロファイルがあり、そのドキュメントを1つにしたいときは、マクロファイルの2行目に '*ABCD.TXT のようにコメントを入れてください。( ' と * と ファイル名) 例  ABCD1.MAC ABCD2.MAC の2つのマクロファイルを作成し、ドキュメントを ABCDX.TXT にしたいときは、ABCD1.MAC ABCD2.MAC のそれぞれのファイルの2行目に '*ABCDX.TXT と記述します。 ------------------------------------------------------------------------------  マクロの自動インストールをできるように、*.QMA も作成しましょう。 ------------------------------------------------------------------------------  ファイル追加方式の自動実行マクロを配布するときは...  QAOPENXX.MAC のように数字の部分を適当な文字にしたファイル名にし、利用者自身に XX の部分を好きな数字(01-10)にリネームさせるようにして下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 注意点 ・ マクロファイルのファイル名は何でもかまいませんが、ファイル名の先頭の文字は Q 以外、また、拡張子を MAC にする事を推奨します。 ・ マクロファイルの1行目にはそのファイルに対するコメントを記述する事を推奨します。 ・ 1行の長さは約250バイトまでです。 ・ 予約語(ステートメントや関数)、プロパティ、メソッドなどは大文字小文字のどちらでもかまいませんが、変数名/プロシージャ名などは大文字小文字を区別します。 ・ 文書に対して何らかの操作を行うマクロは最初に if @hwnd = 0 then exit sub のように、ドキュメントウィンドウがあるか(つまり、文書を編集しているか)どうかを確認してください。 ・ マクロを実行しようとしてエラーが発生すると、エラー内容/ファイル名/行番号が表示されます。このときのタイトルバーに「解析エラー」と表示されているときは、マクロファイルを解析中にエラーが見つかったため、マクロはまだ1行も実行されていません。 ・ マクロのデバッグ時などに、マクロファイルをQXで開いたままで実行するときは 共通設定 ダイアログ(システム)- 排他制御 は「他のアプリからは読み書き禁止」以外にしてください。 ・ 1つのマクロファイルに、複数のマクロ(プロシージャ)を入れることができます。 ・ 複数のマクロファイルにまたがってプロシージャや関数をコールすることはできません。@@JumpMacro により、他のマクロファイルにジャンプすることは可能です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ マクロの中止  一般マクロの実行中に、アプリケーションウィンドウを右クリックするとマクロの実行を中止できます。中止してもよいか確認があるので中止したいときはYを入力してください。  この動作は、stopmacro ステートメントにより禁止できます。  Ctrl Break を入力すると、直ちにマクロを中止することができます。  また、自動実行マクロについては中止させることはできません。 参照 stopdispatchevent ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演算についての注意  数値に関する演算はすべて long で行われます。  integer型の変数を使用すると、long型に変換されてから演算が行われます。このときに、符号拡張されます。 例 dim x as integer dim y as long x = &H8000 '-32768 を代入したのと同じ y = x 'y には &HFFFF8000(= -32768) が代入される y = &H8000 'y には &H00008000(= 32768) が代入される  &H8000 は integer の範囲(-32768〜32767)では負の数になるため、long型に変換される際に符号拡張され、long型の-32768 つまり、&HFFFF8000 になります。  Win3.1 版 では HWND を使用する場合も、符号拡張に注意してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ プロシージャ  ユーザが独自に定義できるステートメントのことです。  sub により、プロシージャを定義できます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ステートメント  なんらかの動作、宣言、定義などを行うための命令です。  dim や for など、たくさんのステートメントが組み込まれています。  プロシージャを定義することにより、組み込みのステートメントと同様の使い方ができます。 参照 ステートメント/関数 索引 用途別ステートメント/関数 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 関数  何らかの値を返す手続きのことです。  組み込み関数 と ユーザが独自に定義できる関数(functionで定義する)の2種類があります。  関数は必ず式の一部として使用されます。len 関数は文字列の長さを返します。次の例のように、単独で len を使用することはできませんし、意味がありません。 len(a$)  次の例のように式の一部として使用します。 print len(a$) x = len(a$) + 10  まれに、返値を使用しないで関数を呼び出したいことがあります。そのような場合でも式の一部として使用しなければなりませんので、call を使用してください。 call popupmenu(item$) 参照 ステートメント/関数 索引 用途別ステートメント/関数 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ プロパティ  プロパティとはウィンドウ(文書)の属性(状態)のことです。  プロパティは変数と同様に値を代入したり、値を取得したりできます。ただし、取得しかできないプロパティもあります。  プロパティに値を設定することにより、文書の状態を変更することができます。 例 @Line = 1 'カーソルを1行目に移動  また、プロパティから値を取得することにより、文書の状態を知ることができます。 例 print @Filename$ '文書のファイル名をステータスバーに表示 ・ 先頭に @ が1つついているプロパティ  カレントウィンドウ(文書)に関するプロパティです。  一般に、AutoOpen, AutoClosed, AutoExit, AutoInit 内ではカレントウィンドウプロパティは使用できません。 ・ 先頭に @ が2つついているプロパティ  アプリケーションウィンドウに関するプロパティです。 ------------------------------------------------------------------------------ 注意  ディレクトリを返すプロパティは、ディレクトリの区切りが \ に置き換えられます。  一般マクロ内ではすべてのプロパティが使用できますが、自動実行マクロ内では制限があります。 参照 自動実行マクロ内でのプロパティ/メソッドについて ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ メソッド  メソッドとは文書を制御するための命令です。  メソッドにはステートメントのようにある動作をするものと、関数のように値を返すものがあります。 ・ 先頭に @ が1つついているメソッド  カレントウィンドウ(文書)に関するメソッドです。  QXでの基本機能もこれに属します。  一般に、AutoOpen, AutoClosed, AutoExit, AutoInit 内ではカレントウィンドウメソッドは使用できません。 ・ 先頭に @ が2つついているメソッド  アプリケーションウィンドウに関するメソッドです。 ------------------------------------------------------------------------------ 注意  返値を伴うメソッドを行頭におくことはできません。返値を無視してメソッドを呼び出したいときは call ステートメントを使用してください。  一般マクロ内ではすべてのメソッドが使用できますが、自動実行マクロ内では制限があります。 参照 自動実行マクロ内でのプロパティ/メソッドについて ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 変数  何らかの可変の値を格納できる箱のようなものを変数といいます。  「数値変数」と「文字列変数」と「ユーザ定義データ型変数」の3種類があります。  数値変数には以下の種類があります。 integer 整数型(16ビット -32768〜32767までの範囲) long 長整数型(32ビット -2147483648〜2147483647までの範囲) HWND integer と同じ(ウィンドウハンドル用として使用する) (NT&2000&95&98&ME 版 では long と同じ)  integer 型の変数に範囲を超える値を代入すると、65536 で割ったあまりが代入されます。 例 dim j as integer j = 70000 ' j = 4464 と同じ  文字列変数には以下の種類があります。 string 可変長文字列型 string[xx] 固定領域文字列型  固定領域文字列型/ユーザ定義データ型以外は配列にすることができます。 参照 static 命名規則 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 定数  定数には以下のものがあります ■ 10進定数 ■ 16進定数  16進数の先頭に &H を付けると16進定数となります。 例 &H3A '16進数の3A = 10進数の58 = `:` ■ 文字定数  文字を ` で囲むと文字定数となり、囲んだ文字のアスキーコードまたはシフトJISコードとなります。  ` 自身のアスキーコードは ```` というように記述します。 例 `:` ' : のアスキーコード。すなわち&H3A `あ` ' あ のシフトJISコード。すなわち&H82A0 ■ 予約定数  あらかじめ定義されている記号定数です。 参照 予約定数一覧  10進定数/16進定数/文字定数/予約定数 は long 型の数値定数です。 ■ 文字列定数  文字列を " で囲むと文字列定数となります。  " 自身を文字列定数に含めるには "" というように2つ記述します。 例 "ABC""DEF" 'ABC"DEF という文字列 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 命名規則  変数名/プロシージャ名/関数名/ユーザ定義データ型名などの識別子に使用できる文字は以下の通りです。 アルファベット(A-Z, a-z) 数字(0-9) アンダースコア(_) 半角カナ &HA1-&HDF (。-゚) すべての全角文字  ただし、数字は2文字目以降にしか使用できません。  識別子は32バイトまで記述できます。 半角文字は1文字あたり1バイト 全角文字は1文字あたり2バイト ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 一般マクロ キー/メニュー/ツールバー/ステータスバーから実行するマクロを一般マクロといいます。 参照 自動実行マクロ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 自動実行マクロ  あるイベント(事象)が起こったときに自動的に実行されるマクロを自動実行マクロといいます。 プロシージャ名 イベント AutoKey 文字キーが押されたとき AutoVKey キーが押されたとき AutoZKey IMEで文字が入力されたとき(確定時に呼ばれる) AutoZKey2 IMEで文字が入力されたとき(未確定文字入力時に呼ばれる) AutoOpen ファイルが開かれる直前 AutoOpened ファイルが開かれた直後 AutoClose ファイルが閉じられる直前 AutoClosed ファイルが閉じられた直後 AutoExit QXが終了する直前 AutoInit QX起動直後 AutoClicked クリックしたとき AutoDoubleClicked ダブルクリックしたとき AutoTimer 約1秒おきに呼ばれる AutoActivate ドキュメントウィンドウが切り替わるごとに実行される AutoStart マクロ実行前に自動的に実行される AutoEnd マクロ終了時に自動的に実行される  一般マクロ実行中は自動実行マクロは実行されません。つまり、一般マクロ中でファイルを開く動作を行っても、AutoOpen は実行されません。 注意:自動実行マクロ内ではあまり複雑な動作は行わないようにしてください。 ------------------------------------------------------------------------------ 自動実行マクロには3つの種類があります。 1:キー定義ファイルにマクロファイル名を記述する方式。   AutoClicked, AutoDoubleClicked, AutoStart, AutoEnd, AutoClose 以外はすべて使用できます。   1つしか登録できない。   マクロファイルを更新したら、QXを起動し直さなければならない。   2にくらべて高速。 2:特定のファイル名でマクロファイルを作成する(ファイル追加方式)。   AutoOpen, AutoOpened, AutoClose, AutoClosed, AutoClicked, AutoDoubleClicked の6種類のみ   AutoOpen, AutoOpened, AutoClose, AutoClosed は10個までのマクロファイルを使用できる。   マクロファイルを更新したら、すぐに反映される。   一般に低速。 3:マクロ実行前、終了時に自動的に実行される AutoStart, AutoEnd  test.mac,main を実行しようとすると、まず、test.mac,AutoStart が実行されます。次に、test.mac,main が実行され、最後に、test.mac,AutoEnd が実行されます。AutoStart 内で、end を実行すると、実行しようとしたマクロは実行されません。  3:は、名前は「自動実行マクロ」ですが、動作/制限事項などは一般マクロと同様です。 参照 自動実行マクロ内でのプロパティ/メソッドについて マクロ作成手順(自動実行マクロ) ------------------------------------------------------------------------------ AutoVKey, AutoKey の関係 1 キーボードでキーを押す(@@VKey, @@Shift が設定される) 2 AutoVKey が実行される 3 押されたキーが特殊キーでなければ @@Key が設定され、AutoKey が実行される @@Key が文書に入力または、コマンドが実行される 押されたキーが特殊キーであれば @@VKey からコマンドが実行される ------------------------------------------------------------------------------ AutoTimer について 以下の場合は実行されません。 ・ ダイアログなどを表示している ・ 最後のキー入力から1秒以上たっていない ・ キーマクロ実行中/定義中 ・ マクロ実行中 例 1秒おきに beep が実行されます。 sub AutoTimer() beep end sub ------------------------------------------------------------------------------ AutoClose マクロ中で、@@MacroReturnStatus = 1 を実行すると、閉じようとする動作をキャンセルできます。 例 ファイル名 qacls01.mac proc AutoClose if msgbox("閉じるのをやめますか?", MB_YESNOCANCEL) = IDYES then @@MacroReturnStatus = 1 end if end proc ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 自動実行マクロ内でのプロパティ/メソッドについて  以下はアプリケーションウィンドウに関するプロパティ/メソッドですが、AutoOpen, AutoOpened, AutoClosed, AutoExit, AutoInit 内では使用不可能です。 @@ActiveFile @@ActiveFrame @@Activehwnd @@FileOpenDir @@OpenFile  以下はカレントウィンドウ(文書)に関するプロパティ/メソッドですが、例外的に AutoOpen または AutoClosed 内で使用できます。 Open :AutoOpen 内で使用可能 Closed :AutoClosed 内で使用可能 @AutoIndent Open @Caption$ Open @CnvTabSpace Open @DeleteLastSpace Open @DeleteLastTab Open @DeleteLastZSpace Open @EUC Open @Filename$ Open Closed @FreeCursor Open @HelpFileName$ Open @hwnd Open @ImeNextOpen Open @KeywordNum Open @KinsokuBottom Open @KinsokuBottomCount Open @KinsokuReturn Open @KinsokuTop Open @KinsokuTopCount Open @NoLoadNoCnv Open @OverWriteMode Open @PageLine Open @Pathname$ Open Closed @PrintCaption Open @PrintComment Open @PrintEOF Open @PrintFold Open @PrintHScroll Open @PrintKeyword Open @PrintModify Open @PrintNumber Open @PrintPage Open @PrintReturn Open @PrintRuler Open @PrintScreenLine Open @PrintStatusLine Open @PrintString Open @PrintTab Open @PrintUnderEOF Open @PrintVScroll Open @ReadOnly Open @StyleNo Open @Tab Open @TextMode Open @WindowVar Open Closed @Width Open @Wordwrap Open ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ DLLの呼び出し  マクロの言語仕様だけでは実現できないことも、既存のDLLを呼び出せば実現できることがあります。  DLLの呼び出しは、使い方を間違えばシステムダウンの原因となります。c言語および Windows API の知識を持った方のみが使用してください。  DLLから返値以外でデータを受け取る場合、引数に可変長文字列型/固定領域文字列型/ユーザ定義データ型のどれかを指定します。ただし、配列を使用することはできません。  DLLに渡されるときに自動的にポインタに変換されます。  可変長文字列型の時は、文字列の最後に '\0' が付加されてDLLに渡されます。  固定領域文字列型のときは、文字列の長さが最大の長さでないときに限り '\0' が付加されてDLLに渡されます。よって、dim a$ as string[10] として定義したときは、9バイトまでしか代入しないでください。  引数に NULL を渡したいときは、単に 0 と記述してください。"" と記述すると、'\0' を指すポインタが渡されてしまいます。  DLLから戻ってきたときに、引数にした可変長文字列型変数の &H00 以降の部分は切り捨てられます。 例1 dllname KERNEL cdeclarea int GetWindowsDirectory(LPSTR, int); proc main() dim a$ as string a$ = string$(256, 0) GetWindowsDirectory(a$, 256) dim b$ as string[256] GetWindowsDirectory(b$, 256) end proc 例2 type RECT Left as default Top as default Right as default Bottom as default end type dllname USER cdeclare void GetWindowRect(HWND, RECT *); proc main() dim rc as RECT GetWindowRect(@@hwnd, rc) print cformat$("left=%d, top=%d, right=%d, bottom=%d", rc.Left, rc.Top, rc.Right, rc.Bottom) end proc ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ヌルストリング 長さ0の文字列のことです。 "" はヌルストリングです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 可変長文字列型  約10000バイトの長さまでの文字列を格納できます。これは、全角文字で5000文字、半角文字で10000文字です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 固定領域文字列型  サイズが固定の領域を占める文字列です。  定義時に指定したバイト数の長さの文字列まで格納できます。それ以上の長さの文字列を代入しようとすると、超える部分は切り捨てられます。  文字列内にコード0(&H00)があると、文字列の終端とみなします。よって、文字列内にコード0(&H00)を含むことはできません。  固定領域文字列型は一般にユーザ定義データ型(type)の中でのみ使用し、通常は使用されません。  固定領域文字列型は配列にすることはできません。 例 dim a$ as string[2] a$ = "12345" 'a$ = "12" と同じ dim b$ as string[5] b$ = "1" + chr$(0) + "2" 'b$ = "1" と同じ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ユーザ定義データ型  ユーザ定義データ型は既存の型を組み合わせたものです。  ユーザ定義データ型は一般にDLLの呼び出しのときの引数に使用し、通常は使用されません。  ユーザ定義データ型は配列にすることはできません。 参照 type ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ デバッグウィンドウ  デバッグ時に変数の値を調べるためのウィンドウです。  dprint ステートメント を使用して出力します。  NT&2000&95&98&ME 版 では Win3.1 版 のように QXWDBWIN.EXE は添付されていません。dprint を実行すると、自動的にデバッグウィンドウが表示されます。  デバッグウィンドウは終了させることはできません。不要なときは最小化(アイコン化)してください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A B C D E F G H I J K L M N O P R S T U V W X 記号 [A] abs 関数 and 演算子 anykeypressed 関数 appactivate 関数 appactivate2 関数 asc 関数 [B] beep ステートメント [C] call ステートメント cdeclare ステートメント cdeclarea ステートメント cformat$ 関数 chdir ステートメント chdrive ステートメント chr$ 関数 clipboard$ 関数 close ステートメント command$ 関数 const ステートメント control ステートメント curdir$ 関数 [D] date$ 関数 date0$ 関数 ddeexecute ステートメント ddeinitiate 関数 ddepoke ステートメント dderequest$ 関数 ddeserverhwnd 関数 ddeterminate ステートメント dialog ステートメント dim ステートメント dir$ 関数 dlgcolor ステートメント dlgenable ステートメント,関数 dlghwnd 関数 dlgitemcmd 関数 dlglistboxarray ステートメント,関数 dlgnotify 関数 dlgtext$ ステートメント,関数 dlgvalue ステートメント,関数 dlgvisible ステートメント,関数 dllname ステートメント do ステートメント doevents ステートメント dprint ステートメント [E] else ステートメント elseif ステートメント end ステートメント environ$ 関数 eof 関数 eqv 演算子 exit ステートメント [F] filedatetime$ 関数 filelen 関数 for ステートメント freefile 関数 fullpath$ 関数 function ステートメント [G] getattr 関数 getcolor 関数 getfilename$ 関数 getfolder$ 関数 getprofile$ 関数 [H] hex$ 関数 [I] if ステートメント imemode ステートメント imestatus 関数 imp 演算子 inputb$ 関数 inputbox 関数 inputbox$ 関数 inputchar 関数 inputkey 関数 inrstr 関数 inrstrb 関数 instr 関数 instrb 関数 isalnum 関数 isalpha 関数 isdigit 関数 iskeydown 関数 iskeypressed 関数 islower 関数 isupper 関数 isxdigit 関数 [J] jistosjis 関数 [K] kill ステートメント [L] lcase 関数 lcase$ 関数 left$ 関数 leftb$ 関数 len 関数 lenb 関数 lineinput ステートメント listbox 関数 loop ltrim$ 関数 [M] macrofilename$ 関数 macromode mid$ 関数 midb$ 関数 mkdir ステートメント mod 演算子 month$ 関数 msgbox 関数 [N] name ステートメント next ステートメント not 演算子 [O] open ステートメント or 演算子 [P] popupmenu 関数 popupmenuf$ 関数 print ステートメント proc ステートメント [R] right$ 関数 rightb$ 関数 rmdir ステートメント rtrim$ 関数 [S] searchexe$ 関数 searchfile$ 関数 seek ステートメント/関数 sendkey ステートメント shell 関数 sjistojis 関数 space$ 関数 static ステートメント step stopdestroykey ステートメント stopdispatchevent ステートメント stopinputbox ステートメント stopmacro ステートメント str$ 関数 string$ 関数 sub ステートメント [T] then time$ 関数 time0$ 関数 to trim$ 関数 type ステートメント [U] ucase 関数 ucase$ 関数 until [V] val 関数 varptr 関数 versionmacro 関数 [W] week$ 関数 weekday 関数 while writeprofile ステートメント [X] xor 演算子 [記号] _gettickcount 関数 _sleep 関数 _sndplaysound 関数 & 演算子 < 演算子 > 演算子 = 演算子 =< 演算子 <= 演算子 => 演算子 >= 演算子 <> 演算子 >< 演算子 << 演算子 >> 演算子 + 演算子 - 演算子 * 演算子 / 演算子 ++ 演算子 -- 演算子 | 演算子 ' コメント &H 16進定数 ` 文字定数 #16 #32 #32_NT #32_95 #comment ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ abs 関数 構文  abs(num) 機能  num の絶対値を返します。 例 abs(-100) → 100 abs(100) → 100 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ appactivate 関数 構文 appactivate(string1, string2) string1:タイトルバー文字列 string2:クラス名 機能  指定したウィンドウタイトル(string1)、クラス名(string2)を持つウィンドウをアクティブにします。タイトル/クラス名が一致したときのみ、ウィンドウをアクティブにします。  どちらかの引数をヌルストリングにすると、それらは何であっても一致したとみなされます。  ウィンドウをアクティブにできたときは、そのウィンドウのハンドル(HWND)、アクティブにできなかったときは0を返します。 例 CPPFRAME というクラスを持ったウィンドウをアクティブにする dim hwnd as HWND hwnd = appactivate("", "CPPFRAME") ------------------------------------------------------------------------------ appactivate2 関数 構文 appactivate2(string) string:タイトルバー文字列 機能  指定したウィンドウタイトル(string)を持つウィンドウをアクティブにします。タイトル名の先頭が string に一致すれば、ウィンドウをアクティブにします。これはMDIタイプのアプリをアクティブにするときに使います。  ウィンドウをアクティブにできたときは、そのウィンドウのハンドル(HWND)、アクティブにできなかったときは0を返します。 例 タイトルの先頭が テスト となっているウィンドウをアクティブにする dim hwnd as HWND hwnd = appactivate2("テスト") [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ asc 関数 構文 asc(string) 機能  文字列string の最初の文字のコードを返します。これは、アスキーコードまたはシフトJISコードです。 参照 val chr$ 例 asc("A") → &H41 asc("ABC") → &H41 asc("あ") → &H82A0 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ beep ステートメント 構文 beep 機能  「ピッ」とならします。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ call ステートメント 構文 call 関数/メソッド 機能  関数を呼び出します。  関数や返値のあるメソッドは式の一部としてしか呼び出せませんが、返値を無視して呼び出したいときに call ステートメントを使用します。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cdeclare ステートメント 構文 cdeclare c言語形式のプロトタイプ宣言 機能  DLLで定義されている関数の名前/引数/返値を宣言します。  cdeclare は必ず dllname でDLLのファイル名を宣言した後に記述します。  c言語の知識のない方は使用しないでください。  関数の引数/返値はc言語のものを使用します。  引数に使用できる型は以下の通りです。 int int * long long * HWND HWND * LPSTR LPCSTR void ユーザ定義データ型 *  返値に使用できる型は以下の通りです。 int long HWND void 例 'user.exe の GetWindowRect を宣言します dllname "user.exe" cdeclare void GetWindowRect(HWND, RECT *); 参照 cdeclarea varptr [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cdeclarea ステートメント 構文 cdeclarea c言語形式のプロトタイプ宣言 機能  Win3.1 版: cdeclare と同じ機能です。  NT&2000&95&98&ME 版: 宣言した関数名の最後に A をつけます。 例 cdeclarea int GetWindowsDirectory(LPSTR, int); これは Win3.1 版 では cdeclare int GetWindowsDirectory(LPSTR, int); と同じです。 NT&2000&95&98&ME 版 では cdeclare int GetWindowsDirectoryA(LPSTR, int); と同じです。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ cformat$ 関数 構文 cformat$(string, ...) string:フォーマット文字列 機能  フォーマット文字列に従って、引数を文字列に変換し、その文字列を返します。 フォーマット文字列の書式 型変換指定 %type flag: - を指定すると左詰めにします。 width: 変換後の文字列の幅です。 type: 以下の文字が使用できます。 s 文字列型 d 符号付き10進数 u 符号なし10進数 x 符号なし16進数(英字は小文字) X 符号なし16進数(英字は大文字) 参照 hex$ str$ 例 xx$ = "123" print cformat$("[%5s]", xx$) '[ 123] が表示される print cformat$("[%-5d:%5d]", 100, 100) '[100 : 100] が表示される [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ chdir ステートメント 構文 chdir string string:移動したいディレクトリ 機能  カレントディレクトリを変更します。ただし、カレントドライブは変更しません。 参照 chdrive curdir$ 例 chdir "C:\WINDOWS" 'ドライブ C: のカレントディレクトリを \WINDOWS にする ------------------------------------------------------------------------------ mkdir ステートメント 構文 mkdir string string:作りたいディレクトリ 機能  ディレクトリを作成します。 ------------------------------------------------------------------------------ rmdir ステートメント 構文 rmdir string string:削除したいディレクトリ 機能  ディレクトリを削除します。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ chdrive ステートメント 構文 chdrive string string:変更したいドライブ名 機能  カレントドライブを変更します。  string の先頭1文字目をドライブ名とみなします。 参照 chdir curdir$ 例 chdrive "b" 'カレントドライブを B: にする [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ chr$ 関数 構文 chr$(num) 機能  アスキーコードまたはシフトJISコードを対応する文字に変換し、その文字列を返します。 参照 asc cformat$ 例 chr$(&H41) → "A" chr$(&H82A0) → "あ" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ clipboard$ 関数、ステートメント 構文 clipboard$(num) num:取得する情報の種別(省略可能:0) -1 クリップボードのバイト数(文字列で返る) -2 クリップボードの行数(文字列で返る) 0 クリップボード全体の文字列 正の整数 クリップボードのx行目の文字列 機能  クリップボードの文字列を返します。 構文 clipboard$ = string 機能  クリップボードに文字列を代入します。  文字列の制限が 10K なので、処理できるサイズもそれに制限されます。 例 clipboard$ = "abc" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ close ステートメント 構文 close #num 機能  指定したファイル番号(open で指定したもの)のファイルを閉じます。  以後、このファイル番号は再利用できます。  ファイルの使用を終えたら必ず close でファイルを閉じてください。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ command$ 関数 構文 command$(num) num:0 引数全体 0以外 X番目の引数 機能  マクロ実行時の引数を返します。 例 test.mac,main,1,2,3 としてマクロを起動したとき command$(0) → "1,2,3" command$(1) → "1" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ const ステートメント 構文1 const 定数名 = num 構文2 const 定数名 = string 機能  記号定数を宣言します。  num には10進定数または、16進定数のみ記述できます。  string には文字列定数のみ記述できます。  プロシージャまたは関数の内部で宣言すると、その内部でのみ有効なローカル定数となります。 参照 dim static 例 const count = 10 const s$ = "あいう" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ curdir$ 関数 構文 curdir$(string) string:ドライブ名(省略可能:カレントドライブ) 機能  指定したドライブのカレントディレクトリを返します。 参照 chdir chdrive 例 a$ = curdir$("a") 'ドライブ A: のカレントディレクトリ a$ = curdir$() 'カレントドライブのカレントディレクトリ [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ date$,date0$ 関数 構文 date$ 機能  現在の日付("yyyy-mm-dd" の形式)を返します。  月/日が1桁のときはスペースで埋められます。 例 1995- 6- 1 ------------------------------------------------------------------------------ 構文 date0$ 機能  現在の日付("yyyy-mm-dd" の形式)を返します。  月/日が1桁のときは 0 で埋められます。 例 1995-06-01 参照 time$ month$ week$ weekday [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ddeinitiate 関数 構文 ddeinitiate(string1, string2) string1:アプリケーション名 string2:トピック名 機能  DDE通信を開始し、成功した場合は通信するためのチャネル番号、失敗したときは0を返します。  DDE通信は同時には1つしか実行できません。通信を終了したら ddeterminate を実行してください。  アプリケーション名やトピック名に何を指定するかは、DDEサーバとなるアプリケーションのヘルプで確認してください。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeexecute ddepoke dderequest$ ddeterminate ddeserverhwnd 例 dim channel dim htmlfile$ htmlfile$ = "http://www2k.biglobe.ne.jp/~araken/" channel = ddeinitiate("Netscape", "WWW_OpenURL") if channel <> 0 then call appactivate2("Netscape") else channel = ddeinitiate("IExplore", "WWW_OpenURL") end if if channel = 0 then call shell("start "+htmlfile$) exit proc end if ddeexecute channel, htmlfile$ ddeterminate channel [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ddeexecute ステートメント 構文 ddeexecute num, string num:チャネル番号(ddeinitiateが返したもの) string:コマンド文字列 機能  DDEサーバにコマンドを送ります。  コマンド文字列に何を指定するかは、DDEサーバとなるアプリケーションのヘルプで確認してください。  DDEサーバが30分間応答しないとエラーになります。DDEサーバが応答しなくなった場合はQXをアクティブにして Ctrl Break を入力してください。強制的にマクロを終了できます。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeinitiate ddepoke dderequest$ ddeterminate ddeserverhwnd [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ddepoke ステートメント 構文 ddepoke num, string1, string2 num:チャネル番号(ddeinitiateが返したもの) string1:コマンド文字列 string2:データ文字列 機能  DDEサーバにデータを送ります。  コマンド文字列、データ文字列に何を指定するかは、DDEサーバとなるアプリケーションのヘルプで確認してください。  DDEサーバが30分間応答しないとエラーになります。DDEサーバが応答しなくなった場合はQXをアクティブにして Ctrl Break を入力してください。強制的にマクロを終了できます。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeinitiate ddeexecute dderequest$ ddeterminate ddeserverhwnd [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dderequest$ 関数 構文 dderequest$(num, string) num:チャネル番号(ddeinitiateが返したもの) string:要求するデータのある項目名 機能  DDEサーバからデータを受け取り、その文字列を返します。  項目名に何を指定するかは、DDEサーバとなるアプリケーションのヘルプで確認してください。  DDEサーバが30分間応答しないとエラーになります。DDEサーバが応答しなくなった場合はQXをアクティブにして Ctrl Break を入力してください。強制的にマクロを終了できます。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeinitiate ddeexecute ddepoke ddeterminate ddeserverhwnd [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ddeserverhwnd 関数 構文 ddeserverhwnd() 機能  DDEサーバウィンドウのウィンドウハンドルを返します。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeinitiate ddeexecute ddepoke ddeterminate [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ddeterminate ステートメント 構文 ddeterminate num num:チャネル番号(ddeinitiateが返したもの) 機能  DDE通信を終了します。  NT&2000&95&98&ME 版 のみ使用できます。 参照 ddeinitiate ddeexecute ddepoke dderequest$ ddeserverhwnd [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ダイアログ座標系 x方向は使用しているフォントの 1/4、y方向は 1/8 を単位とする座標系です。 例 XY "XY" という2文字が表示されるとき、X の左上が (0,0) とすると、Y の左上は (4,0) になります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dialog ステートメント,関数 ステートメント 構文 dialog string1, num1, num2, num3, num4, num5, string2, num6 string1:タイトルバーに表示する文字列 num1:X座標 num2:Y座標 num3:幅 num4:高さ num5:ダイアログのスタイル string2:フォント名(省略可能:System) num6:フォントのサイズ(省略可能) 機能  ダイアログボックスを作成します。  ダイアログボックスは1個しか作成できません。以前に作成したものは破棄されます。  X座標、Y座標、幅、高さは、ダイアログ座標系で指定します。座標はアプリケーションウィンドウの左上を 0,0 とする相対座標です。  ダイアログのスタイル には 0 を指定してください。  フォント名により、ダイアログ内で使用するコントロールのフォントを指定できます。  フォントのサイズは正の数のときポイントの10倍、負の数のときドット数となります。 例 120 → 12ポイント -16 → 16ドット  フォント名、フォントのサイズは省略できます。  dialog ステートメントを実行した時点ではダイアログボックスは表示されません。作成した後は、control ステートメントでダイアログボックス内に各種コントロールを作成し、dialog 関数でダイアログボックスを表示します。 ------------------------------------------------------------------------------ 関数 構文 dialog(num1, num2) num1:ダイアログの表示モード | 制御を返してほしい通知コード num2:タイムアウトする時間(ミリ秒単位:0で無効)(省略可能:0) 機能  表示モードに1を指定すると dialog ステートメントで作成したダイアログボックスを表示し、コントロールの状態が変更されるのを待ち、状態が変更されたコントロールのコントロールIDを返します。どのような理由で制御を返したかは dlgnotify で調べます。  表示モードに0を指定すると表示されているダイアログボックスを消します。消すだけで、破棄するわけではないため dialog(1) を再度呼ぶと表示できます。  num2 を指定すると、指定した時間が経過すると自動的に制御を返します。このとき、返値は 0 になり、dlgnotify は DLGN_TIMEOUT になります。  通知コードに指定できるのは以下の5種類です。通知コードを指定しないと、BUTTON(BS_PUSHBUTTON / BS_DEFPUSHBUTTON) が押されたときしか制御を返しません。 DLGN_CLICKED DLGN_DOUBLECLICKED DLGN_CHANGE DLGN_SELCHANGE DLGN_STATICCLICKED コントロールと通知コードの関係 BUTTON BS_PUSHBUTTON / BS_DEFPUSHBUTTON  押されたとき DLGN_CLICKED BUTTON BS_AUTORADIOBUTTON / BS_AUTOCHECKBOX  状態が変更されたとき DLGN_CLICKED LISTBOX  ダブルクリックされたとき DLGN_DOUBLECLICKED  選択状態が変更されたとき DLGN_SELCHANGE COMBOBOX  ダブルクリックされたとき DLGN_DOUBLECLICKED  選択状態が変更されたとき DLGN_SELCHANGE  文字を入力したとき DLGN_CHANGE EDIT  文字を入力したとき DLGN_CHANGE STATIC (dialog の引数には DLGN_STATICCLICKED をつけて下さい)  クリックしたとき DLGN_CLICKED  ダブルクリックされたとき DLGN_DOUBLECLICKED ------------------------------------------------------------------------------ 例1 ret = dialog(1) BUTTON(BS_PUSHBUTTON / BS_DEFPUSHBUTTON)が押されたときのみ制御を返します。 例2 ret = dialog(1 | DLGN_CLICKED) 例1に加え、BUTTON(BS_AUTORADIOBUTTON / BS_AUTOCHECKBOX)の状態が変更されたときも制御を返します。 例3 ret = dialog(1 | DLGN_CLICKED | DLGN_CHANGE) 例2に加え、EDIT, COMBOBOX 内で文字を入力したときにも制御を返します。 例4 ret = dialog(1, 100) 100ミリ秒で制御を返します。 参照 control dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlghwnd dlgvisible 通知コード(DIALOG) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ control ステートメント 構文 control string1, num1, string2, num2, num3, num4, num5, num6 string1:表示文字列 num1:コントロールID string2:クラス名(コントロールの種類を指定) num2:コントロールのスタイル num3:X座標 num4:Y座標 num5:幅 num6:高さ 機能  ダイアログボックスの中にコントロールを作成します。  コントロールIDはコントロールを識別するための数字で、ダイアログボックス内で重複しない数字を指定してください。  IDOK(1)、IDCANCEL(2) を除き、なるべく 100以上の値を使用してください。  コントロールIDを必要としないとき(たとえば STATIC のとき)は -1 を指定してもかまいません。このときに限り重複した数字でもかまいません。  クラス名に指定できる文字列は以下の通りです。 EDIT エディットコントロール BUTTON ボタンコントロール STATIC スタティックコントロール LISTBOX リストボックスコントロール COMBOBOX コンボボックスコントロール STATUSBAR ステータスバー  スタイルはコントロールによって指定できるものが違います。予約定数(CONTROL) を参照してください。予約定数(CONTROL)の中から適切なものを | または or で組み合わせてください。  X座標、Y座標、幅、高さは、ダイアログ座標系で指定します。座標はダイアログボックスの左上からの相対座標です。  STATUSBAR は常にダイアログの最下部に張りつきます。スタイル、X座標、Y座標、幅、高さに0を指定してください。  EDIT および LISTBOX はエクスプローラ、ファイルマネージャなどからファイルをドラッグ&ドロップして、ファイル名を入力できます。 参照 dialog dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlghwnd dlgvisible dlgnotify [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgcolor ステートメント 構文 dlgcolor num1, num2, num3 num1:コントロールID(0:ダイアログ) num2:文字の色(0〜&hffffff, -1:Windows標準色) num3:背景色(0〜&hffffff, -1:Windows標準色)  コントロールの色を変更します。  STATIC , LISTBOX, BUTTON(ラジオボタン、チェックボックスのみ), ダイアログの色を変更できます。  コントロールIDは 1000 未満でなければなりません。  コントロールIDが 0 のときは文字の色は無視されます。 色は RGB で指定します。 B(青) の輝度 * &h10000 + G(緑) の輝度 * &h100 + R(赤) の輝度 輝度は 0〜&hff 例 白 &hffffff 青 &hff0000 赤 &hff 黒 0  -1 を指定すると、デスクトップのプロパティで指定した色(つまり、dlgcolor を実行しなかったときの色)にします。num2 または num3 のどちらかだけを -1 にするということはできません。 参照 dialog control dlgvalue dlgitemcmd dlglistboxarray dlgenable dlgtext$ dlghwnd dlgvisible dlgnotify [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgvalue ステートメント,関数 ステートメント 構文 dlgvalue num1, num2 num1:コントロールID num2:設定する値 機能  指定したコントロールIDを持つコントロールの状態を変更します。  コントロールによって以下の状態になります。 ● LISTBOX, COMBOBOX → 選択する項目の番号(0〜 )、-1 は選択されていない状態になる ● BUTTON(BS_AUTOCHECKBOX が指定されている) → チェックするとき 1、そうでなければ 0 ● BUTTON(BS_AUTORADIOBUTTON が指定されている) → 選択するとき 1、そうでなければ 0 ------------------------------------------------------------------------------ 関数 構文 dlgvalue(num) num:コントロールID 機能  指定したコントロールIDを持つコントロールの保持している値を返します。  コントロールによって以下の値を返します。 ● LISTBOX(LBS_MULTIPLESEL, LBS_EXTENDEDSEL が指定されていない) → 選択している項目の番号(0〜 )、選択されていなければ -1 ● BUTTON(BS_AUTOCHECKBOX が指定されている) → チェックされているとき 1、そうでなければ 0 ● BUTTON(BS_AUTORADIOBUTTON が指定されている) → 選択されているとき 1、そうでなければ 0 ● COMBOBOX(CBS_SIMPLE, CBS_DROPDOWN が指定されている) → 選択している項目の番号(0〜 )、選択されていなければ -1、ただし、項目一覧と違う文字列が入力されているときは -1 ● COMBOBOX(CBS_DROPDOWNLIST が指定されている) → 選択している項目の番号(0〜 )、選択されていなければ -1 参照 dialog control dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlghwnd dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgitemcmd 関数 構文 dlgitemcmd(num1, num2, param1, param2) num1:コントロールID num2:メッセージ番号 param1:wParam の値 param2:lParam の値 機能  コントロールにメッセージを送ります。dlgvalue, dlglistboxarray, dlgtext$ では制御不可能なことも実現できます。  実際にはc言語レベルで return(SendMessage(GetDlgItem(hwndDialog, num1), num2, param1, param2); が行われます。  この関数で使用する num2, param1, param2 の詳しい値は Windows API のヘルプを参照してください。 参照 dialog control dlgvalue dlglistboxarray dlgtext$ dlgenable dlghwnd dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlglistboxarray ステートメント,関数 ステートメント 構文 dlglistboxarray num, string配列 num:コントロールID string配列:項目文字列 機能  LISTBOX, COMBOBOX の項目を string配列 で置き換えます。  string配列の0番目の要素は使用されません。また、ヌルストリングがあると、それ以降の要素は使用されません。 ------------------------------------------------------------------------------ 関数 構文 dlglistboxarray(num, string配列) num:コントロールID string配列:項目文字列 機能  LISTBOX, COMBOBOX の項目を string配列 に代入し、代入した数を返します。 参照 dialog control dlgvalue dlgitemcmd dlgtext$ dlgenable dlghwnd dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgtext$ ステートメント,関数 ステートメント 構文 dlgtext$ num, string num:コントロールID string:設定する文字列 機能  指定したコントロールIDを持つコントロールの表示文字列を変更します。  以下のコントロールで使用できます。 EDIT CBS_SIMPLE, CBS_DROPDOWN の指定された COMBOBOX BUTTON STATIC STATUSBAR ------------------------------------------------------------------------------ 関数 構文 dlgtext$(num) num:コントロールID 機能  指定したコントロールIDを持つコントロールの保持している文字列を返します。  すべてのコントロールで使用できます。  LISTBOX や、CBS_DROPDOWNLIST の指定された COMBOBOX では、選択された文字列を返します。 参照 dialog control dlgvalue dlgitemcmd dlglistboxarray dlgenable dlghwnd dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgenable ステートメント,関数 ステートメント 構文 dlgenable num1, num2 num1:コントロールID num2:使用可能フラグ 機能  コントロールを使用可能または不可能にします。  使用可能フラグに 0 を指定すると、使用不可能になります。0 以外を指定すると、使用可能になります。 ------------------------------------------------------------------------------ 関数 構文 dlgenable(num) num:コントロールID 機能  コントロールが使用可能なら、-1 を返し、使用不可能なら 0 を返します。 参照 dialog control dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlghwnd dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlghwnd 関数 構文 dlghwnd(num) num:コントロールID 機能  コントロールのウィンドウハンドルを返します。  コントロールIDに 0 を指定すると、ダイアログのウィンドウハンドルを返します。 参照 dialog control dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlgvisible dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgvisible ステートメント,関数 ステートメント 構文 dlgvisible num1, num2 num1:コントロールID num2:表示フラグ 機能  コントロールを表示または非表示にします。  表示フラグに 0 を指定すると、非表示になります。0 以外を指定すると、表示されます。 ------------------------------------------------------------------------------ 関数 構文 dlgvisible(num) num:コントロールID 機能  コントロールが表示されていれば、-1 を返し、表示されていなければ 0 を返します。 参照 dialog control dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlghwnd dlgnotify dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dlgnotify 関数 構文 dlgnotify() 機能  dialog 関数が制御を返した理由を調べます。  ボタンが押されたとき DLGN_CLICKED  ダブルクリックされたとき DLGN_DOUBLECLICKED  選択状態が変更されたとき DLGN_SELCHANGE  文字を入力したとき DLGN_CHANGE 参照 control dlgvalue dlgitemcmd dlglistboxarray dlgtext$ dlgenable dlgvisible dlgcolor [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dim ステートメント 構文 dim 変数名 as 型 [, 変数名2 as 型2 , ...] 機能  変数を宣言します。変数は必ず dim または static で宣言しなければなりません。  sub(プロシージャ)または function(関数)の内部で宣言された変数は、そのプロシージャまたは関数の内部でのみ使用可能なローカル変数となり、外部で宣言された変数は、複数のプロシージャや関数で使用できるグローバル変数となります。  dim で宣言したローカル変数は、プロシージャまたは関数が呼ばれると、数値変数は 0、文字列変数はヌルストリングに初期化されます。  , で区切って、複数の変数を宣言できます。  「as 型」は省略することができます。このとき変数名の最後の文字が $ であれば string、それ以外の時は long とみなされます。 使用できる型は以下の通りです。 integer 整数型 long 長整数型 string 可変長文字列型 string[xx] 固定領域文字列型(xx は10000まで) HWND Win3.1 版 のとき integer、NT&2000&95&98&ME 版 のとき long と同じ HDC Win3.1 版 のとき integer、NT&2000&95&98&ME 版 のとき long と同じ default Win3.1 版 のとき integer、NT&2000&95&98&ME 版 のとき long と同じ xxxxx ユーザ定義データ型  また、固定領域文字列型/ユーザ定義データ型以外は配列にすることができます。配列の添字(インデックス)は [] または () でくくります。 例 dim a$ as string dim j as integer, x as long dim array[10] as long 'array[0] から array[10] までの配列 'dim array(10) as long でもよい type RECT 'RECT というユーザ定義データ型を定義 Left as default Top as default Right as default Bottom as default end type dim rc as RECT 'RECT 型の変数 rc 参照 const [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dir$ 関数 構文1 dir$(string, num) string:検索するファイル名 num:検索するファイルの属性(省略可能:&H21) 構文2 dir$() 機能1  string で指定されたファイルを検索します。  最初の検索の時に 構文1 を使用します。 属性に使用できる数値は以下の通りです。これらを or または + で組み合わせて指定できます。 0 通常のファイル 1 書き込み禁止ファイル 2 隠しファイル 4 システムファイル 8 ボリュームラベル 16,&H10 ディレクトリ 32,&H20 アーカイブ属性  ディレクトリ(&H10)を指定したときは、ディレクトリのみが検索されます。 機能2  構文1 で検索した後、2つ目以降のファイルを検索するときに使用します。  機能1,2 とも、検索できたときは、ファイル名を、これ以上ファイルが見つからなかったときはヌルストリングを返します。 参照 getattr filedatetime$ filelen fullpath$ searchfile$ 例 A:\ にあるファイルを配列item に格納します dim item$[100] dim d$,j j = 1 d$ = dir$("A:\*.*") do while d$<>"" item$[j] = d$ j = j+1 d$ = dir$() loop [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dllname ステートメント 構文 dllname "DLLファイル名" 機能  cdeclare で宣言するDLL関数のあるファイル名を宣言します。  DLLファイル名が PATH の通っているディレクトリやシステムディレクトリ以外にあるときはディレクトリ名まで記述する必要があります。 注意 krnl386.exe, gdi.exe, user.exe の場合はそれぞれ以下のように記述できます。 この3つのDLLを使用するときはなるべく以下の書式で記述してください。 dllname KERNEL dllname GDI dllname USER NT&2000&95&98&ME 版 のときはそれぞれ、kernel32.dll, gdi32.dll, user32.dll となります。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ do .. loop ステートメント 構文1 do while condition ステートメント... loop 構文2 do until condition ステートメント... loop 構文3 do ステートメント... loop while condition 構文4 do ステートメント... loop until condition 機能  指定された条件 condition によりループします。 機能1,3  condition が0以外の時ループを実行します。 機能2,4  condition が0の時ループを実行します。 構文1,2 は condition の値により1回もループが実行されないことがあります。 構文3,4 は condition に関わらず最低1回はループが実行されます。 ------------------------------------------------------------------------------ exit do ステートメント 構文 exit do 機能  ただちに do .. loop ループを抜けます。 参照 for .. next 例 A:\ にあるファイルを配列item に格納します dim item$[100] dim d$,j j = 1 d$ = dir$("A:\*.*") do while d$<>"" if j > 100 then exit do item$[j] = d$ j = j+1 d$ = dir$() loop [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ doevents ステートメント 構文 doevents 機能  他のアプリケーションが実行できるように Windows に制御を返します。  sendkey を実行した後、すぐにキーを送出したいときに doevents を実行してください。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ dprint ステートメント 構文 dprint 式 機能  数値または文字列をデバッグウィンドウに表示します。デバッグ時に変数の値を調べるときに使用します。  数値式または文字列式を ; または , で区切って複数記述できます。  ";" で区切ると、連続して出力し、"," で区切ると、タブを出力します。また、最後に ";" を記述すると、改行しません。  1度に出力できるのは最大1000バイト程度までです。 例 dprint j '変数 j の値を出力し、改行します dprint j; '変数 j の値を出力し、改行しません dprint a$;j;k '変数 a$ j k の値を出力し、改行します [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ end ステートメント 構文1 end 構文2 end sub 構文3 end function 構文4 end if 構文5 end type 機能1  マクロを終了します。  function の内部で end を使用してマクロを終了させることはできません [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ environ$ 関数 構文1 environ$(num) 構文2 environ$(string) 機能1  num 番目(1〜)に定義されている環境変数文字列を返します。  ABC=XYZ という環境変数があるとき "ABC=XYZ" を返します。 機能2  環境変数 string で定義されている文字列を返します。  ABC=XYZ という環境変数があるとき environ$("ABC") は "XYZ" を返します。 返値  機能1,2 とも、環境変数が見つかったときはその文字列を、見つからなかったときはヌルストリングを返します。 例 SET TMP=C:\TMP が DOSで実行されているとき environ$("TMP") → "C:\TMP" 例 dim j, e$ j = 1 do e$ = environ$(j) if e$ = "" then exit do 'ここで e$ を使用する。たとえば dprint e$ j = j+1 loop while 1 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ eof 関数 構文 eof(num) 機能  指定したファイル番号のファイルを終端まで読み切ったかどうかを調べます。  終端まで読み切っているときは -1 、そうでなければ 0 を返します。 参照 open [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ exit ステートメント 構文1 exit do 構文2 exit for 構文3 exit sub 構文4 exit function [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ filedatetime$ 関数 構文 filedatetime$(string) string:ファイル名 機能  string で指定されたファイルのタイムスタンプを "??/??/?? ??:??:??" のようにフォーマットした文字列を返します。  指定したファイルが存在しないときはヌルストリングを返します。 参照 dir$ getattr filelen [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ filelen 関数 構文 filelen(string) string:ファイル名 機能  string で指定されたファイルの長さ(サイズ)を返します。  指定したファイルが存在しないときは -1 を返します。 参照 dir$ getattr filedatetime$ [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ for .. next ステートメント 構文 for 数値変数 = num1 to num2 step num3 ステートメント... next num1:開始値 num2:終了値 num3:増分値(省略可能:1 開始値>終了値のときは -1) 機能  数値変数を num1 から num2 まで、num3 きざみで変化させループします。  num3>0 のときは 数値変数>num2になると、num3<0 のときは 数値変数<num2 になるとループは終了し、next の次のステートメントが実行されます。最初から終了条件が満たされているとfor .. next ループ内のステートメントは一回も実行されません。  num3 を省略するときは step も省略します。  数値変数に配列を指定することはできません。 ------------------------------------------------------------------------------ exit for ステートメント 構文 exit for 機能  for .. next ループをただちに抜けます。 参照 do .. loop ------------------------------------------------------------------------------ open ステートメント 構文 open string for input as #num output append binary 機能  for により、open ステートメントでファイルを開くときの動作を指定します。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ freefile 関数 構文 freefile() 機能  利用可能なファイル番号(1〜5)を返します。  利用可能なファイル番号が無いときは 0 を返します。 例 dim fnum fnum = freefile() open "test.txt" for input as #fnum [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ fullpath$ 関数 構文 fullpath$(string) string:ファイル名 機能  string で指定されたファイルをフルパスに変換した文字列を返します。  正しくフルパスに変換できなかったときはヌルストリングを返します。 参照 dir$ searchfile$ 例 カレントディレクトリが A:\TEST のとき fullpath$("TEST.MAC") → A:\TEST\TEST.MAC [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ function ステートメント 構文 function 関数名(引数のならび, ... ) as 返値の型 ステートメント... end function 機能  関数を定義します。  引数は dim と同様の書式で10個まで宣言できます。指定できる型は、integer,long,string, HWND で、配列を指定することはできません。返値の型も同様です。  「as 返値の型」を省略すると long とみなします。  値を返すには 「関数名」自体に値を代入します。  関数を再帰的に(自分自身を)呼び出すことはできません。  関数の内部で end でマクロを終了させることはできません。 例 'num2 は値を2倍にして返す関数 function num2(num) num2 = num * 2 end function proc main print str$(num2(100)) end proc 参照 sub ------------------------------------------------------------------------------ exit function ステートメント 構文 exit function 機能  ただちに function を抜けます。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ getattr 関数 構文 getattr(string) string:ファイル名 機能  string で指定されたファイルの属性を返します。  指定したファイルが存在しないときは -1 を返します。  属性の意味は dir$ で指定するものと同じです。 参照 filedatetime$ filelen [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ getcolor 関数  色を選択するダイアログを表示します。 構文 getcolor(num, string) num:色の初期値 string:タイトルバー文字列(省略可能) 機能  選んだ色を返します。キャンセルしたときは -1 を返します。 色は RGB で指定します。 B(青) の輝度 * &h10000 + G(緑) の輝度 * &h100 + R(赤) の輝度 輝度は 0〜&hff 例 白 &hffffff 青 &hff0000 赤 &hff 黒 0 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ getfilename$ 関数 構文 getfilename$(string1, string2, string3) string1:ディレクトリ名(省略可能:カレントディレクトリ) string2:ファイル名(省略可能:"*.*") string3:タイトル(省略可能:"") 機能  コモンダイアログを表示してファイルを1つ選択し、そのファイル名を返します。  ESC を押して処理を中止したときはヌルストリングを返します。 例 f$ = getfilename$("c:\src", "*.c;*.h", "ソースファイルの編集") [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ getfolder$ 関数 構文 getfolder$(string1, string2) string1:メッセージ文字列 string2:初期ディレクトリ(省略可能) 機能  フォルダ選択ダイアログを表示し、選択したフォルダ名を返します。  ESC を押して処理を中止したときはヌルストリングを返します。 例 a$ = getfolder$("フォルダを選んで下さい") [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ getprofile$ 関数 構文 getprofile$(string1, string2, string3) string1:セクション名 string2:キー名 string3:ファイル名(省略可能:"QMACPROF.INI") 機能  INI ファイルに記録されている情報を読み込み、その文字列を返します。見つからなかったときはヌルストリングを返します。 例 QMACPROF.INI の内容が以下の時 [ABC] aaa=abcdefg EFG=1000 getprofile$("ABC", "aaa") → "abcdefg" getprofile$("ABC", "EFG") → "1000" getprofile$("xxx", "yyy") → "" ------------------------------------------------------------------------------ writeprofile ステートメント 構文 writeprofile string1, string2, string3, string4 string1:セクション名 string2:キー名 string3:文字列名 string4:ファイル名(省略可能:"QMACPROF.INI") 機能  INI ファイルに、指定した情報を書き込みます。  ファイル名を指定するときは @@QxDirectory$ + "\ファイル名" のように、QXのあるディレクトリに作成することを推奨します。  キー名にヌルストリングを指定すると、セクション全体を消します。  セクション名にヌルストリングを指定すると、すぐにディスクに書き込みます(フラッシュする)。遅延書き込みのためワンテンポ遅れて書き込まれることがありますが、これにより直ちに書き込むことができます。通常は実行する必要はありません。 例 writeprofile "ABC", "EFG", "2000" を実行すると、QMACPROF.INI は以下のようになります。 [ABC] EFG=2000 例 writeprofile "section", "ABC", "EFG", @@QxDirectory$ + "\test.ini" '*1 writeprofile "", "", "", @@QxDirectory$ + "\test.ini" を実行すると、*1 の実行結果を、直ちに書き込みます。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ hex$ 関数 構文 hex$(num) 機能  数値num を16進数の文字列に変換し、その文字列を返します。 参照 chr$ cformat$ str$ 例 hex$(100) → "64" hex$(&H20) → "20" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ if .. then .. end if ステートメント 構文1 if condition1 then ステートメント1... elseif condition2 then ステートメント2... else ステートメント3... end if 構文2 if condition then ステートメント 機能1  condition1 が0以外の時 ステートメント1を実行します。  condition1 が0で、condition2 が0以外の時 ステートメント2を実行します。  どちらでもないときは、ステートメント3が実行されます。  elseif condition then は任意の数だけ記述できます。 機能2  condition が0以外の時 ステートメントを実行します。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ imemode ステートメント 構文 imemode num 機能  IMEを制御します。 num 1 IMEをONにします 2 IMEをOFFにします 4 IMEを全角ひらがなモードにします 5 IMEを全角カタカナモードにします 6 IMEを半角カタカナモードにします 7 IMEを全角英数モードにします 参照 imestatus [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ imestatus 関数 構文 imestatus 機能  現在のIMEの状態を返します。 2 IMEはOFF 4 全角ひらがなモード 5 全角カタカナモード 6 半角カタカナモード 7 全角英数モード 0 その他の時 参照 imemode [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ inputb$ 関数 構文 inputb$(num1, #num2) 機能  ファイル番号num2 のファイルから num1 バイト読み込み、読み込んだデータを文字列にして返します。 参照 open lineinput [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ inputbox 関数 構文 inputbox(string1, string2, num) string1:プロンプト string2:タイトル(省略可能:"") num:デフォルト数値(省略可能:なし) 機能  ダイアログで数値を入力させ、入力された値を返します。  キャンセルしたときは INPUTBOX_CANCEL(&H80000000) を返します。 参照 予約定数(INPUTBOX) ------------------------------------------------------------------------------ inputbox$ 関数 構文 inputbox$(string1, string2, string3, string4) string1:プロンプト string2:タイトル(省略可能:"") string3:デフォルト文字列(省略可能:"") string4:キャンセルしたとき返す文字列(省略可能:chr$(&H1B)) 機能  ダイアログで文字列を入力させ、入力された文字列を返します。  キャンセルしたときは 「キャンセルしたときのデフォルト文字列」 を返します。 参照 listbox msgbox popupmenu popupmenuf$ 例 dim num num = inputbox("数字を入力してください", "数字入力", 5) dim s$ s$ = inputbox$("文字を入力してください", "文字入力", "TEST") ------------------------------------------------------------------------------ stopinputbox ステートメント 構文 stopinputbox num 機能  inputbox または、inputbox$ のダイアログを表示中に ESC を押すか キャンセル ボタンを押すと、INPUTBOX_CANCEL(&H80000000) または 「キャンセルしたとき返す文字列」 を返して処理を続行しますが、マクロを中止できるようにもできます。  numが 0 のとき INPUTBOX_CANCEL(&H80000000) または 「キャンセルしたとき返す文字列」 を返し、処理を続行します。  numが 0 以外のときマクロを中止します。  マクロ実行直後は stopinputbox 0 の状態になっています。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ instr inrstr 関数 構文1 instr(num, string1, string2) 構文2 inrstr(num, string1, string2) num:検索位置(1〜 )(省略可能:1) string1:検索される文字列 string2:検索する文字列 機能1  string1 の num 文字目以降から string2 が最初に現れる文字位置を返します。  string2 が見つからなかったときは 0 を返します。  全角文字も1文字として扱います。  num を省略するときは , も省略します。 機能2  最後に現れる文字位置を返す点を除き instr と同じです。 ------------------------------------------------------------------------------ instrb inrstrb 関数 構文1 instrb(num, string1, string2) 構文2 inrstrb(num, string1, string2) num:検索位置(1〜 )(省略可能:1) string1:検索される文字列 string2:検索する文字列 機能1  string1 の num バイト目以降から string2 が最初に現れるバイト位置を返します。  string2 が見つからなかったときは 0 を返します。  num を省略するときは , も省略します。 機能2  最後に現れる文字位置を返す点を除き instrb と同じです。 例 instr(2, "ABCDE", "CD") → 3 instr("ABCDE", "CD") → 3 instr(4, "ABCDE", "C") → 0 instr(2, "あいう", "う") → 3 instrb(2, "あいう", "う") → 5 inrstr("a.b.c.d", ".") → 6 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ inputchar 関数 構文 inputchar 機能  文字の入力を待ち、入力した文字を返します。  ファンクションキーや Delete キーなどの特殊キーは無視されます。 ------------------------------------------------------------------------------ inputkey 関数 構文 inputkey 機能  キーの入力を待ち、入力したキーのキーコードを返します。  Shift Ctrl などのシフトキーは無視されます。 参照 予約定数(KEY) 例 dim key key = inputkey print hex$(key) 参照 iskeypressed anykeypressed iskeydown [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ isalpha 関数 構文 isalpha(num) num:調べる数値  num が英字のとき -1 を、そうでなければ 0 を返します  islower(num) or isupper(num) と同じです。 ------------------------------------------------------------------------------ isalnum 関数 構文 isalnum(num) num:調べる数値 機能  num が英字か数字のとき -1 を、そうでなければ 0 を返します。  isalpha(num) or isdigit(num) と同じです。 ------------------------------------------------------------------------------ isdigit 関数 構文 isdigit(num) num:調べる数値 機能  num が数字のとき -1 を、そうでなければ 0 を返します。  `0` <= num and num <= `9` と同じです。 ------------------------------------------------------------------------------ islower 関数 構文 islower(num) num:調べる数値 機能  num が英小文字のとき -1 を、そうでなければ 0 を返します。  `a` <= num and num <= `z` と同じです。 ------------------------------------------------------------------------------ isupper 関数 構文 isupper(num) num:調べる数値 機能  num が英大文字のとき -1 を、そうでなければ 0 を返します。  `A` <= num and num <= `Z` と同じです。 ------------------------------------------------------------------------------ isxdigit 関数 構文 isxdigit(num) num:調べる数値 機能  num が16進数字のとき -1 を、そうでなければ 0 を返します。  isdigit(num) or (`A` <= num and num <= `F`) or (`a` <= num and num <= `f`) と同じです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ iskeypressed 関数 構文 iskeypressed(num) num:調べるキーコード 機能  以前の iskeypressed 呼び出し以後、指定したキーコードを持つキーが押されたかを調べます。  押されたときは -1、押されなかったきは 0 を返します。  num に 0 を指定すると、iskeypressed 呼び出しをリセットします。  iskeypressed を使用するときは、マクロの先頭付近に iskeypressed 呼び出しを入れてください。また、ダイアログボックスなど、キー入力を必要とするメソッドを実行した後も iskeypressed 呼び出しを入れてください。 例 call iskeypressed(KEY_RETURN) 'KEY_RETURN の状態をリセットするため ここでいろいろ処理する if iskeypressed(KEY_RETURN) then '押された else '押されなかった end if 上の例は リターンキー(Enter) しか使用しない場合の例ですが、たくさんのキーを使用するときは、リセットのための iskeypressed がたくさん必要になってしまいます。複数のキーを使用するときは iskeypressed(0) を呼び出してください。これで、すべてのキーをリセットできます。 例 call iskeypressed(0) 'すべてのキーの状態をリセットする ------------------------------------------------------------------------------ anykeypressed 関数 構文 anykeypressed() 機能  どれかのキーが押されたらそのキーのキーコード、押されなければ 0 を返します。  anykeypressed を使用する前に stopdispatchevent 1 を実行してください。 ------------------------------------------------------------------------------ iskeydown 関数 構文 iskeydown(num) num:調べるキーコード 機能  指定したキーコードを持つキーが押されているか調べます。  押されているときは -1、押されていないときは 0 を返します。  iskeydown は あるキーが押し下げられた状態にあるかを調べるときに使用します。 参照 予約定数(KEY) inputchar inputkey [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ jistosjis 関数 構文 jistosjis(num) 機能  数値num をJISコードとみなして、シフトJISコードに変換します。  num が正しいJISコードでないときは0を返します。 ------------------------------------------------------------------------------ sjistojis 関数 構文 sjistojis(num) 機能  数値num をシフトJISコードとみなして、JISコードに変換します。  num が正しいシフトJISコードでないときは0を返します。 例 jistosjis(&H2121) → &H8140 sjistojis(`あ`) → &H2422 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ kill ステートメント 構文 kill string string:削除するファイル名 機能  指定したファイルを削除します。  ファイルを削除できなくてもエラーにはなりません。削除できたかどうかは、dir$ を使います。 例 kill "c:\tmp\filename.tmp" 参照 open name [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ lcase 関数 構文 lcase(num) 機能  数値num をアスキーコードとみなして、半角英大文字であれば小文字に変換し、その値を返します。  半角英大文字以外の時は、num をそのまま返します。  全角の英大文字は変換しません。 ------------------------------------------------------------------------------ lcase$ 関数 構文 lcase$(string) 機能  string 中の半角英大文字を小文字に変換し、その文字列を返します。  全角の英大文字は変換しません。 参照 ucase ucase$ 例 lcase(`A`) → &H61 つまり `a` lcase(`a`) → &H61 つまり `a` lcase$("ABcd") → "abcd" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ left$ 関数 構文 left$(string, num) 機能  string の左から num 文字を取り出し、取り出した文字列を返します。  全角文字も1文字として扱います。 ------------------------------------------------------------------------------ leftb$ 関数 構文 leftb$(string, num) 機能  string の左から num バイトを取り出し、取り出した文字列を返します。 参照 right$ rightb$ mid$ midb$ 例 left$("123", 1) → "1" left$("あいう", 1) → "あ" leftb$("あいう", 2) → "あ" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ len 関数 構文 len(string) 機能  string の文字数を返します。  全角文字も1文字として扱います。 ------------------------------------------------------------------------------ lenb 関数 構文 lenb(string) 機能  string のバイト数を返します。 例 len("123") → 3 len("あいう") → 3 lenb("あいう") → 6 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ lineinput ステートメント 構文 lineinput #num, string  指定したファイル番号のファイルから1行読み込み string に代入します。  行の区切りは chr$(&h0d) または chr$(&h0a) です。  string には可変長文字列型のみ指定できます。固定領域文字列型や配列は指定できません。 参照 open [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ listbox 関数 構文 listbox(string配列, string1, string2, num) string配列:リストボックス項目文字列 string1:ダイアログのプロンプト(省略可能:"") string2:ダイアログのタイトル(省略可能:"") num:0以外の時固定ピッチフォントを使用する(省略可能:0) 機能  ダイアログの中にリストボックスを表示し、何番目の項目が選択されたかを返します。ESC を押すか、キャンセルボタンを押して、ダイアログを取り消したときは0を返します。  string配列の0番目の要素は使用されません。また、ヌルストリングがあると、それ以降の要素は使用されません。  string1 でリストボックスの上部に表示される文字列を指定できます。chr$(10) を間に含めることにより2行まで指定できます。 参照 inputbox inputbox$ msgbox popupmenu popupmenuf$ 例 dim sel dim item$[10] item$[1] = "項目1" item$[2] = "項目2" item$[3] = "項目3" sel = listbox(item$, "選んでください", "タイトル") [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ltrim$ 関数 構文 ltrim$(string) 機能  string の先頭のスペースを削除し、その文字列を返します。 ------------------------------------------------------------------------------ trim$ 関数 構文 trim$(string) 機能  string の先頭/末尾のスペースを削除し、その文字列を返します。 ------------------------------------------------------------------------------ rtrim$ 関数 構文 rtrim$(string) 機能  string の末尾のスペースを削除し、その文字列を返します。 例 ltrim$(" A ") → "A " rtrim$(" A ") → " A" trim$(" A ") → "A" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ macrofilename$ 関数 構文 macrofilename$ 機能  現在実行中のマクロファイル名を返します。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ macromode 構文 macromode 機能 以下の組み合わせ(デフォルトは 0) 1 popupmenu で1個目の項目を自動的に選択させない [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ mid$ 関数 構文 mid$(string, num1, num2) 機能  string の num1 文字目から num2 文字取り出し、その文字列を返します。  num2 は省略可能で、省略すると num1 文字目からすべての文字を取り出します。  全角文字も1文字として扱います。 ------------------------------------------------------------------------------ midb$ 関数 構文 midb$(string, num1, num2) 機能  string の num1 バイト目から num2 バイト取り出し、その文字列を返します。  num2 は省略可能で、省略すると num1 バイト目からすべての文字を取り出します。 参照 left$ leftb$ right$ rightb$ 例 mid$("abc", 2, 1) → "b" mid$("あいう", 2, 1) → "い" mid$("abc", 2) → "bc" midb$("あいう", 3, 2) → "い" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ month$ 関数 構文 month$(num) num: 1 "January" を返します 2 "February" 3 "March" 4 "April" 5 "May" 6 "June" 7 "July" 8 "August" 9 "September" 10 "October" 11 "November" 12 "December" 0 今日の月を返します 機能  指定した数値を月文字列に変換し、その文字列を返します。 参照 date$ time$ week$ weekday 例 month$(1) → "January" month$(0) → "June" (実行した日が6月だったとき) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ msgbox 関数 構文 msgbox(string1, num, string2) string1:ダイアログに表示するメッセージ num:ダイアログのタイプ(省略可能:0) string2:タイトルバー文字列(省略可能:"") 機能  ダイアログを表示し、選択されたボタンの種別を返します。  num に指定できる数値は以下の通りです。  それぞれのグループから1つずつ選んで or または + で組み合わせて使います。 ボタングループ MB_OK 0 OK ボタン MB_OKCANCEL 1 OK キャンセル ボタン MB_ABORTRETRYIGNORE 2 中止 再試行 無視 ボタン MB_YESNOCANCEL 3 はい いいえ キャンセル ボタン MB_YESNO 4 はい いいえ ボタン MB_RETRYCANCEL 5 再試行 キャンセル ボタン アイコングループ MB_ICONHAND &H0010 STOP アイコン MB_ICONSTOP &H0010 STOP アイコン MB_ICONQUESTION &H0020 ? アイコン MB_ICONEXCLAMATION &H0030 ! アイコン MB_ICONASTERISK &H0040 i アイコン MB_ICONINFORMATION &H0040 i アイコン デフォルトボタングループ MB_DEFBUTTON1 &H0000 1番目のボタンがデフォルト MB_DEFBUTTON2 &H0100 2番目のボタンがデフォルト MB_DEFBUTTON3 &H0200 3番目のボタンがデフォルト ダイアログ種別グループ MB_APPLMODAL &H0000 通常のダイアログ MB_SYSTEMMODAL &H1000 他のアプリの実行を禁止 返値 IDOK 1 OK ボタンが押された IDCANCEL 2 キャンセル ボタンが押された IDABORT 3 中止 ボタンが押された IDRETRY 4 再試行 ボタンが押された IDIGNORE 5 無視 ボタンが押された IDYES 6 はい ボタンが押された IDNO 7 いいえ ボタンが押された 参照 予約定数(DIALOG) inputbox inputbox$ listbox popupmenu popupmenuf$ 例 dim sel sel = msgbox("よろしいですか?", MB_YESNO, "確認") if sel = IDYES then 'はいを選んだときの処理 else 'いいえを選んだときの処理 end if [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ name ステートメント 構文 name string1 as string2 機能  ファイル名string1 を ファイル名string2 に変更します。  ワイルドカードを使用することはできません。 例 name "test.txt" as "test.bak" 参照 open kill [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ open ステートメント 構文1 open string for input as #num 構文2 open string for output as #num 構文3 open string for append as #num 構文4 open string for binary as #num  それぞれ、指定したファイル名(string)をファイル番号num(1〜5) を使用して開きます。  num は freefile 関数で取得することもできます。 機能1  読み込み用に開きます。これ以後、lineinput を使用して内容を読み込めます。  指定したファイルが存在しないときはエラーになります。 機能2  書き込み用に開きます。これ以後、print を使用してデータを書き込めます。  指定したファイルが存在するときはサイズ0に切りつめられるので注意してください。  指定したファイルが存在しないときは新規に作成されます。 機能3  ファイルの末尾に追加書き込み用に開きます。これ以後、print を使用してデータを書き込めます。必ずファイルの末尾に書き込まれる点に注意してください。  指定したファイルが存在しないときは新規に作成されます。 機能4  読み書き用に開きます。seek で読み書き位置を変更して inputb$ で読み込んだり、print で書き込んだりできます。  指定したファイルが存在しないときは新規に作成されます。 ■例1 test.txt を読み込み、文書に挿入します。 dim a$ open "test.txt" for input as #1 do until eof(1) lineinput #1, a$ @Input a$ @CharReturn2 loop close #1 ■例2 QXのあるディレクトリの file.txt にカレント文書のファイル名を追加します。 open @@QxDirectory$ + "\" + "file.txt" for append as #1 print #1, @Pathname$ close #1 ■例3 test.txt を test.bak に1行単位でコピーします。 dim a$ open "test.txt" for input as #1 open "test.bak" for output as #2 do until eof(1) lineinput #1, a$ print #2, a$ loop close #1 close #2 ■例4 test.txt を test.bak に10000バイト単位でコピーします。  入出力の単位が大きくなるので例3よりもかなり高速です。 dim a$ open "test.txt" for input as #1 open "test.bak" for output as #2 do until eof(1) a$ = inputb$(10000, #1) print #2, a$; loop close #1 close #2 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ popupmenu 関数 構文 popupmenu(string配列, num1, num2) string配列:メニュー文字列 num1:メニューを表示するx座標(省略可能:-1) num2:メニューを表示するy座標(省略可能:-1) 機能  ポップアップメニューを表示し、何番目のメニューが選択されたかを返します。ESC を押してメニューを取り消したときは0を返します。  string配列の0番目の要素は使用されません。また、ヌルストリングがあると、それ以降の要素は使用されません。  また、要素の最初の文字が chr$(1) のときは、メニュー項目がグレー表示され、選択できなくなります。  要素の最初の文字が chr$(2) のときは、チェックマークがつけられます。  最初の文字が > のときは階層化メニューにします。  < だけの行があると、階層を下げます。  - だけの行があるとセパレータを表示します。  num1, num2 でポップアップメニューを表示する座標を指定できます。ウィンドウからの相対座標での指定となります。省略すると、マウスカーソルのある位置に表示されます。 参照 inputbox inputbox$ listbox msgbox macromode 例1 dim sel dim item$[10] item$[1] = "項目1" item$[2] = "項目2" item$[3] = chr$(1) + "項目3" 'この項目はグレー表示され選択できない sel = popupmenu(item$) 例2 dim sel dim item$[10] item$[1] = "項目1" item$[2] = ">項目2" item$[3] = "階層化1" item$[4] = "階層化2" item$[5] = "<" item$[6] = "-" item$[7] = "最後の項目" sel = popupmenu(item$) ------------------------------------------------------------------------------ popupmenuf$ 関数 構文 popupmenuf$(string, num1, num2, num3) string:メニュー項目の入っているファイルのファイル名 num1:メニューを表示するx座標(省略可能:-1) num2:メニューを表示するy座標(省略可能:-1) num3: 1 chr$(1), chr$(2) を有効にする(省略可能:0) 2 タブの次の単語を返す 4 タブ以降をカットして表示する 機能  popupmenu と違い、配列変数からではなく、ファイルからメニュー項目を読み込みます。  選んだメニュー項目の文字列を返します。指定したファイルがないときや、メニューをキャンセルしたときはヌルストリングを返します。  num3 で popupmenu の動作状態を設定できます。| で組み合わせて使用できます。 例 @Insert popupmenuf$(@@QxDirectory$ + "\" + "qkao.txt") [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ print ステートメント 構文1 print string string:ステータスバーに表示する文字列(省略可能:"") 構文2 print num num:ステータスバーに表示する数値 機能  ステータスバーに文字列または数値を表示します。 例 print "" (ステータスバーの内容を消す) print "処理を終了しました" ------------------------------------------------------------------------------ 構文2 print #num, [任意の num または string] 機能2  指定したファイル番号のファイルに任意のデータを書き込みます。  ; または , で区切って複数の式を記述できます。  , で区切ると、間にタブ(chr$(9))を書き込みます。  行末に ; をつけると改行コードを書き込みません。 参照 open [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ right$ 関数 構文 right$(string, num) 機能  string の右から num 文字を取り出し、取り出した文字列を返します。  全角文字も1文字として扱います。 ------------------------------------------------------------------------------ rightb$ 関数 構文 rightb$(string, num) 機能  string の右から num バイトを取り出し、取り出した文字列を返します。 参照 left$ leftb$ mid$ midb$ 例 right$("abc", 1) → "c" right$("あいう", 1) → "う" rightb$("あいう", 2) → "う" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ searchexe$ 関数 構文 searchexe$(string) string:さがしたいプログラムファイル名 機能  string をレジストリからさがし、そのパス名を返します。見つからなければヌルストリングを返します。  レジストリに正しくインストールするタイプのアプリケーションでなければさがすことはできません。  NT&2000&95&98&ME 版 のみ使用できます。 例 dim f$ f$ = searchexe$("netscape.exe") if f$<>"" then call shell(f$, 1) end if 参照 searchfile$ [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ searchfile$ 関数 構文 searchfile$(string) string:さがしたいファイル名 機能  string を 1. QXのあるディレクトリ 2. カレントディレクトリ 3. システムディレクトリ 4. Windows ディレクトリ 5. 環境変数 path で指定されたディレクトリ の中から順番に探し、みつかればその(ドライブ/ディレクトリ名のついた)ファイル名を、見つからなければヌルストリングを返します。  string に \ または : が含まれていたときは、string をそのまま返します。 参照 fullpath$ dir$ searchexe$ [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ seek ステートメント 構文 seek #num1, num2 機能  ファイル番号num1 のファイルの読み込み位置または書き込み位置を num2 に移動します。  先頭の位置は 1 です。 ------------------------------------------------------------------------------ seek 関数 構文 seek(num) 機能  ファイル番号num のファイルの読み込み位置または書き込み位置を返します。 参照 open [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sendkey ステートメント 構文 sendkey XXX, ... 機能  指定した引数をキー入力したかのように、アクティブウィンドウに送ります。  引数には、数値/文字列の両方を指定できます。  引数が文字列の時はその文字列が、数値の時はそれに対応するキーコードが送られます。  sendkey を実行した後、すぐにキーを送出したいときは doevents を実行してください。  MENU, CTRL, SHIFT 以外の一般キーを記述すると、そのキーを「押して離した」という情報を送ります。シフトキーを記述するとまず、「押した」という情報のみを送り、SendKey の最後で「離した」という情報を送ります。 例 MENU f の後、o を押したことにする 'MENU を押す → f を押す → f を離す → MENU を離す SendKey KEY_MENU, "f" 'o を押す → o を離す SendKey "o" 注意 SendKey KEY_MENU, "fo" とすると、 MENU を押す → f を押す → f を離す → o を押す → o を離す → MENU を離す となります。つまり、MENU f の後、 MENU o と押したことになります。 参照 予約定数(KEY) stopdestroykey [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ shell 関数 構文 shell(string, num) string:コマンド文字列 num:ウィンドウのスタイル(省略可能:2) 機能  string で指定したコマンド文字列を実行します。num により、実行するときのウィンドウのスタイルが決定されます。コマンド文字列にディレクトリ名が含まれていないときは searchfile$ と同様にコマンドのある場所を検索して実行します。  コマンドの終了を待たずにマクロは続行されます。  コマンド実行中にマクロの実行を止めたいときは num に負の数を指定します。このとき、ダイアログが表示されるので、ボタンを押せば強制的にマクロを実行させることができます。 num 1,-1 通常のウィンドウ(フォーカスあり) 2,-2 アイコン化ウィンドウ(フォーカスあり) 3,-3 最大化ウィンドウ(フォーカスあり) 4,-4 通常のウィンドウ(フォーカスなし) 6,-6 アイコン化ウィンドウ(フォーカスなし) 返値 Win3.1 版  コマンドを実行できなかったときは 32 以下の数値を返します。  コマンドを実行できたときは 32 より大きい数値を返します。 NT&2000&95&98&ME 版  コマンドを実行できなかったときは0を返します。  コマンドを実行できたときは 0以外の数値を返します。 例 メモ帳を実行し、終了するまでマクロの実行を停止する call shell("notepad", -1) 例 メモ帳を実行し、マクロの実行も継続する call shell("notepad", 1) 例 バッチファイルを実行する 拡張子が exe 以外の時は必ず拡張子も記述してください。 call shell("xxx.bat", 1) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ space$ 関数 構文 space$(num) 機能  num 個のスペースからなる文字列を返します。 参照 string$ 例 space$(2) → " " [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ static ステートメント 構文 static 変数名 as 型 [, 変数名2 as 型2 , ...] 機能  dim とほぼ同様の機能のステートメントですが、「プロシージャや関数の内部のローカル変数はマクロの実行時に1回だけしか初期化されない」という点が違います。  dim で宣言した変数はプロシージャや関数に入るたびに初期化されます。 参照 変数 const [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ stopdestroykey ステートメント 構文 stopdestroykey num num:1 または 2 の組み合わせ 機能  numが 0 のときマクロ終了時、及び、sendkey 実行時、msgbox 実行前などにキー入力を捨てます。  numが 1 のときマクロ終了時にキー入力を捨てません。  numが 2 のとき sendkey 実行時, msgbox 実行前などにキー入力を捨てません。これにより、QX自身にキー入力を送ることができますが、キー入力が送られるのは msgbox などのダイアログが表示されるときや、マクロ終了時のみです。  両方とも捨てたくないときは、num に 1+2 を指定してください。  マクロ実行直後は stopdestroykey 0 の状態になっています。  キー入力を必要とするマクロを実行し、キーを押しすぎると、マクロ終了時に文書に文字が入力されてしまうことがあります。これを防ぐために、マクロ終了時にはキー入力は自動的に捨てられるようになっています。この動作を禁止したいときは、 stopdestroykey 1 を実行してください。 例 ファイルメニューが表示されます。 stopdestroykey 3 sendkey KEY_MENU, "f" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ stopdispatchevent ステートメント 構文 stopdispatchevent num 機能  numが 0 のときイベントの処理を行います。  numが 0 以外のときイベントの処理を行わなくなります。  マクロ実行直後は stopdispatchevent 0 の状態になっています。  マクロ実行中は定期的にQX内で発生したイベントを処理します。このとき、キー入力は捨てられてしまいます。  anykeypressed を使用するときは stopdispatchevent 1 を実行して、キー入力が捨てられないようにしてください。  stopdispatchevent 1 を実行すると、右クリックによるマクロの中止はできません。 例 dim key stopdispatchevent 1 do key = anykeypressed() if key = KEY_SPACE then end if key = KEY_RETURN then beep 'ここで何かする loop while 1 stopdispatchevent 0 'anykeypressed を使わないときは 0 にする [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ stopmacro ステートメント 構文 stopmacro num 機能  一般マクロの実行中にキー入力するか、アプリケーションウィンドウを右クリックするとマクロの実行を中止できますが、この動作を有効にするか無効にするかを設定できます。  numが 0 のときマクロを中止できなくなります。  numが 0 以外のときマクロを中止できるようになります。  マクロ実行直後は stopmacro 1 の状態になっています。  デバッグがすんで、間違いなく動作するマクロ以外では stopmacro 0 は実行しない方が安全です。 参照 マクロの中止 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ str$ 関数 構文 str$(num) 機能  num を表現する文字列を作成し、その文字列を返します。  num が正の数の時は文字列の先頭にスペースがつきます。 参照 val chr$ hex$ cformat$ 例 str$(10) → " 10" str$(-10) → "-10" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ string$ 関数 構文 string$(num1, num2) num1:個数 num2:文字のコード 機能  num2 をアスキーコードまたはシフトJISコードとみなして、num1 個並べた文字列を作成し、その文字列を返します。 参照 space$ 例 string$(3, `a`) → "aaa" string$(3, `あ`) → "あああ" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub ステートメント proc ステートメント 構文 sub プロシージャ名(引数のならび, ... ) ステートメント... end sub 機能  プロシージャを定義します。  値を返せないことを除き function と同じです。  プロシージャを再帰的に(自分自身を)呼び出すことはできません。  sub と proc はマクロを実行する上では全く同じ機能です。sub と記述できるところは、すべて proc と記述できます。  QXのマクロ一覧(MacroList)で一覧表示されるのは proc のみです。  直接実行可能なプロシージャは proc、単なるサブルーチンとしてのプロシージャは sub と記述するようにしてください。 例 'inputstring は 引数を < > で囲って文書に入力するプロシージャ proc inputstring(s$) @Input "<" + s$ + ">" end proc proc main inputstring "テスト" end proc ------------------------------------------------------------------------------ exit sub ステートメント exit proc ステートメント 構文 exit sub 構文 exit proc 機能  ただちに sub,proc を抜けます。 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ time$,time0$ 関数 構文 time$ 機能  現在の時間("hh:mm:ss" の形式)を返します。  時/分/秒が1桁のときはスペースで埋められます。 例 23: 0:30 ------------------------------------------------------------------------------ 構文 time0$ 機能  現在の時間("hh:mm:ss" の形式)を返します。  時/分/秒が1桁のときは 0 で埋められます。 例 23:00:30 参照 date$ month$ week$ weekday [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ type ステートメント 構文 type 型名 メンバ名1 as 型1 メンバ名2 as 型2 ... end type 機能  ユーザ定義データ型を宣言します。  ユーザ定義型変数を配列にすることはできません。  メンバ名の型に可変長文字列型/ユーザ定義データ型を指定することはできません。  メンバの参照には . を使います。 例 'アプリケーションウィンドウの座標をステータスバーに表示します。 type RECT Left as default Top as default Right as default Bottom as default end type dllname USER cdeclare void GetWindowRect(HWND, RECT *); proc main() dim rc as RECT GetWindowRect(@@hwnd, rc) print cformat$("left=%d, top=%d, right=%d, bottom=%d", rc.Left, rc.Top, rc.Right, rc.Bottom) end proc [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ucase 関数 構文 ucase(num) 機能  数値num をアスキーコードとみなして、半角英小文字であれば大文字に変換し、その値を返します。  半角英小文字以外の時は、num をそのまま返します。  全角の英小文字は変換しません。 ------------------------------------------------------------------------------ ucase$ 関数 構文 ucase$(string) 機能  string 中の半角英小文字を大文字に変換し、その文字列を返します。  全角の英小文字は変換しません。 参照 lcase lcase$ 例 ucase(`a`) → &H41 つまり `A` ucase(`A`) → &H41 つまり `A` ucase$("ABcd") → "ABCD" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ val 関数 構文 val(string) 機能  文字列で表現された値を数値に変換し、その数値を返します。 参照 asc chr$ 例 val("10") → 10 val("&H10") → 16 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ varptr 関数 構文 varptr(変数名) 返値  変数のアドレスを長整数型(long)で返します。  変数名に指定できるのは、ユーザ定義データ型 / 整数型(integer) / 長整数型(long) / integer の配列 / long の配列 / 文字列型(string) です。  この関数はDLL呼び出しの時に変数のアドレスを渡したいときに使用します。 参照 cdeclare [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ versionmacro 関数 構文 versionmacro 返値  マクロのバージョン番号に 100 をかけた数値を返します。 例 バージョン番号が 2.00 のときは 200 バージョン番号が 2.11 のときは 211 [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ week$ 関数 構文 week$(num) num: 1 "Sunday" を返します 2 "Monday" 3 "Tuesday" 4 "Wednesday" 5 "Thursday" 6 "Friday" 7 "Saturday" 0 今日の曜日を英語で返します(Sunday 〜 Saturday) -1 "日" -2 "月" -3 "火" -4 "水" -5 "木" -6 "金" -7 "土" 機能  指定した数値を曜日文字列に変換し、その文字列を返します。 参照 date$ time$ month$ weekday 例 week$(1) → "Sunday" week$(-1) → "日" week$(0) → "Saturday" (実行した日が土曜日のとき) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ weekday 関数 構文 weekday 機能  今日の曜日を1〜7の数値で返します 日 1 を返します 月 2 火 3 水 4 木 5 金 6 土 7 参照 date$ time$ month$ week$ 例 weekday → 1 (実行した日が日曜日のとき) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  以下は、Windows API に対応した関数です。  返値がないもの(void型の関数)は 0 を返します。 _gettickcount 関数 GetTickCount に対応します。 ------------------------------------------------------------------------------ _sleep 関数 Sleep に対応します。 必ず 0 を返すことに注意してください。 引数は 0 〜 100000 です。 Win3.1 版 では、GetTickCount を使用して擬似的に Sleep を実現しています。 例 1秒待ちます call _sleep(1000) ------------------------------------------------------------------------------ _sndplaysound 関数 sndPlaySound に対応します。 例 tada.wav を演奏します call _sndplaysound("c:\windows\media\tada.wav", 2+1) [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演算子 ■ 算術演算子 ■ + & 演算子 構文1 num1 + num2 構文2 string1 + string2 構文3 string1 & string2 機能1  num1 と num2 の和を求めます。 機能2,3  string1 と string2 を連結します。 ------------------------------------------------------------------------------ - 演算子 構文1 num1 - num2 構文2 - num 機能1  num1 と num2 の差を求めます。 機能2  num の符号を反転します。 ------------------------------------------------------------------------------ * 演算子 構文 num1 * num2 機能  num1 と num2 の積を求めます。 ------------------------------------------------------------------------------ / 演算子 構文 num1 / num2 機能  num1 と num2 の商を求めます。  整数で演算するため小数点以下は切り捨てられます。 ------------------------------------------------------------------------------ mod 演算子 構文 num1 mod num2 機能 num1 を num2 で除算し、その余りを返します。 ------------------------------------------------------------------------------ << 演算子 構文 num1 << num2 機能  num1 を左に num2 ビットシフトします。num1 は符号なし整数として扱われます。 ------------------------------------------------------------------------------ >> 演算子 構文 num1 >> num2 機能  num1 を右に num2 ビットシフトします。num1 は符号なし整数として扱われます。 ------------------------------------------------------------------------------ ■ 論理演算子 ■ and 演算子 構文 num1 and num2 機能 num1 と num2 の論理積を求めます。 ビット単位での and の結果の一覧は以下の通りです。 num1 num2 結果 0 0 0 0 1 0 1 0 0 1 1 1 ------------------------------------------------------------------------------ eqv 演算子 構文 num1 eqv num2 機能 num1 と num2 の論理等価を求めます。 num1 num2 結果 0 0 1 0 1 0 1 0 0 1 1 1 ------------------------------------------------------------------------------ imp 演算子 構文 num1 imp num2 機能 num1 と num2 の論理包含を求めます。 num1 num2 結果 0 0 1 0 1 1 1 0 0 1 1 1 ------------------------------------------------------------------------------ not 演算子 構文 not num1 機能 num1 の論理否定を求めます。 num1 結果 0 1 1 0 ------------------------------------------------------------------------------ or 演算子 | 演算子 構文 num1 or num2 構文 num1 | num2 機能 num1 と num2 の論理和を求めます。 num1 num2 結果 0 0 0 0 1 1 1 0 1 1 1 1 ------------------------------------------------------------------------------ xor 演算子 構文 num1 xor num2 機能 num1 と num2 の排他的論理和を求めます。 num1 num2 結果 0 0 0 0 1 1 1 0 1 1 1 0 ------------------------------------------------------------------------------ ■ 関係演算子 ■ < 演算子 構文1 num1 < num2 構文2 string1 < string2 機能1  num1 < num2 のとき -1、num1 ≧ num2 の時0を返します。 機能2  文字列を先頭から1バイトずつ比較し、string1 < string2 のとき -1、string1 ≧ string2 の時0を返します。 ------------------------------------------------------------------------------ > 演算子 構文1 num1 > num2 構文2 string1 > string2 機能1  num1 > num2 のとき -1、num1 ≦ num2 の時0を返します。 機能2  文字列を先頭から1バイトずつ比較し、string1 > string2 のとき -1、string1 ≦ string2 の時0を返します。 ------------------------------------------------------------------------------ = 演算子 構文1 num1 = num2 構文2 string1 = string2 機能1  num1 = num2 のとき -1、num1 <> num2 の時0を返します。 機能2  string1 と string2 が同じ時 -1、違う時0を返します。 ------------------------------------------------------------------------------ <= =< 演算子 構文1 num1 <= num2 構文2 string1 <= string2 機能1  num1 ≦ num2 のとき -1、num1 > num2 の時0を返します。 機能2  文字列を先頭から1バイトずつ比較し、string1 ≦ string2 のとき -1、string1 > string2 の時0を返します。 <= と =< は同じ機能です。 ------------------------------------------------------------------------------ >= => 演算子 構文1 num1 >= num2 構文2 string1 >= string2 機能1  num1 ≧ num2 のとき -1、num1 < num2 の時0を返します。 機能2  文字列を先頭から1バイトずつ比較し、string1 ≧ string2 のとき -1、string1 < string2 の時0を返します。 >= と => は同じ機能です。 ------------------------------------------------------------------------------ <> >< 演算子 構文1 num1 <> num2 構文2 string1 <> string2 機能1  num1 <> num2 のとき -1、num1 = num2 の時0を返します。 機能2  string1 と string2 が違うとき -1、同じ時0を返します。 <> と >< は同じ機能です。 ------------------------------------------------------------------------------ ++ -- 演算子 構文1 変数++ 構文2 変数-- 機能1  変数の値に1を足します。  変数は integer型 及び long型 の数値変数のみ使用できます。配列型には使用できません。 item$[j++] = "xxx" は以下の2行と同じです item$[j] = "xxx" j = j+1 機能2  変数の値から1を引きます。 例 dim j dim item$[10] j = 1 item$[j++] = "xxx" item$[j++] = "yyy" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演算子の優先順位 上にあるほど優先順位が高くなります。 同じ行にあるものは同じ優先順位です。 ++ -- -(単項の - ) << >> * / mod + - & = < > <= =< >= => <> >< not and or | xor imp eqv [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ コメント  行中のどの位置でも ' を記述すると、それ以降の文字をコメントとみなします。  ただし、文字列中の ' はコメントとはなりません。 例 'これはコメント for j = 1 to 100 'ここからループ [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 条件実行  行頭に #16 または #32 を記述するとその行を Win3.1 版 のときのみまたは NT&2000&95&98&ME 版 のときのみ実行することができます。 #16 Win3.1 版 の時のみ実行する #32 NT&2000&95&98&ME 版 の時のみ実行する #32_NT NT&2000&95&98&ME 版 を Windows NT,2000 で実行した時のみ実行する #32_95 NT&2000&95&98&ME 版 を Windows 95,98,ME で実行した時のみ実行する 例1 #16 dllname "x16.dll" #32 dllname "x32.dll" [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ コメント #comment があると、この行以降をコメントと見なします。 再度、#comment があると、以降をマクロ記述行と見なします。 例 proc main #comment ここはコメント 何があってもエラーにはなりません。無視されます。 #comment beep end proc [目次] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 算術演算 abs ■ 数値を文字列へ chr$ cformat$ hex$ str$ ■ 文字列の作成 space$ string$ ■ 文字列を数値へ asc val ■ 文字列の検索 instr instrb inrstr inrstrb ■ 大文字小文字変換 lcase lcase$ ucase ucase$ ■ 文字のチェック isalpha islower isupper isalnum isdigit isxdigit ■ 文字列の切り出し left$ leftb$ mid$ midb$ right$ rightb$ ■ 文字列の長さ len lenb ■ スペース削除 ltrim$ rtrim$ trim$ ■ JIS←→シフトJIS jistosjis sjistojis ■ ディレクトリ/ファイル chdir mkdir rmdir chdrive curdir$ dir$ getattr filedatetime$ filelen fullpath$ getfilename$ getfolder$ open close name kill lineinput inputb$ print freefile eof seek searchfile$ searchexe$ ■ 日付/時間 date$ date0$ time$ time0$ month$ week$ weekday ■ IME imemode imestatus ■ 入力/選択 inputbox inputbox$ stopinputbox listbox msgbox popupmenu popupmenuf$ ■ ダイアログ dialog control dlgitemcmd dlglistboxarray dlgtext$ dlgvalue dlgenable dlgvisible dlghwnd dlgnotify dlgcolor ■ キー入力 inputkey inputchar iskeypressed anykeypressed iskeydown ■ プロファイル writeprofile getprofile$ ■ DDE通信(NT&2000&95&98&ME 版 のみ使用できます) ddeinitiate ddeexecute ddepoke dderequest$ ddeserverhwnd ddeterminate ■ 他のアプリに関する appactivate appactivate2 sendkey shell doevents ■ DLL cdeclare dllname cdeclarea _gettickcount _sleep _sndplaysound varptr ■ その他 beep call dprint environ$ versionmacro print stopmacro stopdispatchevent stopdestroykey command$ macrofilename$ getcolor clipboard$ ■ 変数/定数の定義 dim static const type ■ プロシージャ/関数の定義 sub proc function ■ 制御 for .. next do .. loop while(until) if .. then .. else .. elseif .. end if end exit