「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@769) [高] [詳細求む!]
@769■ (#2419) Windows 10でMCIオブジェクト再生ができない - BlueSky (2015-07-29 15:44) /高 未処理
【症状】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
【その他】


(#2433) 簡潔なソースでお願いします - クジラ飛行机 (2015-08-30 12:51) /高 詳細求む!
以下のようなソースでは問題なく実行できるようです。
==
"tools\\ki.wav"を"a"でMCI開く
"a"をMCI再生
===

問題を切り分けて再度、お願いします。

(#2419)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能