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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0831
asdfmmloadの変数指定4解決


asdf

リンク

2008/8/31(Sun) 23:36:52|NO.18824


title"mmloadにどのような変数で指定すれば・・・?" #uselib "user32" #cfunc GetWindowLong "GetWindowLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int #uselib "shell32" #func DragAcceptFiles "DragAcceptFiles" int, int #func DragQueryFile "DragQueryFileA" int, int, int, int #func DragFinish "DragFinish" int #uselib "user32" #func WindowFromPoint "WindowFromPoint" int, int objsize 200,25 pos 0,53:chkbox "音声を流す",chk1 pos 0,79:chkbox "音声を流す",chk2 oncmd gosub *dropfiles, $233 : sdim filepath, 512 objsize 400 pos 200,53 :objsize 200 :listbox droplayfiles1,10, "" :hListbox01 = objinfo (stat, 2):DragAcceptFiles hListbox01, 1 DragAcceptFiles hListbox, 1 :objsize 40,23:pos 400,53:button "削除", *del_item pos 200,79 :objsize 200 :listbox droplayfiles2,10, "" :hListbox02 = objinfo (stat, 2):DragAcceptFiles hListbox02, 1 DragAcceptFiles hListbox, 1 :objsize 40,23:pos 400,79:button "削除", *del_item *main if chk1=1 :gosub *lchk1 if chk2=1 :gosub *lchk2 redraw 1:await 50:goto *main stop *lchk1 mmload hListbox01,1 mmplay 1 return *lchk2 mmload hListbox02,2 mmplay 2 return *del_item sendmsg hListbox, $188 : sendmsg hListbox, $182, stat return *dropfiles DragQueryFile wparam, 0, varptr (filepath), 512 DragFinish wparam WindowFromPoint ginfo (0), ginfo (1) if stat = hListbox01 :sendmsg hListbox01, $180, , filepath :return if stat = hListbox02 :sendmsg hListbox02, $180, , filepath :return return
このプログラムは、ところどころLet's HSP!さんのサイトを参考にさせていただきました。
そしてまた問題にぶち当たりました。私の検索力が無いのか、こればかりはググリましたが
だめでした。。。

音声ふぁいるをボックス(リストボックス)に直接ドロップしてチェックボックスを入れれば
自動的に再生されるプログラムを書きたかったのですが

★リストボックスにドロップできるファイルをメディアファイル一つだけにすることと、
★リストボックスにドロップされたファイルをmmloadで読み込むことが出来ません。

※そして出来ればリストボックスにドロップされたときにリストボックスに表示される文字列は
 ファイルの場所まで詳細に表示すると音声ファイル名自体が隠れて見えなくなる恐れがあるので
 表示されるのは「音声ファイル名.拡張子」だけにしたいです。

何方か教えてください。



この記事に返信する


asdf

リンク

2008/9/1(Mon) 00:20:03|NO.18827

そして、「削除」ボタンについて、少々不調ですが、
それについては解決済みですので、気にしないでください;;



ANTARES

リンク

2008/9/1(Mon) 00:31:30|NO.18828

不足:sdim filepath1,512

誤:mmload hListbox01,1
正:mmload filepath1,1: chk1=0

誤:if stat = hListbox01 :sendmsg hListbox01, $180, , filepath :return
正:if stat = hListbox01 {
sendmsg hListbox01, $180, , filepath
filepath1=filepath
return
}



flory

リンク

2008/9/1(Mon) 02:15:35|NO.18832

>リストボックスにドロップできるファイルをメディアファイル一つだけにすること

同時に複数のファイルがドロップされたとき、挙げられているサンプルでは
「ドロップされたファイルのうち、最初のものをリストボックスに追加する」
という動作になっています。したがって、一回のドロップではひとつのファイルしか追加されません。
しかし、当然のことながら、何度もドロップするとそれだけリストボックス内の項目が増えていきます。このときに「音声を流す」と、ANTARESさんの言うとおりにスクリプトを直していれば、再生されるのは一番最後に追加したファイルになります。

本題の「ドロップできるファイルをひとつだけにする」=「リストボックスに表示されるファイル名をひとつだけにする」こと(で合ってますね?)ですが、これは新しくファイルが追加されるときにリストボックスを空っぽにすればいいです。本当はもっと厳密に処理すべきかもしれませんが、さしあたってはこれで問題ないかと。
具体的には、ANTARESさんの三つ目の指摘

>誤:if stat = hListbox01 :sendmsg hListbox01, $180, , filepath :return
>正:if stat = hListbox01 {
>sendmsg hListbox01, $180, , filepath
>filepath1=filepath
>return
>}

に一行追加して、

正:if stat = hListbox01 {
sendmsg hListbox01, $184
sendmsg hListbox01, $180, , filepath
filepath1=filepath
return
}

としてください。



>表示されるのは「音声ファイル名.拡張子」だけにしたいです。

F1キーで出てくるヘルプには検索機能が付いてますよ。右上に注目です。とりあえず「ファイル名 取り出す」とでも検索すれば何かわかるんじゃないでしょうか。
あ、スペースは必ず半角スペースにしてくださいね。



>そして、「削除」ボタンについて、少々不調ですが、
>それについては解決済みですので、気にしないでください;;

とのことですが、本当に解決済みかどうか心配(スイマセン)なので一応。


挙げられているサンプルを実行し、「削除」ボタンを押してみると……
「サブルーチン外でのreturnは無効です。」というエラーが出る。
これは、「削除」ボタンを作るときに

button gosub "削除", *del_item
とすれば解決できます。どうしてこれでいいのかはbutton命令のヘルプと「サブルーチン」という言葉を調べればわかるでしょう。付属のプログラミングマニュアルをしっかり読めば理解できるはず。


「gosub」を付け加えて実行、リストボックスにファイルをドロップしてから「削除」ボタンを押してみると……
なにも反応がない。

これは、del_itemサブルーチン内のsendmsg命令の引数がおかしいからです。
きちんとdel_item01、del_item02のふたつを作り、

sendmsg hListbox01, $188 : sendmsg hListbox01, $182, stat
というようにしてください。


サブルーチンをふたつ作り、それぞれ直してから実行、リストボックスにファイルをドロップしてから「削除」ボタンを押してみると……
リストボックス内のファイル名をクリックして選択してからでないと削除できない。

これは、

sendmsg hListbox01, $188 : sendmsg hListbox01, $182, stat
というのが「選択されている項目を削除する」ことを意味しているからです。
これを先ほどと同じように「空っぽにする」ようにすれば、選択しなくても削除できますね。

sendmsg hListbox01, $184
というひとつの命令だけにしてください。


以上で適切に動作します。



最後に。
失礼かもしれませんが、asdfさんのレベルではsendmsg命令を扱うのは難しいと思います。
そもそも、ファイル名をひとつだけしか表示しないのであれば、リストボックスを使うのは現実的ではありません。リストボックスは複数の文字列をリストとして扱うためのものです。
ここは、input命令で作ることのできる入力ボックスを使ったほうがいいでしょう。入力ボックスはなにも文字を入力するためだけのものではありません。文字を表示するためにも使えるのです。もちろん、中身を書き換えたりもできます。しかも、わけのわからない(笑)sendmsg命令なんてものは使わずに済みます。

もしも「メッセージ駆動くらいわかるさ!sendmsgなんて楽勝楽勝!」というのであれば、それはもう本っっっっ当に失礼しました。



最後の最後に。
超長文レス、失礼しました。



asdf

リンク

2008/9/1(Mon) 23:36:13|NO.18842

>ANTARESさん
ありがとうございます。とてもためになりました^^
これからはもっとよく確認してスクリプトを載せるようにします・・・
>floryさん
>超長文レス、失礼しました。
いえいえ、そんな。それ以上の内容でとてもためになりました。
ありがとうございました。おかげでかなり改善されました^^



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