|
|||
|
■mciSendString |
■コラム 詳しく解説するのは億劫なので、簡単な説明ですが、十分お役に立てると思います。 ネットで検索すれば、多くの方の解説が色々出て来ますので、詳しくはそちらを参考にしてください。MCIは珍しく日本語の解説が多い手法です。 「mciSendString」とはString・・文字列を引数に指定することで、MCIデバイスに命令をするApi関数です。動画(Mpeg1/2、WMV、AVI)音楽(MP3、WMA、MIDI、WAV)ファイルを操作出来ます。 また、DVDの「VOB」ファイルも実体はMPEG2なので、MCI操作で再生だけなら可能です。 MCIデバイスを操作するには「mciSendString」とは別に「mciSendComand」もありますが、使いやすさでは文字列を渡すだけの「mciSendString」の方が一枚上手の様です。 MCIデバイスタイプには色々有りますが、type 「MPEGVideo」を指定しておけば、大方の環境で動作すると思われます。 |
|
|
private { Private 宣言 } mciError: LongInt; FMCIEriasName:String; FMCIDsphandle:integer FMCISpeed:String; public { Public 宣言 } end; var Form1: TForm1; //implementationの前に以下関数をインポートする必要が有ります。 //mciSendString関数をインポートする //mmSystemで無くDLL使うとPcha型キャスト不要 fnction mciSendString(lpstrCommand: string; lpSectorsPerCluster : string ; uReturnLength : Integer; hwndCallback : integer): integer;Stdcall; external 'winmm.dll' Name 'mciSendStringA'; implementation {$R *.DFM} ■MCIの色々な操作方法 ●MCIデバイスオープン //「MPEGVideo」を指定しておけば大方の環境で動作することでしょう。 //ファイル名をダブルクォーテーション「""」で囲むと長いファイル名にも対応します。 mciError := mciSendString('open "' + AFName +'" type MPEGVideo'+ ' alias '+FMCIEriasName, '', 0, 0) ; //aliasを指定すると以降alias名のみで操作出来ます。 //例では変数「FMCIEriasName」にて指定しています。 //上記関数が成功するとmciErrorに「0」が戻ります。 ●MCI 動画再生画面のHandle指定 //(FMCIDsphandle・・FormでもPanelでも指定出来ます。) mciSendString('window '+FMCIEriasName+' handle ' + IntToStr(FMCIDsphandle),'',0,0); ●MCI 動画再生領域の座標指定 //座標は数値なので、文字列に変換して渡す必要が有ります。 //DelphiではIntToStr()の様に使います。 mciSendString('put '+FMCIEriasName+' destination at ' +IntToStr(FMCIDspLeft)+' ' +IntToStr(FMCIDspTop)+' ' +IntToStr(FMCIDspWidth)+' ' +IntToStr(FMCIDspHeight),'',0,0); ●MCI 再生開始 //動画再生でfrom「0」指定をしないと、再生後直ぐ止まってしまいます。 mciError := mciSendString('play '+FMCIEriasName+' from '+IntToStr(0), '', 0, 0); ●MCI 再生停止 mciSendString('stop '+FMCIEriasName, '', 0, 0); ●MCI デバイス開放 //MCIデバイスを使用中止する時(Formの開放など)には必ずMciをCloseしなければ //なりません。 mciSendString('close '+FMCIEriasName, '', 0, 0); ●MCI 再生スピード設定 //値「1000」が標準のスピードになります。 //2倍速は2000、1/2倍速は500です。 mciSendString('set '+FMCIEriasName+' speed '+ FMCISpeed, '', 0, 0) ; ●MCI 再生位置Position取得 const Len: Cardinal = MAX_PATH; var BufPos:String; //初期化 BufPos := ''; SetLength(BufPos, Len); mciSendString('status '+FMCIEriasName+' Position ',BufPos, Len, 0) ; ●MCI 動画、曲の長さ取得 const Len: Cardinal = MAX_PATH; var BufLen:String; //初期化 BufLen := ''; SetLength(BufLen, Len); mciError:= mciSendString('status '+FMCIEriasName+' Length ',BufLen, Len, 0) ; ●MCI シーク // mciSendString('seek MCISound to '+IntToStr(APosition), '', 0, 0); //動画再生で上記シークさせると再生が止まってしまう為 //以下回路で、一旦StopさせてからPositionを指定して再生させること mciSendString('stop '+FMCIEriasName, '', 0, 0); //再生位置を指定してPkayさせる mciSendString('play '+FMCIEriasName+' from '+IntToStr(APosition), '', 0, 0); |
|
|
||