Last Update : 2009/04/xx
button命令とchkbox命令。見た目はぜんぜん違いますが、どちらも「ボタンコントロール」に分類されてます。ボタンの見た目を変えただけなのがチェックボックスであり、他にもラジオボタンやグループボックスがこのグループに含まれてます。
このオブジェクトに関する基礎的な情報は、button命令の解説やchkbox命令の解説のページを参照してください。
Win32 API関数を利用して、button命令で設置できるボタンオブジェクトの見た目(=ウィンドウスタイル)を変更してみるサンプルです。通常は、ボタンの中央にある文字列の表示位置を変更したり、文字列を複数行で表示することが可能です。(ウィンドウスタイルについては、ちょくとさんのページを参照)
現在のボタンのウィンドウスタイルをGetWindowLong関数で取得し、それにプラスした新たなウィンドウスタイルを SetWindowLong関数で指定してやります。ボタンのウィンドウハンドルを取得するのにobjinfo関数を利用します。
// 太枠ボタン #include "user32.as" objsize 200, 40 button "枠強調ボタン", *jump hButton = objinfo(stat, 2) ; ウィンドウスタイルの取得と変更 GetWindowLong hButton, -16 SetWindowLong hButton, -16, stat | $1 *jump
さて、厳密にやると上のようになりますが、HSPに登場するボタンのウィンドウスタイルは、あらかじめ「WS_CHILD + WS_VISIBLE = $50000000」と分かっているので、GetWindowLong関数の部分は省略しても問題ないでしょう。
// ボタンのウィンドウスタイル変更サンプル (by Kpan) #include "user32.as" objsize 200, 40, 50 ; これは標準のボタン button "ふつーのボタン", *jump ; 太枠ボタン (BS_DEFPUSHBUTTON) button "枠強調ボタン (SetWindowLong)", *jump SetWindowLong objinfo(stat, 2), -16, $50000000 | $1 ; 太枠はsendmsg命令だけで実現可 button "枠強調ボタン (sendmsg)", *jump sendmsg objinfo(stat, 2), $F4 , $1 ; テキスト表示位置の変更 (BS_LEFT/BS_RIGHT/BS_TOP/BS_BOTTOM) ; $100=左寄り、$200=右寄り、$400=上寄り、$800=下寄り ; 複数個組み合わせれば「左下」に表示 button "テキスト位置変更ボタン", *jump SetWindowLong objinfo(stat, 2), -16, $50000000 | $100 | $800 ; 複数行テキスト・縦書き表示風にも (BS_MULTILINE) ; ボタンに収まるよう文字列を自動改行 (「\n」で手動改行) button "複数行\nボタン", *jump SetWindowLong objinfo(stat, 2), -16, $50000000 | $2000 ; フラットスタイルのボタン (BS_FLAT) ; Windows XP以降のビジュアルスタイル時は変化なし button "フラットボタン", *jump SetWindowLong objinfo(stat, 2), -16, $50000000 | $8000 stop *jump
このサンプルを元にしたボタンのウィンドウスタイルを変更するモジュールは、このページの最下部よりダウンロードできます。モジュールにしなければならないほど複雑なスクリプトではありませんが・・・ (^^;
Win32 API関数を利用して、chkbox命令で設置できるチェックボックスのウィンドウスタイルを変更してみるサンプルです。ボタンのウィンドウスタイル変更処理と同じです。
上のボタンのウィンドウスタイル変更にもあるように、現在のチェックボックスのウィンドウスタイルを取得し、それにプラスした新たなウィンドウスタイルを適用してやるわけですが、HSPに登場するチェックボックスのウィンドウスタイルは、「WS_CHILD + WS_VISIBLE + BS_AUTOCHECKBOX = $50000003」となっているので、GetWindowLong関数は省略します。
// チェックボックスのウィンドウスタイル変更サンプル (by Kpan) #include "user32.as" objsize 150, 40, 50 chkbox "ふつーのチェックボックス", x chkbox "右側にチェック項目", x SetWindowLong objinfo(stat, 2), -16, $50000003 | $20 ; $100=左寄り、$200=右寄り、$400=上寄り、$800=下寄り。 ; 複数個組み合わせて「右上」に。 chkbox "表示位置変更", x SetWindowLong objinfo(stat, 2), -16, $50000003 | $200 | $400 ; チェックボックスに収まるよう文字列を自動改行 (「\n」で手動改行) chkbox "複数行\nチェックボックスですー", x SetWindowLong objinfo(stat, 2), -16, $50000003 | $2000 ; フラットスタイル (Windows XP以降のビジュアルスタイル適用時は変化なし) chkbox "フラットチェックボックス", x SetWindowLong objinfo(stat, 2), -16, $50000003 | $8000
このサンプルを元にしたチェックボックスのウィンドウスタイルを変更するモジュールは、このページの最下部よりダウンロードできます。モジュールにしなければならないほど複雑なスクリプトではありませんが・・・ (^^;
チェックボックスというのは、内部的にはボタンオブジェクトです。HSPのbutton命令は、押した時にラベルにジャンプする機能を持っています。これをうまく利用して、チェックボックスのチェックの有無をリアルタイムで監視してみることにします。
下のサンプルは、チェックボックスにチェックが入っているとオブジェクトが使用可能な状態(有効化)になり、入っていないとグレー表示の使用不可な状態(無効)となるスイッチ処理が行われます。
オブジェクトの有効/無効の切り替えは、Win32 API関数のEnableWindow関数を使います。HSP2のllmod.as+obj.asで「objgray命令」というのが用意されてましたが、この関数をモジュール内で呼び出してただけです。HSP3でも「common\obj.as」に同じモジュール命令が用意されてます。
// チェックボックス監視サンプル (by Kpan) #include "user32.as" ; 普通にボタンを作成 button "切り替え", *check hButton = objinfo(stat, 2) ; ボタンのウィンドウスタイルを変更してチェックボックス化 sendmsg hButton, $F4, $3 ; チェックボックスにチェックを入れる (BM_SETCHECK) ; 第3パラに 0=チェックあり、1=チェックなし ; (標準のobjprm命令では制御できないため) sendmsg hButton, $F1, 1 pos , 50 objsize 100, 22 input x hInput = objinfo(stat, 2) combox y, , "HSP\n講座\nプログラミング\nサンプル" hCombox = objinfo(stat, 2) chkbox "チェックボックス", z hChkbox = objinfo(stat, 2) stop *check ; チェックボックスの状態を取得 (BM_GETCHECK) ; statに 0=チェックなし、1=チェックありが返る sendmsg hButton, $F0 value = stat title ""+value ; オブジェクトの使用可/使用不可の切り替え ; 第2パラが1だと有効化、0だと無効化 EnableWindow hInput, value EnableWindow hCombox, value EnableWindow hChkbox, value
ちなみに、入力ボックスとメッセージボックスについては、EnableWindow関数を使わず、sendmsg命令だけで有効無効の切り替えが可能です。(→入力ボックスの編集無効 を参照)
chkbox命令には、「チェックあり」と「チェックなし」の2つの状態が存在しますが、ここにもう1つ「不確定」の状態を加えた3つの状態を持つチェックボックスの設置です。sendmsg命令でウィンドウスタイルを変更してやります。
3つ目の状態は、チェックありのグレー表示(Windows XP以降のビジュアルスタイル適用時は四角いチェックマーク)で表現されます。注意点として、チェックボックスのデフォルト状態を指定するのに、通常ではあらかじめchkbox命令の状態保持変数に1を指定しておきますが、グレー表示の状態は指定できないのでsendmsg命令を使います。
// 3ステートチェックボックス作成サンプルソース (by Kpan) ; a = 1 ; チェックあり、になります ; a = 2 ; グレー表示チェックありになりません chkbox "3ステート", a ; 3ステートチェックボックス化 sendmsg objinfo(stat, 2), $F4, $6 ; objprm 0, 1 ; OK ; objprm 0, 2 ; × ; なので、グレー表示に変更したい場合 (BM_SETCHECK) // sendmsg objinfo(0, 2), $F1, 2 // a = 2 ; これも必要 button "チェック!", *check stop *check ; 0=チェックなし、1=チェックあり、2=グレー表示チェックあり が返る mes a
button命令で作成したボタンは、マウスをクリックするとへこんで、離すと元の状態に戻る、という一連の動きをします。ここでは、押した直後にへこんだまま、それを押すと元の状態に戻る、という2段階の動きをするトグルボタンを作成してみます。
で、実際使うのはボタンではなく、チェックボックス(chkbox命令)をうまく利用します。チェックボックスに「チェックが入っている=ボタンがへこんでいる」、「チェックが入っていない=ボタンが膨らんでいる」という考え方です。
Win32 API関数のSetWindowLong関数を利用して、チェックボックスのウィンドウスタイルを変更(BS_PUSHLIKE)してやります。
// トグルボタン作成サンプルソース1 (by Kpan) // chkbox命令を利用した手法 #include "user32.as" ; チェックボックスの状態保持変数に1を入れるとチェックが入る、つまり ; へこみボタンになります。設置後のオン/オフ制御は普通にobjprm命令を利用。 c2 = 1 chkbox "第壱番", c1 SetWindowLong objinfo(stat, 2), -16, $50000003 | $1000 chkbox "第弐番", c2 SetWindowLong objinfo(stat, 2), -16, $50000003 | $1000 pos , 100 button "御確認", *check stop ; 状態の確認。普通にチェックボックスの状態保持変数を確認しませう。 ; 0=チェックなし(膨らんでいる)、1=チェックあり(へこんでいる) *check title ""+c1+" / "+c2
このサンプルを元にしたトグルボタンの設置モジュールは、このページの最下部よりダウンロードできます。モジュールにしなければならないほど複雑な処理は必要ありませんが。(^ー^;
ついでに、chkbox命令ではなく、button命令のウィンドウスタイルを変更する方法です。この手法の場合だと、HSPのボタンラベルジャンプ機能を利用して、トグルの状態をリアルタイムで監視できます。
// トグルボタン作成サンプルソース2 (by Kpan) // button命令を利用した手法 #include "user32.as" button "OFF", *jump SetWindowLong objinfo(stat, 2), -16, $50000003 | $1000 ; 切り替え時のボタン表示文字列用 string = "ON", "OFF" stop *jump objprm 0, string.value value ^ 1 title ""+value
画像ボタン(イメージボタン)の作成です。「llmod.as」モジュールを利用してビットマップを貼り付けるbtnimg命令を利用する、あるいはマウスの動きを監視しながら標準命令を利用してボタン風処理を自前で用意する方法があります。(→参照、HSP開発wiki)
HSP3.2以降は、objimage命令という命令もサポートしてます。(下の文字色変更を参照)
ここでは、ボタンに貼り付けるビットマップファイルを実行ファイル内にリソースとして埋め込む、というHSP的には特殊な手法を行います。かなりめんどくさいです。リソースエディタ「Resource Hacker」を別途用意してください。
これで下準備が完了。1つのボタン用に1つのビットマップファイルを用意することになります。HSPのPACKFILE機能は利用しません。下が埋め込んだ画像を利用するためのコードです。モジュール+サンプルの形式になっています。
// ボタンにビットマップを貼り付けるモジュール (by Kpan) #module #uselib "user32" #cfunc LoadImage "LoadImageA" int, int, int, int, int, int #func SetWindowLong "SetWindowLongA" int, int, int #uselib "gdi32" #func DeleteObject "DeleteObject" int ; SetBitmap p1, p2 ; p1=ボタンのオブジェクトID ; p2=[リソース名]で指定した任意の数値 #deffunc SetBitmap int p1, int p2 hButton = objinfo (p1, 2) SetWindowLong hButton, -16, $50000000 | $80 hBitmap.i = LoadImage (hinstance, p2, , , , ) if hBitmap.i = 0 : return sendmsg hButton, $F7, , hBitmap.i i++ return ; ビットマップの開放 ; (※自動的に行われるので呼び出し不要) #deffunc DelBitmap onexit repeat i DeleteObject hBitmap.cnt loop return #global ; 以下、サンプル ; 画像を埋め込んだランタイムファイルをパックオプションで指定 #packopt runtime "hogehoge.hrt" objsize 200, 100 ; 表示文字列は指定しても意味ないので無指定 button "", *dummy ; 貼り付け。ボタンのオブジェクトID、「リソース名」の数値を指定。 SetBitmap stat, 1 stop *dummy
で、これをスクリプトエディタ上でコンパイル実行しても、ボタンに何の変化も現れません。これは実行ファイルにならないと効果を確認できない代物です。また、ビットマップの貼り付けに失敗しても別にエラーはでません。[実行ファイル自動作成]で実行ファイルを出力して、動作確認してください。
※注意: ビットマップを貼り付けたボタンは、Windows XP環境のビジュアルスタイル適用下でも必ずクラシックスタイルで表示される仕様になっています。
ボタンオブジェクト上の文字の色のみ変更します。ただ、純粋に文字色だけを変更できる機能(Win32 API関数)というのは存在しません。ボタンのデザインそのものを自前でぜんぶ描画する必要があります。通常の膨らんでる状態と、押されてへこんでる状態の2パターンのイメージを用意して交互に表示する形です。HSP 3.2以降で対応したobjimage命令はこの処理を支援する命令です。
まずはWin32 API関数のDrawFrameControl関数を利用してクラシックスタイルのボタンデザインを描画するサンプルです。文字の描画処理はHSPの標準命令で行うようにしてるので、文字色以外にも文字のフォント、表示サイズ、表示位置なんかを自分で指定します。DrawFrameControl関数の第2パラメータにあるRECT構造体は、HSPにはない概念ですがboxf命令のパラメータを想像してください。
// ボタンの文字色変更 (クラシックスタイルボタン) by Kpan // ! HSP 3.2以降 #include "user32.as" #define DFC_BUTTON $0004 #define DFCS_BUTTONPUSH $0010 ; プッシュボタン #define DFCS_PUSHED $0200 ; 押された状態 ; 仮想画面 (実際にはbuffer命令を利用) screen 1 ; フォントと文字色指定 moji = "押!" font "MS UI Gothic", 70, 1 | 16 color $FF ; 通常のボタンデザインを描画 RECT = 0, 0, 100, 100 DrawFrameControl hdc, varptr(RECT), DFC_BUTTON, DFCS_BUTTONPUSH pos 6, 14 mes moji ; 押された状態のボタンデザインを描画 RECT = 0, 100, 100, 200 DrawFrameControl hdc, varptr(RECT), DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_PUSHED pos 7, 115 ; 1ドットずらしてる mes moji ; メインウィンドウ screen 0 title "クラシックスタイルなボタン by Kpan" objsize 100, 100 objimage 1, 0, 0, 0, 100 pos 100, 100 button "", *jump *jump
Windows XPからコントロール(オブジェクト)のデザインインターフェイスとして新たにビジュアルスタイル(Windows XPは「Luna」、Vista/7は「Aero」)が採用され、上のサンプルにあるような無機質な灰色風デザインから、グラデーションがかったグラフィカルなデザインになってます。Windows XP以降には、ビジュアルスタイルの描画処理を担当する「UxTheme.dll」というライブラリがシステムに用意されてるので、これを呼んでビジュアルスタイルなボタンデザインを描画するサンプルです。
// ボタンの文字色変更 (ビジュアルスタイルボタン) by Kpan // ! HSP 3.2以降 & Windows XP以降 #uselib "UxTheme" #func OpenThemeData "OpenThemeData" int, wstr #func DrawThemeBackground "DrawThemeBackground" int, int, int, int, int, int #func CloseThemeData "CloseThemeData" int #define BP_PUSHBUTTON 1 #define PBS_NORMAL 1 ; 通常状態 #define PBS_HOT 2 ; マウスカーソルが上にある状態 #define PBS_PRESSED 3 ; 押された状態 ; Windows OS簡易チェック if varptr(OpenThemeData) = 0 { dialog "Windows XP以前の環境なのでダメ" stop } ; 仮想画面 (実際にはbuffer命令を利用) screen 1 ; ビジュアルスタイルのテーマハンドルを開く OpenThemeData hwnd, "BUTTON" if stat = 0 { dialog "ビジュアルスタイルが無効状態なのでダメ" stop } hTheme = stat moji = "ボタンだよーん" font "MS UI Gothic", 12, 1 ; 通常のボタンデザインを描画 RECT = 0, 0, 100, 100 DrawThemeBackground hTheme, hdc, BP_PUSHBUTTON, PBS_NORMAL, varptr(RECT) color $FF pos 15, 45 mes moji ; 押された状態のボタンデザインを描画 RECT = 0, 100, 100, 200 DrawThemeBackground hTheme, hdc, BP_PUSHBUTTON, PBS_PRESSED, varptr(RECT) color 0, $FF pos 15, 145 mes moji ; マウスカーソルがオブジェクト上にある状態のボタンデザインを描画 RECT = 0, 200, 100, 300 DrawThemeBackground hTheme, hdc, BP_PUSHBUTTON, PBS_HOT, varptr(RECT) color $FF, $FF pos 15, 245 mes moji ; ビジュアルスタイルのテーマハンドルを解放 CloseThemeData hTheme ; メインウィンドウ screen 0 title "ビジュアルスタイルなボタン by Kpan" objsize 100, 100 objimage 1, 0, 0, 0, 100, 0, 200 pos 100, 100 button "",*jump *jump
おまけで、外枠を描画するDrawEdge関数を利用したツールバー風ボタンのサンプルです。
// ツールバー風ボタン by Kpan // ! HSP 3.2以降 #include "user32.as" #define BDR_SUNKENOUTER $0002 #define BDR_RAISEDINNER $0004 #define BF_RECT $000F ; 仮想画面 (実際にはbuffer命令を利用) screen 1 syscolor 15 boxf 0, 0, 150, 150 // 枠 RECT = 0, 50, 50, 100 DrawEdge hdc, varptr(RECT), BDR_SUNKENOUTER, BF_RECT RECT = 0, 100, 50, 150 DrawEdge hdc, varptr(RECT), BDR_RAISEDINNER, BF_RECT pos 50, 0 gcopy 1, 0, 0, 50, 150 pos 100, 0 gcopy 1, 0, 0, 50, 150 font "MS UI Gothic", 30, 1 | 2 | 16 gmode , 40, 40 // 赤1 color $FF circle 10, 10, 40, 40 pos 13, 9 color $FF, $FF, $FF mes "1" pos 6, 56 gcopy 1, 5, 5 pos 5, 105 gcopy 1, 5, 5 // 青2 color 0, 0, $FF circle 60, 10, 90, 40 color $FF, $FF, $FF pos 64, 9 mes "2" pos 56, 56 gcopy 1, 55, 5 pos 55, 105 gcopy 1, 55, 5 // 黄3 color $FF, $FF circle 110, 10, 140, 40 pos 113, 9 color $FF, $FF, $FF mes "3" pos 106, 56 gcopy 1, 105, 5 pos 105, 105 gcopy 1, 105, 5 ; メインウィンドウ screen 0 title "ツールバー風ボタン by Kpan" syscolor 15 boxf objsize 50, 50 objimage 1, 0, 0, 0, 50, 0, 100 pos 50, 50 button "", *jump objimage 1, 50, 0, 50, 50, 50, 100 pos 100, 50 button "", *jump pos 150, 50 objimage 1, 100, 0, 100, 50, 100, 100 button "", *jump *jump
ラジオボタン(別名、オプションボタン/ラジオボックス)の設置です。ラジオボタンというのは、複数用意されている丸い形状の項目から1つだけ選択できるものです。HSPの標準命令には存在しないオブジェクトですが、内部的にはボタンコントロールの見た目を変えたにすぎません。
ここでは、HSPでのラジオボタン作成法としてよく紹介されていたbutton命令を使わず、chkbox命令のウィンドウスタイルを変更する新手法を紹介します。
; 状態保持変数に1を入れたチェックボックス(ラジオボタン)に ; 黒丸チェックが入ります。ここでは2番目。 s2 = 1 chkbox "あ", s1 sendmsg objinfo(stat, 2), $F4, $9 chkbox "い", s2 sendmsg objinfo(stat, 2), $F4, $9 chkbox "う", s3 sendmsg objinfo(stat, 2), $F4, $9
さて、上のようにサクっと表示できたスクリプトですが、これはウィンドウ上にラジオボタンのグループが唯一1つしか存在しない時だけ有効で、このまま同じ処理を繰り返しても、ただ単に選択肢がどんどん増えていくだけです。
もし、ラジオボタンのグループが複数ある場合は、1つの方法として「グループ化」という処理を利用します。グループの1番最初のチェックボックスは、ラジオボタン化($50000000+$9)するついでに、グループ化宣言($20000)を行う必要があるので、SetWindowLong関数を呼びます。それ以降は、普通にsendmsg命令でラジオボタン化($9)します。
Windowsはグループ化を宣言したオブジェクトから次にグループ化を宣言するオブジェクトの直前までを1つのグループと判断してくれます。
// ラジオボタン表示サンプルスクリプト (by Kpan) #include "user32.as" ; 1番目のグループ x1 = 1 chkbox "あ", x1 SetWindowLong objinfo(stat, 2), -16, $50000009 | $20000 chkbox "い", x2 sendmsg objinfo(stat, 2), $F4, $9 chkbox "う", x3 sendmsg objinfo(stat, 2), $F4, $9 ; 2番目のグループ ; これにより、上とは別動作になるのであーる pos , 80 y3 = 1 chkbox "I", y1 SetWindowLong objinfo(stat, 2), -16, $50000009 | $20000 chkbox "II", y2 sendmsg objinfo(stat, 2), $F4, $9 chkbox "III", y3 sendmsg objinfo(stat, 2), $F4, $9 ; 3番目のグループ ; トグルボタン型($1000)ラジオボタン(チェックあり=へこみボタン) pos , 160 z2 = 1 chkbox "A", z1 SetWindowLong objinfo(stat, 2), -16, $50000009 | $1000 | $20000 chkbox "B", z2 SetWindowLong objinfo(stat, 2), -16, $50000009 | $1000 chkbox "C", z3 SetWindowLong objinfo(stat, 2), -16, $50000009 | $1000 pos , 250 button "チェック!", *check stop ; チェックのあるラジオボタンを取得 (もっとスマートな確認手段は・・・) ; 1つ1つのオブジェクトのチェックの有無を確認。 ; statに1が返ると「チェックあり」ということで、そのオブジェクトIDを表示。 *check ; グループ1用 repeat 3, 0 ; BM_SETCHECK sendmsg objinfo(cnt, 2), $F0 if stat : mes cnt loop ; グループ2用 repeat 3, 3 sendmsg objinfo(cnt, 2), $F0 if stat : mes cnt loop ; グループ3用 (トグルボタン型) repeat 3, 6 sendmsg objinfo(cnt, 2), $F0 if stat : mes cnt loop
このサンプルを元にしたHSP3向けラジオボタンの設置モジュールを、このページの一番下にて公開してます。
グループボックス(四角い枠)の設置です。HSPの標準命令にはありませんが、グループボックスというのはボタンの見た目を変えただけです。以下のサンプルは、あくまでグループボックス自体が表示されるだけです。HSPにはグループボックスのサンプルコード(sample\basic\groupbox.hsp)が一応用意されていますが、オブジェクト内の表示が化けるバグがあります。
※注意!
下のサンプルは、OSやら環境やらで表示の挙動が異なり、オブジェクトが置くとおかしくなるためダメダメ。HSP2時代からグループボックスの設置はどーもこーもいかん・・・?
(*_*;
// グループボックス・・・まったく使えんよ。。。失敗例 #uselib "user32" #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int ;ポイント!? 表示化けの原因であるウィンドウの 「WS_CLIPCHILDREN」;スタイル を取り除く処理を Windows API 使って行います。SetWindowLong hwnd, -16, GetWindowLong (hwnd, -16) ^ $2000000; 普通にグループボックスの位置と大きさ pos 10, 10 objsize 200, 100 ; ボタンではなくチェックボックスを使う。(xはダミー変数) chkbox "グループボックスでっせ!", x ; グループボックスに変更。objinfo関数 の第1パラにオブジェクトID。 sendmsg objinfo(stat, 2), $F4, $7 ; [おまけ] グループボックスの表示文字列の位置を変更したものを作成 ; したい場合は、sendmsg命令 は使えません。$200=右端、$300=中央。 chkbox "ここの位置ね", x SetWindowLong objinfo(stat, 2), -16, $50000007 | $200
というわけで、オブジェクトではないですが、グループボックス「風」の枠を描画するモジュールをこのページ最下部からダウンロードできます。(素直にline命令で、線を1本1本描画してもいいところを、わざわざWin32 API関数で・・・ ^ー^;
このページで紹介しているいくつかのサンプルスクリプトに基づいたモジュールです。ボタンとチェックボックスのウィンドウスタイル変更、トグルボタン作成、ラジオボタン作成、グループボックス「風」の枠表示、の4ファイルを含んでいます。(HSP 3.x用)
<< オブジェクト 9 | HSP3 オブジェクト | オブジェクト 2 >>
Copyright © 2005-2012 Kpan. All rights reserved.