/*------------------------------------------------------------------------------ メディアウィンドウ コードネーム:mediawindow(id:setplay2_11x_mw_userF / lot:20061102) (めでぃあぱれっと) なでしこによるグラフィカルなMCI丸投げタイプのメディアプレイヤー MCIがサポートできない圧縮形式を利用した mpegファイルは再生できないことがあります。 コードネームを変更しました。 UIとメディアの再生部分を最適化します。 ------------------------------------------------------------------------------*/ //!変数宣言は必要 !母艦設計=「母艦の可視はオフ」 !タイトル=「メディアウィンドウ」 !アプリバージョン情報=「MediaWindow ver 0.02」 !アプリ説明=「{\n}{\t}ファイルをアイコンで表示するメディアプレイヤーです。{\n}{\t}プレイリストの作成機能なども追加予定...{\n}{\t}アイコンにマイクロソフトさんの素材を使わせていただいています。{\n}」 !INIファイル=「{母艦のパス}mp.ini」 !アイコンアドレス=「MSicons_XP256.png」//_w !基本色=$000000 !再生対象拡張子=「*.wav;*.mp3;*.mid;*.midi;*.wma」 !再生対象ビデオ=「*.avi;*.mpg;*.mpeg;*.wmv;*.mp2」 !代替文字1=「[@@@67856110@@@]」//コンマ 文字サイズ=9.5 線色=「{基本色}」 線太さ=4 取り扱いファイルとは文字列=「{マイミュージック}」 アクティブフォルダとは文字列=「」 アクティブリストとは配列 実行キーとは整数 テキストハンドルとは整数 表示Xとは整数 表示Yとは整数 時間とは文字列 最終時間とは文字列 リストバッファとは配列 リストメモリとは配列 状態とは文字列=「wait」 再整列フラグとは整数=0 拡張子バッファとは文字列 階層とは整数=0 過去セレクタとは配列=「」 直前フォルダとは文字列=「」 /* ファイルキャッシュとは文字列=「」 キャッシング上限とは整数=10 キャッシュインデックスとは文字列=「」 */ //ステータス statとは文字列="wait..."; //UIエントリ 母艦ステータスとはステータスバー 母艦ステージとはパネル 母艦スペーサーとはパネル シークバーステージとはパネル メインリストとはリストビュー サブリストとはエディタ アイコンバッファとはイメージリスト シークバーとはスムーズプログレスバー メディアウィンドウとはフォーム //オプショナルUIエントリ //表示非表示をきりかえれるようにしてください /* アドレスセクションとはパネル プレイセクションとはパネル プレイリストセクションとはパネル ドキュメントセクションとはパネル */ 制御タイマーとはタイマー 「{母艦のパス}」へ作業フォルダ変更 開始処理。 #設定 #Menu 「 ,mf,ファイル(&F) -,f1,フォルダを開く(&O),Ctrl+O,,フォルダオープン -,fe,閉じる(&X),ESC,,終わる ,mh,ヘルプ(&H) -,h1,{タイトル}について(&A),,,アバウト -,h2,Debug[リストメモリ],,,リストメモリでメモ記入 -,h3,Debug[リストバッファ],,,リストバッファでメモ記入 -,h4,Debug[過去セレクタ],,,過去セレクタでメモ記入 」をメニュー一括作成 /* */ #Style and Setting 母艦について タイトルは「{タイトル}」 母艦を中央移動 Xは表示X Yは表示Y メディアウィンドウについて 可視はオフ タイトルは「{母艦ハンドル}_MediaWindow」 背景色は黒色 メディアウィンドウを中央移動 母艦ステータスについて レイアウトは「下」 可視はオフ // アイコンバッファについて 画像W=32 画像H=32 一括追加(アイコンアドレス) メインリストについて 画像設定(アイコンバッファ) 「アイコン」にスタイル設定 親部品は母艦ステージ レイアウトは「全体」 背景色は白色 文字色は黒色 ドラッグモードはオン サブリストについて 親部品は母艦ステージ レイアウトは「全体」 テキストは「」 背景色は白色 文字色は黒色 編集はオフ シークバーについて Wは1900 値は100 親部品はシークバーステージ レイアウトは「全体」 母艦スペーサーについて 可視はオフ 母艦ステージについて レイアウトは「全体」 スタイルは「枠なし」 シークバーステージについて レイアウトは「下」 スタイルは「凹」 高さは16 制御タイマーについて 値は150 #Ivent-------------------------------------------------------------------------- 母艦の閉じた時は〜 終了処理 /* 「本当に閉じますか?」と二択 もしそれがはいならば、 終了処理 */ 母艦のサイズ変更した時は〜 もし再整列フラグが0ならば、 再整列フラグ=1 メディアウィンドウの閉じた時は〜 セレクトナンバー=0 実行キー=1 再生制御 メディアウィンドウのサイズ変更した時は〜 もし(取り扱いファイル!=「」)ならば、 エラー監視 "put music destination at 0 0 {メディアウィンドウのクライアントW} {メディアウィンドウのクライアントH}"をMCI送信 エラーならば、 ステータス更新 メインリストのキー離した時は〜 セレクトナンバー=メインリストの値 もし((メインリストの押された仮想キー)=13)ならば、 再生制御 stat=メインリストの値 ステータス更新 メインリストのクリックした時は〜 セレクトナンバー=メインリストの値 メインリストのダブルクリックした時は〜 セレクトナンバー=メインリストの値 再生制御 シークバーのマウス離した時は〜 bf2=シークバーのマウスX bf=((シークバーの最大値)*((bf2)/(シークバーのW)))の整数部分 もし(取り扱いファイル!=「」)ならば、 エラー監視 "seek music to {bf}"をMCI送信。 "play music repeat"をMCI送信 もし(状態=「stop」)ならば、 "pause music"をMCI送信。 エラーならば、 stat="MCIエラー" ステータス更新 シークバーのマウス移動した時は〜 シークバーのポケット=シークバーのマウスX シークバーのポケット=((シークバーの最大値)*((シークバーのポケット)/(シークバーのW)))の整数部分 シークバーのポケット=「{(((シークバーのポケット*0.001)/60)の整数部分)を2でゼロ埋め}:{(((シークバーのポケット*0.001)%60)の整数部分)を2でゼロ埋め}」 シークバーのヒントはシークバーのポケット 制御タイマーの時満ちた時は〜 シークバーの値は0 もし(取り扱いファイル!=「」)ならば、 エラー監視 時間="status music position"をMCI送信。 シークバーの値は時間 時間=「{(((時間*0.001)/60)の整数部分)を2でゼロ埋め}:{(((時間*0.001)%60)の整数部分)を2でゼロ埋め}」 最終時間=「{(((シークバーの最大値*0.001)/60)の整数部分)を2でゼロ埋め}:{(((シークバーの最大値*0.001)%60)の整数部分)を2でゼロ埋め}」 母艦のタイトル=「{取り扱いファイルのファイル名抽出} - {時間}/{最終時間}」 エラーならば、 stat="MCIエラー" ステータス更新 違えば、 母艦のタイトル=「{タイトル}」 もし再整列フラグが1ならば、 再整列フラグ=2 サブリストの可視はオン 0秒待つ メインリストについて 可視はオフ 「リスト」にスタイル設定 0秒待つ 「アイコン」にスタイル設定 可視はオン メインリストに注目 0秒待つ サブリストの可視はオフ 再整列フラグ=0 #表示 #onView------------------------------------------------------------------------- 母艦の可視はオン 0.1秒待つ 母艦の終了可能は0 取り扱いファイルに作業フォルダ変更 リスト作成 実行キー=1 状態=「stop」 0.1秒待つ 制御タイマーの開始 取り扱いファイル=「」 #------------------------------------------------------------------------------- # Function #------------------------------------------------------------------------------- *データ再生 アクティブフォルダ=作業フォルダ もし(実行キー==0)ならば、 セレクトナンバー=-2 もし(セレクトナンバー>0)ならば、 stat=「ファイルを開いています...」 ステータス更新 もし(取り扱いファイル!=「」)ならば、 停止発信 ファイル閉鎖発信 取り扱いファイル=「{リストバッファ[セレクトナンバー]}」 取り扱いファイル=取り扱いファイルの「{代替文字1}」を「,」に置換 拡張子バッファ=取り扱いファイルから拡張子抽出 拡張子バッファ=拡張子バッファを小文字変換 ファイル展開発信 ファイルタイトル=「{取り扱いファイルからファイル名抽出}」 もしそれが空でなければ 再生発信 違えば、もし((セレクトナンバー>(-2))&&(取り扱いファイル!=「」))ならば、 もし状態が「stop」ならば、 再生発信 stat=「再生...」 違えば、 stat=「一時停止...」 停止発信 ステータス更新 *再生制御 メインリストの有効は0 上位フォルダ移動 フォルダ移動 メインリストの有効は1 データ再生 実行キー=1 メインリストに注目 //選択位置復帰 *再生発信 エラー監視 もし(再生対象ビデオで0から拡張子バッファを文字検索)ならば、 メディアウィンドウのタイトルは「{ファイルタイトル}」 メディアウィンドウの可視はオン メディアウィンドウを最前面 「window music handle {メディアウィンドウのハンドル}」をMCI送信。 "put music destination at 0 0 {メディアウィンドウのクライアントW} {メディアウィンドウのクライアントH}"をMCI送信 「play music repeat」をMCI送信 母艦のタイトル=「{取り扱いファイル}」 stat=「再生...」 状態=「play」 エラーならば、 stat="MCIエラー:再生命令" 取り扱いファイル=「」 *停止発信 エラー監視 "pause music"をMCI送信。 メディアウィンドウの可視はオフ 状態=「stop」 エラーならば、 stat="MCIエラー:停止命令" 取り扱いファイル=「」 *ファイル展開発信 エラー監視 「open "{取り扱いファイル}" alias music type mpegvideo wait」をMCI送信。 「set music time format milliseconds」をMCI送信。 「status music length」をMCI送信。 シークバーの最大値はそれ エラーならば、 stat="MCIエラー:ファイル開く" 取り扱いファイル=「」 *ファイル閉鎖発信 エラー監視 "close music"をMCI送信。 エラーならば、 stat="MCIエラー:ファイル閉じる" 取り扱いファイル=「」 *フォルダ移動 もし(セレクトナンバー>0)ならば、 選択位置記憶 取り扱いフォルダ=「{作業フォルダ}{リストバッファ[セレクトナンバー]}」 取り扱いフォルダ=取り扱いフォルダの「{代替文字1}」を「,」に置換 取り扱いフォルダ=取り扱いフォルダの終端パス追加 取り扱いフォルダのフォルダ存在 もしそれが1ならば、 実行キー=0 取り扱いフォルダに作業フォルダ変更 リストバッファ=「」 階層=階層+1 リスト作成 *上位フォルダ移動 直前フォルダ=作業フォルダ 取り扱いフォルダ=「」 もしメインリストの値が0ならば、 フォルダバッファ1=作業フォルダの終端パス削除 フォルダバッファ1=フォルダバッファ1の「\」を「{\n}」に置換 フォルダカウント1=フォルダバッファ1の行数 フォルダバッファ1を反復 もし(回数=1)ならば、 取り扱いフォルダ=それ 違えば、もし(回数<フォルダカウント1)ならば、 取り扱いフォルダ=取り扱いフォルダ&「\」&それ 取り扱いフォルダ=取り扱いフォルダの終端パス追加 取り扱いフォルダのフォルダ存在 もしそれが1ならば、 実行キー=0 取り扱いフォルダの終端パス追加 取り扱いフォルダに作業フォルダ変更 リストバッファ=「」 階層=階層-1 リスト作成 *リスト作成 もしリストバッファが「」ならば、 一覧要求 stat="リストを作成しています" ステータス更新 メインリストに「,0,../,5」を一括作成 メインリストに(リストメモリ)を一括追加 stat="リストアップ完了!" ステータス更新 選択位置復帰 *一覧要求 stat="HDDに対象ファイルの一覧を要求中..." ステータス更新 リストバッファ=「{フォルダ列挙}」 リストバッファ=「{リストバッファ}{\n}{再生対象拡張子のファイル列挙}」 リストバッファ=「{リストバッファ}{\n}{再生対象ビデオのファイル列挙}」 stat="リストのクリーニング中..." ステータス更新 リストバッファ=リストバッファの「../{\n}」を「」に置換 リストバッファ=リストバッファの「./{\n}」を「」に置換 リストバッファ=リストバッファの「,{\n}」を「{\n}」に置換 リストバッファ=リストバッファの「{作業フォルダ}{\n}」を「」に置換 リストバッファ=リストバッファの「,」を「{代替文字1}」に置換 リストバッファ=リストバッファの配列上下空行削除 リストバッファ=リストバッファの「{\n}{\n}」を「{\n}」に置換 リストバッファ=リストバッファの「{\n}{\n}」を「{\n}」に置換 リストバッファ=リストバッファの「{\n}{\n}」を「{\n}」に置換 stat="リストの整理中..." ステータス更新 リストメモリ=「」 リストバッファを反復 バッファ2=それ バッファ2=バッファ2の「{代替文字1}」を「,」に置換 バッファ2=バッファ2の「\"$」を「」に正規表現置換 バッファ2=バッファ2の「\"*」を「」に正規表現置換 バッファ2のフォルダ存在 バッファ3=それ バッファ2=バッファ2の「{\n}」を「」に置換 バッファ2=バッファ2からファイル名抽出 バッファ2=バッファ2の「,」を「、」に置換 バッファ1=「」 もしバッファ3が1ならば、 リストメモリに「,{回数},{バッファ2},5,5」を配列追加 違えば、 バッファ1=バッファ2から拡張子抽出 バッファ1=バッファ1を小文字変換 もし(再生対象ビデオで0からバッファ1を文字検索)ならば、 リストメモリに「,{回数},{バッファ2},2,2」を配列追加 違えば、もし(再生対象拡張子で0からバッファ1を文字検索)ならば、 リストメモリに「,{回数},{バッファ2},0,0」を配列追加 違えば、 リストメモリに「,{回数},{バッファ2},0,3」を配列追加 もし、((回数%32)==0)ならば、 0秒待つ リストバッファ=「,0,../,5{\n}{リストバッファ}」 *選択位置記憶 fd=-1 nb=0 name=作業フォルダの「,」を「{代替文字1}」に置換 (過去セレクタ)を反復 もし(それ[0][0]==name)ならば、 fd=それ[0][1] nb=回数-1 もし(fd== -1)ならば、 過去セレクタに"{name},{セレクトナンバー}"を配列追加 違えば、 過去セレクタ[nb]="{name},{セレクトナンバー}" /* 過去セレクタ[階層]=「{取り扱いフォルダ},{セレクトナンバー}」 */ *選択位置復帰 fd=-1 name=作業フォルダの「,」を「{代替文字1}」に置換 (過去セレクタ)を反復 もし(それ[0][0]==name)ならば、 fd=それ[0][1] もし(fd!= -1)ならば、 もし(fd<=(リストメモリの要素数))ならば、 メインリストの値=fd 再整列フラグ=1 /* もし階層<0ならば、 階層=0 もし((過去セレクタ[階層]!=「」)&&(過去セレクタ[階層]!=0)&&(過去セレクタ[階層]<=(リストメモリの要素数)))ならば、 メインリストの値=過去セレクタ[階層] */ *フォルダオープン 作業フォルダでフォルダ選択 もしそれが空でなければ、 それに作業フォルダ変更 リストバッファ=「」 リスト作成 *開始処理 INIファイルが存在 もし、それが1ならば、 エラー監視 「{INIファイル}」のINI開いてテキストハンドルに代入 テキストハンドルで「ウィンドウ」の「X」をINI読んで表示Xに代入 テキストハンドルで「ウィンドウ」の「Y」をINI読んで表示Yに代入 テキストハンドルで「ウィンドウ」の「W」をINI読んで母艦のWに代入 テキストハンドルで「ウィンドウ」の「H」をINI読んで母艦のHに代入 テキストハンドルで「ファイル」の「場所」をINI読んで取り扱いファイルに代入 テキストハンドルのINI閉じる エラーならば、 ダイアログタイトルは「{タイトル}:INIエラー」 stat="error : 設定ファイルの読み込みに失敗"; 「設定ファイルを正常に読み込めませんでした。」と言う。 *終了処理 制御タイマーの停止 stat="bye..."; ステータス更新 母艦のタイトルは「終了処理中...」 もし(取り扱いファイル!=「」)ならば、 停止発信 ファイル閉鎖発信 母艦を元通り 取り扱いファイル=作業フォルダ 母艦パスに作業フォルダ変更 「{INIファイル}」のINI開いてテキストハンドルに代入。 テキストハンドルで「ウィンドウ」の「X」に母艦のXをINI書く テキストハンドルで「ウィンドウ」の「Y」に母艦のYをINI書く テキストハンドルで「ウィンドウ」の「W」に母艦のWをINI書く テキストハンドルで「ウィンドウ」の「H」に母艦のHをINI書く テキストハンドルで「ファイル」の「場所」に取り扱いファイルをINI書く テキストハンドルのINI閉じる 母艦の終了可能は1 終わる。 *ステータス更新 母艦ステータス =「{stat}」 *アバウト 「{アプリバージョン情報}{\n}{\t}{アプリ説明}{\n}{\t}(c)2006 canot{\t}」という #------------------------------------------------------------------------------- # Class #------------------------------------------------------------------------------- ■スムーズプログレスバー +イメージ +最大最小プロパティ +キーボードプロパティ +値プロパティ ・最大値{=100} ・値{=0} ←値設定→値取得 デフォルト ・値{=0} ←バー描画処理 ・クリック位置{=0} ・{非公開}バー描画処理(HF)〜 線太さは1 塗り色はウィンドウ背景色 線色は塗り色 0,0からW+1,H+1へ四角 塗り色はアクティブ色 0,0から(W*(HF/最大値)),Hへ四角 //Program is end