■ このドキュメントについて MOD_AlphaLayer+TimerRepeat - version 2.6(全体)  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・a2d+AlphaLayer.hsp (※対応OS:Windows8以降) ・mod_TimerRepeat.hsp これらのモジュールについてのドキュメントです。 詳細は以下に記述しています。 ■ 各モジュールのヘルプ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・a2d+AlphaLayer.hs ・mod_TimerRepeat.hs 上記の.hsファイルを「C:\hsp3**\hsphelp」フォルダ内にコピーしてください。 HDLに組み込まれ、HSPエディタ上のF1ヘルプで参照出来るようになります。 ┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳ ┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻ ━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ モジュール名│a2d+AlphaLayer.hsp バージョン│2.4 作者│MIZUSHIKI (mail:suwa.mizushiki@gmail.com) │ Copyright(C) 2019-2024 MIZUSHIKI ━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 概要 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Artlet2Dモジュール(a2d.hsp)の仮想イメージを用いて、アルファブレンド半透明 子ウィ ンドウを作ることができます。 デフォルトではマウスクリック等のウィンドウメッセージを透過する仕様になっています が、コールバックを設定してサブクラス化し、ウィンドウメッセージを取得することも出 来ます。 ■ 注意 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・Windows 10 May 2020 Update(Ver.20H1)から非表示のウィンドウまたは非表示のレイヤ  ーに alalSetParent ,,1で非表示貼り付けをしても表示されてしまうことを確認しまし  た。  しかも、その状態はalalIsShownをしても非表示状態と認識されて0を返します。  なので、実際には見えているのにalalHideをしても消えません。  消すには一度alalShowを実行して、その後alalHideをしなければいけません。  Windows側の不具合に近いのではないかと思っているのですが、現状は注意して使って  いくしかない状態です。 ・Windows 8 以降でしか動作しません。  このモジュールを利用して作られた作品には「対応OS:Windows8以降」を記述願います。 ・開発環境は、HSP3.6β1以降を推奨。  デバッグ実行ランタイム(hsp3.exe)の改造が不要になります。 ■ 命令 / 関数 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ alalSetParent  Artlet2D仮想イメージをアルファレイヤー子ウィンドウとして描画先ウィンドウに貼り付ける alalWindow  Artlet2D仮想イメージを用いてレイヤードウィンドウを作成 alalRedraw  アルファレイヤーにArtlet2D仮想イメージを再描画する alalCallback  アルファレイヤーのWindowsメッセージ割り込み指定 alalShow  アルファレイヤー子ウィンドウを表示させる alalIsShown  アルファレイヤー子ウィンドウの表示状態を取得 alalHide  アルファレイヤー子ウィンドウを非表示にする alalAlpha  アルファレイヤーの透明度を設定する alalWidth  アルファレイヤー子ウィンドウのサイズ・位置設定 alalGetRect  アルファレイヤー子ウィンドウの左上・右下座標の取得 alalZtop  アルファレイヤーをZオーダー(表示順序)の一番上に配置する alalZbottom  アルファレイヤーをZオーダー(表示順序)の一番下に配置する alalZnext  アルファレイヤーのZオーダー(表示順序)を指定したウィンドウの下に配置する alalWindow_SetTransparent  alalWindowで作成したレイヤードウィンドウのクリック透過モードを変更 【Artlet2D拡張】 alCreateImageByAnimationFile  アニメーション画像ファイルから仮想イメージを作成 alGetFramesDelay  アニメーションのフレーム間の時間間隔を取得 alGetFramesCount  アニメーションのフレーム数を取得 alGetLoopCount  アニメーションのループ回数を取得 ■ 謝辞 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 参考:なたで様「レイヤードウィンドウ総合モジュール」   https://www.natade.net/lang/hsp/   (HSP | なたでラボ / モジュール )  ウィンドウの透過処理について、なたで様の「レイヤードウィンドウ総合モジュール」  を参考にさせて頂きました。ありがとうございます! 参考:nori様「GIFアニメサンプルスクリプト」   http://hsp.tv/play/pforum.php?mode=pastwch&num=75891   (HSPTV!掲示板 / HSPでGIFアニメーションの再生)  GIFアニメーションの再生の仕方を参考にさせていただきました。  ありがとうございます! モジュール:ぷま様「バイナリサーチ(BM法) bsearch」   http://hsp.tv/play/pforum.php?mode=pastwch&num=29717 (代替)   (HSPTV!掲示板 / sdim,bload命令について)  非常に速い検索が可能になりました。ありがとうございます! ■ 履歴  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ version 2.4 2024/ 1/ 5  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・alCopyImageToImage/ImageToScreenが高さ省略時正しくコピーされないバグを修正。 ・alalIsOnLayer関数が返り値を返さずエラーになることがあるバグを修正。 version 2.3 2022/11/16  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・alalWindow,alalWindow_SetTransparent関数を追加。 ・alalSetParent後のstatに子ウィンドウのウィンドウハンドルを格納するようにした。 ・alCreateImageByAnimationFileで画像を縦に並べたPNGファイルでもアニメーションと  して読み込みが可能になった。 ・alalAlphaで透明度変更後にalalRedrawしても透明度を維持するようにした。 ・重複コンパイル防止処理が機能していなかったバグを修正。 ・終了時のウィンドウ破棄し忘れを修正。 ・細かい箇所の変更と修正。 version 2.2 2021/ 6/25  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・Windows 10 May 2020 Update(Ver.20H1)のアプデ辺りから発生したバグに対処。   非表示状態で作成しても表示されてしまう。(一度VISIBLE→非VISIBLE処理が必要)   非表示の子レイヤーに張り付けた孫レイヤーが見えてしまう。    ↑プログラムで回避必要。(詳細:alalSetParentのHelp参照) ・CallWindowProcが定義されていなかったバグを修正。 version 2.1 2020/ 9/10  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・GIFアニメーションファイルの読み込みに対応。【Artlet2D拡張】   alCreateImageByAnimationFile   alGetFramesDelay   alGetFramesCount   alGetLoopCount ・alalIsShown関数を追加。 ・A2DのImage ID1つにつきアルファレイヤー1つじゃなくても利用できる裏技を内包。 ・デバイスコンテキストが一部解放されていなかった問題を修正。 ・未初期化変数の初期化処理を入れるよう修正。 ・alalWidthでサイズを0以下にすると以降再表示できなくなるバグを修正。 version 2.0 2020/ 6/ 6  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・命令を全面見直し(HSPのウィンドウを使わず自力でウィンドウを生成)。 version 1.1 2019/11/10  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・HSP3.5 で動かなくなっていたバグを修正。 version 1.0 2019/10/31  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・リリース。 ━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ モジュール名│mod_TimerRepeat.hsp バージョン│2.5 作者│MIZUSHIKI (mail:suwa.mizushiki@gmail.com) │ Copyright(C) 2019-2024 MIZUSHIKI ━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 概要 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一定間隔で実行するタイマー機能をrepeat~loopのような記述で簡単に利用することが出 来るようになります。 また、timer_ease命令を合わせて使うことで、時間変化によるイージング値を簡単に取得 出来るようになります。  □ モジュール内記述:mod_uniq.hsp - ver.1.1 □   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  指定した区間において、名前の被らないユニークな変数を定義します。  □ モジュール内記述:mod_waiton.hsp(+タイマーループ割り込み) - ver.1.2.2 □   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  中断中にタイマーループの指定時間が来たら適宜実行されるようになっています。  また、oncmd等の割り込みジャンプにも対応しています。   通常のwaitでは oncmd, onkey, onclick の割り込みジャンプが発生すると、return   で戻ってたときに待ち時間が残っていても次の行から処理が始まってしまいます。      timer_waitonは、残り時間があった場合は残りのぶん再waitします。      a2d+AlphaLayer.hsp でSetCallbackAlphaLayerを使いメッセージ割り込みを指定した   場合、マウスの通過でも wait/await の待機時間が無効化されてしまうため利用を推   奨します。     mod_TimerRepeat.hsp をインクルードした時点で、通常のwait命令がtimer_waitonの機  能で上書きされます。(waitと書いてもtimer_waitonの処理が実行されます。) ■ 命令 / 関数 ■  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ timer_repeat  タイマーループの始まりの場所を示す timer_loop  タイマーループの始まりに戻る timer_kill  タイマーループを終了させる timer_init  タイマーループ初期化処理(_init_end まで) timer_deinit  タイマーループ後始末処理 timer_break  タイマーループから抜けだしてタイマーも終了させる timer_continue  タイマーループをやり直す timer_cnt  タイマーループのカウンター timer_intervals  timer_repeat内で繰り返し間隔の取得 timer_getTimerTime  実行中のタイマーループの経過時間を取得 timer_setTimerSpeed  タイマーループの繰り返し間隔を変更 timer_getTime  ミリ秒タイマー timer_ease  タイマーループ内で時間変化によるイージング値の取得 geteaseT  時間変化によるイージング値を取得 timer_setTimerEngine  タイマーの実行タイミングを変更する(オート/マニュアル) timer_fire  タイマーのマニュアル実行時に確認/実行を行う。 ◆ mod_uniq.hsp - ver.1.1 ◆ uniq_start  uniq()のスコープ開始 uniq  ユニークな変数を定義 uniqN  N個外側のスコープのuniq()変数を取得 uniq_end  uniq()のスコープ終了 ◆ mod_waiton.hsp(+タイマーループ割り込み) - ver.1.2.2 ◆ timer_waiton  実行を一定時間中断する(タイマーループ割り込み+oncmd等の割り込みジャンプに対応) timer_awaiton  一定の時間で待つ(タイマーループ割り込み+oncmd等の割り込みジャンプに対応) timer_stop  プログラム中断(タイマーループ割り込みに対応) ■ 履歴  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ version 2.5 2024/ 1/ 5  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・(mod_uniq ver.1.1)uniq2~uniq9のコマンドを追加。 version 2.4 2022/11/16  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・timer_initを指定したとき初期化時に本体も実行されてしまうことがあるバグを修正。 ・timer_initの中で別IDのtimer_killをするとtimer_cntがバグるのを修正。 ・timer_fireにオプション値を追加。 version 2.3 2021/ 7/18  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・timer_repeatがいくつも連続して呼ばれている中で新規にtimer_init:を使用したとき  に既に稼働しているタイマーにも関わらず改めてtimer_init:内が実行されてしまう不  具合を修正。 ・timer_deinitの中でtimer_repeatを記述するとtimer_killなどで終了させたタイマー  にも関わらず終了が無かったことにされて続いてしまう不具合を修正。 version 2.2 2021/ 6/25  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・Windowsを起動したまま24.855日以上たつとtimer_easeの処理がバグる問題を修正。 version 2.1 2020/ 9/10  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・timer_repeatでp1(繰り返し間隔)を数値だけでなく配列も指定できるように変更。   (a2d+AlphaLayerのGIFアニメ再生の簡易化のため) ・timer_setTimerSpeedも数値だけでなく配列も指定できるように変更。 ・timer_getTimeの仕様変更。(gettime標準命令を諦めwinmm.dll-timeGetTimeを利用) ・未初期化変数の初期化処理を入れるよう修正。 (mod_waiton.hsp Ver.1.2.2) ・waiton系命令で必ず1(wait 1/await 1)以上待つように変更。 version 2.0 2020/ 1/ 3  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・HSP3Dishでも利用できるように変更。   ・WM_TIMER使用からwait書き換え式に変更。(精度も良くなった)   ・timer_easeで渡されたものが変数かどうかを自力読み取りするようにした。   ・timer_getTimeの数値をgettime、getreqから取得するようにした。 ・timer_setTimerEngine、timer_fireでタイマー実行のタイミングをコントロールでき  るようにした。 ・mod_uniq.hsp(ver.1.0)、mod_waiton.hsp+タイマーループ割り込み(ver.1.2.1)をモジ  ュール内に記述するようにした。 ・[名称変更]geteaseWithTime→geteaseT ・[バグfix]timer_continueの第1パラが必ず0になってしまうバグを修正。 version 1.1 2019/11/ 9  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・mod_waiton.hspを自動でインクルードするように修正。  (一緒に使う必要なくなったと思ったらそんなことなかった。) ・timer_setTimerSpeed命令の変数指定ミスを修正。 version 1.0 2019/10/31  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ・リリース。 ┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳ ┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻