@ReadMe_modules.txt

doclib\ @ReadMe_modules.txt

■ このドキュメントについて       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
   alGetLoopCountalalIsShown関数を追加。
 ・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_setTimerEnginetimer_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
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ・リリース。



┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳
┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻