【症状】MCIオブジェクトで動画が再生できない
【再現方法】
■MCIオブジェクト
・ファイル ←ファイル設定 →ファイル取得
・表示先ハンドル ←表示H設定 →表示H取得
・X ←X設定 →X取得
・Y ←Y設定 →Y取得
・W ←W設定 →W取得
・H ←H設定 →H取得
・タイムフォーマット ←TF設定 →TF取得 #{ms(ミリ秒)|msf(mm:ss:ff)|tmsf(t:mm:ss:ff)}
・長さ →長さ取得
・状態 ←状態設定 →状態取得 #{再生,playing|停止,stoped|一時停止,paused}
・位置 ←位置設定 →位置取得
・ミュート ←ミュート設定 →ミュート取得
・音量 ←音量設定 →音量取得
・右音量 ←右音量設定 →右音量取得
・左音量 ←左音量設定 →左音量取得
・速さ ←速さ設定 →速さ取得
・ループ{=0}
・元サイズ →元サイズ取得
・{非公開}動画か(V)~OR(V=「.avi」,OR(V=「.mpg」,OR(V=「.mpeg」,OR(V=「.wmv」,V=「.mov」))))
・範囲再生(AからBの)~
もし、ループがオンなら「play {名前} repeat from {A} to {B}」をMCI送信。
違えば「play {名前} from {A} to {B}」をMCI送信。
・{非公開}ファイル設定(FILE)~
もし、Fファイルが空でなければ名前をMCI閉じる
もし、(FILEが存在)でなければ「ファイルが存在しません」でエラー発生
「open "{FILE}" alias "{名前}" type mpegvideo」をMCI送信。
FファイルはFILE
もし、動画か(Fファイルから拡張子抽出)なら
元サイズ取得。
FWは_[2]
FHは_[3]
・{非公開}F表示H
・{非公開}表示H設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「window {名前} handle {V}」をMCI送信。
F表示H=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}表示H取得~
それ=F表示H
・{非公開}FX{=0}
・{非公開}FY{=0}
・{非公開}FW{=0}
・{非公開}FH{=0}
・{非公開}X設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {V} {Y} {W} {H}」をMCI送信。
FX=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}X取得~それ=FX
・{非公開}Y設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {V} {W} {H}」をMCI送信。
FY=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}Y取得~それ=FY
・{非公開}W設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {Y} {V} {H}」をMCI送信。
FW=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}W取得~それ=FW
・{非公開}H設定(V)~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「put {名前} destination at {X} {Y} {W} {V}」をMCI送信。
FH=V
違えば、「ファイルが動画ではありません」でエラー発生
・{非公開}H取得~それ=FH
・{非公開}元サイズ取得~
もし、動画か(Fファイルから拡張子抽出)なら
もし、Fファイルが空でなければ
「where {名前} source」をMCI送信。
「 」で区切る。
違えば、「ファイルが動画ではありません」でエラー発生
・閉じる~
もし、Fファイルが空でなければ名前をMCI閉じる。
Fファイルは空。
・{非公開}Fファイル
・{非公開}ファイル取得~それはFファイル
・{非公開}状態取得~
もし、Fファイルが空でなければ「status {名前} mode」をMCI送信。
違えば、それは空
・{非公開}状態設定(V)~
もし、Fファイルが空でなければ
もし、OR(V=「playing」,V=「再生」)なら
もし、自身→ループ=1なら「play {名前} repeat」をMCI送信。
違えば「play {名前}」をMCI送信。
もし、OR(V=「stoped」,V=「停止」)なら名前をMCI停止
もし、OR(V=「paused」,V=「一時停止」)なら「pause {名前}」をMCI送信。
・{非公開}TF設定(V)~「set {名前} time format {V}」をMCI送信。
・{非公開}TF取得~「status {名前} time format」をMCI送信。
・{非公開}位置設定(V)~
もし、Fファイルが空でなければ
F状態は状態
Vで条件分岐
「始め」なら「seek {名前} to start」をMCI送信。
「終わり」なら「seek {名前} to end」をMCI送信。
違えば「seek {名前} to {V}」をMCI送信。
状態は「{F状態}」
・{非公開}位置取得~
もし、Fファイルが空でなければ「status {名前} position」をMCI送信。
違えば、それ=0
・{非公開}音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} volume to {V}」をMCI送信。
・{非公開}音量取得~
もし、Fファイルが空でなければ「status {名前} volume」をMCI送信。
違えば、それ=1000
・{非公開}右音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} right volume to {V}」をMCI送信。
・{非公開}右音量取得~
もし、Fファイルが空でなければ「status {名前} right volume」をMCI送信。
違えば、それ=1000
・{非公開}左音量設定(V)~
もし、Fファイルが空でなければ「setaudio {名前} left volume to {V}」をMCI送信。
・{非公開}左音量取得~
もし、Fファイルが空でなければ「status {名前} left volume」をMCI送信。
違えば、それ=1000
・{非公開}Fミュート{=0}
・{非公開}ミュート設定(V)~
もし、Fファイルが空でなければ
もし、Vが1なら
「set {名前} audio all off」をMCI送信。
Fミュート=1
違えば
「set {名前} audio all on」をMCI送信。
Fミュート=0
・{非公開}ミュート取得~それ=Fミュート
・{非公開}速さ設定(V)~
もし、Fファイルが空でなければ「set {名前} speed {V}」をMCI送信。
・{非公開}速さ取得~
もし、Fファイルが空でなければ「status {名前} speed」をMCI送信。
違えば、それ=1000
・{非公開}長さ取得~「status {名前} length」をMCI送信。
●窓位置右下移動({グループ=?母艦}OBJを)
Pとは整数
P=タスクバー位置取得。
OBJについて
もし、P=「左」ならば、X=デスクトップW-デスクトップワークエリアW
違えば、X=デスクトップワークエリアW-W
もし、P=「上」ならば、Y=デスクトップH-デスクトップワークエリアH
違えば、Y=デスクトップワークエリアH-H。
#-----------------------------------------------------------------------
!APPBARDATA_TYPE=「long,long,long,long,long,long,long,long,long」
■APPBARDATA
・cbSize #{=36} #TEST
・hWnd
・uCallbackMessage
・uEdge
・Left
・Top
・Right
・Bottom
・lParam
PACK(APPBARDATA,AB_DAT,APPBARDATA_TYPE)。
#---------------------------------------
●タスクバー位置取得
もし、SHAppBarMessage(5,AB_DAT)ならば
UNPACK(AB_DAT,APPBARDATA,"long,long,long,long") #グループに戻す
TMPはAPPBARDATAのuEdge
TMPで条件分岐
「0」ならば、「左」で戻る。
「1」ならば、「上」で戻る。
「2」ならば、「右」で戻る。
「3」ならば、「下」で戻る。
違えば、「関数戻りエラー」という。
#-----------------------------------------------------------------------
●SHAppBarMessage(ID,{参照渡し}p)=DLL("shell32.dll",
"BOOL SHAppBarMessage(
LONG dwMessage, //タスクバー位置:&H5
LPPOINT pData
)")
#
http://www.winapi-database.com/Program/Shell/SHAppBarMessage.html
#-----------------------------------------------------------------------
start=1
●母艦設計
母艦のスタイルは「ツールウィンドウ」
母艦の可視はオフ
母艦はDtunes動画プレーヤー
別画面とはフォーム #★★ここに移動
その親部品は母艦
そのスタイルは「枠なし」 #★★追加
その表示 #★★追加:無くてもMCIで表示されるみたいだが念のため
最大化
母艦について
閉じた時は~テストを閉じる
母艦の可視はオン
テストとはMCIオブジェクト。
管理者権限取得
「player.ini」を読む
再生ファイル=それ
再生ファイルを動画再生 #●関数
母艦を中央移動
●動画再生(Fを)
#テストの状態は「停止」 #★追加:念のため
テストのファイルはF #テストのファイル設定
テストの表示先ハンドルは別画面のハンドル #★★括弧は不要。文字列でエラーになります
動画サイズ設定 #●関数
テストの状態は「再生」
●動画サイズ設定
SIZEとは配列=テストの元サイズ #ローカル変数
別画面のクライアントHはSIZE[3] #★★追加
別画面のクライアントWはSIZE[2] #★★追加
2回 #★★追加:スクロールバー回避用に二回行います(おまじないみたいなものです)
母艦のクライアントWはSIZE[2]
母艦のクライアントHはSIZE[3]
#ここまで
これで、
[エラー] ■MCIオブジェクト.nako.bak(91): 関数『MCI送信』の実行中にエラーが起きました。不正な浮動小数点数演算命令(関数)
[エラー] 評価式(0): (文)
[エラー] ■MCIオブジェクト.nako.bak(90): (もし)
[エラー] ■MCIオブジェクト.nako.bak(89): (もし)
[エラー] ■MCIオブジェクト.nako.bak(88): (もし)
[エラー] ■MCIオブジェクト.nako.bak(87): (関数定義)
[エラー] ■MCIオブジェクト.nako.bak(210): (代入)
[エラー] ■MCIオブジェクト.nako.bak(205): (関数定義)
[エラー] ■MCIオブジェクト.nako.bak(202): 関数『動画再生』の実行中にエラーが起きました。(関数)
このようなエラーが確認されています。
【要望】正直、なでしこの中身に詳しいわけではないので、とりあえずWindows10で再生できればいいです。
【バージョン】1.550
【その他】