>それともmciの再生速度の変更方法が間違っているのでしょうか
ソースを見ていないので間違っているかどうかが分かりませんが
mciでGIFの再生速度の変更というのは基本的には無理だと思った方が良いです。
少々強引な方法ですが、
Kpanさんのソースを改変して
経過時間を取得して再生位置がズレていたら
時間に合わせて再生位置を設定するという手法でやってみました。
; MCIによるGIFファイル表示サンプルソース (by Kpan) [HSP2/3]
///////////////////////////////////追加/////////////////////////////////////////////////////////////
#uselib "kernel32.dll"
#func GetTickCount "GetTickCount"
////////////////////////////////////////////////////////////////////////////////////////////////////
onexit *exit
dialog "gif;*.jpg", 16, "画像ファイル"
if stat = 0 : stop
mci "open \""+refstr+"\" alias A wait type mpegvideo style child parent "+hwnd+""
mci "put A window at 50 100 0 0"
///////////////////////////////////追加/////////////////////////////////////////////////////////////
mci "set A time format ms"; // 時間フォーマットをミリ秒単位にする
mci "status A length"; // 全体の長さを取得
all_ms = stat;
////////////////////////////////////////////////////////////////////////////////////////////////////
mci "play A repeat"
///////////////////////////////////追加/////////////////////////////////////////////////////////////
time_s = GetTickCount(); // 再生開始時間を取得
*playing
mci "status A position"; // 現在のシーク位置を取得
seek_pos = stat;
time_n = GetTickCount() - time_s; // 再生してからの経過時間を取得
if( seek_pos != time_n ) { // 経過時間とシーク位置が合わない場合
if( time_n >= all_ms ) {
// ループ時は再生開始時間を再取得
time_s = GetTickCount();
}
else {
// シーク位置を経過時間に合わせる
seek_pos = time_n;
mci "seek A to "+seek_pos;
}
}
await 10;
goto *playing;
////////////////////////////////////////////////////////////////////////////////////////////////////
*exit
mci "close A"
end
Kpanさんのコメントはほぼ削除して
追加した箇所だけコメントを入れておきました。
欠点としては時間を取得するときの精度が低い事と、
アニメーションをスキップする可能性があるので
場合によってはカクカクして見えることがあるかもしれません。