HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0127
てぃるとrepeat内でのlistbox処理5解決


てぃると

リンク

2007/1/27(Sat) 21:02:30|NO.5225

現在、軽量のメディアプレイヤーを作成中なのですが、
プレイリストをlistboxを使って作りたいと思いまして、がんばってみたのですが。。。
(下は抜き出したスクリプトです)


plist="" sdim sndurl,65536,100 pos 300,300:button gosub "+",*plus repeat redraw 2 if plist!memplist{ pos 0,0:listbox ike,100,plist memplist=plist } color 255,255,255:boxf color 0,0,0 pos 130,130:mes ike:mes plist redraw 1 await 10 loop *plus dialog "mp3;*.wav;*.mid;*.cda",16,"音楽ファイル" if stat=1{;選ばれた sndurl(sndurlcnt)=refstr dirlist mname,sndurl(sndurlcnt) plist+=mname pos 300,100 sndurlcnt+=1 } return

ファイル選択ダイアログで選んだファイルからファイル名だけを抜き出して、
それをlistboxに並べ、リストから選択ファイルを再生したいのですが、
なぜか選択肢を選択するとインデックス番号変数のikeに-1が代入されます。
そして、複数のファイルを登録すると、選択肢を選択することすらできなくなってしまいます。

まだ初心者なもので、オブジェクト制御等がよくわかりません。
原因を教えてくださると助かります。



この記事に返信する


As

リンク

2007/1/27(Sat) 22:08:55|NO.5226


//変数の初期化 plist="" sdim sndurl,256,100 //オブジェクト pos 300,300 : button gosub "+",*plus pos 0,0 : listbox ike,100,plist id_list=stat //オンメッセージ oncmd gosub *WM_COMMAND,$00000111 //リストボックスがクリックされたときジャンプ stop *plus //ファイルの選択 dialog "mp3;*.wav;*.mid;*.cda",16,"音楽ファイル" //選ばれた if stat=1{ sndurl(sndurlcnt)=refstr mname=getpath(sndurl(sndurlcnt),8) //ファイル名のみ plist+=mname+"\n" //"\n を追加すると 改行します。 pos 300,100 sndurlcnt+=1 //id_list に リストボックスのIDを入れる objprm id_list,plist gosub *draw //情報の描画 } return *WM_COMMAND //リストボックスがクリックされた if lparam = objinfo(id_list,2){ gosub *draw //情報の描画 } return *draw //情報の描画 //描画 redraw 0 color 255,255,255:boxf color 0,0,0 pos 130,130:mes ike:mes plist redraw 1 return

ひとつひとつどういう動作をしているのか F1 キーを押して確認してみてください^^
するとわかるとおもいます。



てぃると

リンク

2007/1/28(Sun) 16:16:49|NO.5270

返信ありがとうございます。
APIを使用したやつですか。。。僕はAPIの知識が無いのでよくわかりません;;

が、なんとなく分かったような気がします。
ですが、「なんとなく」なのでやっぱり分かりません('ロ`*)

11行目の、$00000111 が何を意味しているのか、検索してみてもよくわかりませんでした。
教えてください。。。

それから、スクリプト組んでいただいておいてなんですが、、、
やはりikeにはうまくインデックスが代入されません。一番上の選択肢が1になったり、下の選択肢が
0になったり・・・;;

ご教授いただけると嬉しいです。
やはりこれをするにはAPIの知識が必要になってくるのでしょうか。。。



てぃると

リンク

2007/1/28(Sun) 17:37:37|NO.5272

Asさんのスクリプトを参考にして自分で少し組みなおしてみましたら、
いい感じに動くようになりました。


plist="" sdim sndurl,65536,100 pos 300,300:button gosub "+",*plus pos 0,0:listbox ike,100,plist list_id=stat *mloop redraw 2 color 255,255,255:boxf color 0,0,0 pos 100,100:mes ike:mes plist redraw 1 wait 1 goto *mloop *plus dialog "mp3;*.wav;*.mid;*.cda",16,"音楽ファイル" if stat=1{;選ばれた sndurl(sndurlcnt)=refstr mname=getpath(sndurl(sndurlcnt),8) plist+=mname+"\n" objprm list_id,plist pos 300,100 sndurlcnt+=1 } return

こちらではうまくいったかな?と思うのですが、、、
もしよろしければスクリプトチェックをお願いします。



As

リンク

2007/1/28(Sun) 19:40:53|NO.5276

APIは使ってませんよ^^

$00000111というのはウィンドウズから送られてくるメッセージです。
リストボックスをマウスでクリックした時に、ウィンドウズは$00000111という定数を
ウィンドウに送信するのです。なんでこんな数字なんだろうとは思いますが、
この$00000111以外にもたくさんのメッセージがあり、それら全て同じ数字だと
同じ動作だと勘違いしてしまうため、こうしてばらばらな数字になっているわけです。

ちなみにこれは WM_COMMAND というメッセージです。



てぃると

リンク

2007/1/29(Mon) 01:27:20|NO.5280

返信ありがとうございます。

おかげさまで解決しました^^



ONION software Copyright 1997-2023(c) All rights reserved.