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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0101
kn.tm「MCIの音量調整」と「トラックボックスの数値」11解決


kn.tm

リンク

2011/1/1(Sat) 19:52:02|NO.36481

この頃質問してばかりですみません。

MCIを使用して音楽プレイヤーを作っているのですが音量の調整についての2つ質問があります。


1つ目はMCIで音量の調整をする方法です。いろいろと検索してみたのですが全くわかりませんでした。
システムのメインボリュームを操作するという方法もあったのですがそれだと他のプログラムにも影響してしまうので避けたいです。


2つ目は縦のトラックボックスで下に0を上に100をふる方法です。説明がわかりにくくて済みません。簡単に言えばタスクバーにあるボリュームコントロールのようなトラックボックスです。
頑張っても上に0が来て100が下に来てしまいます。


どちらかの方法でも教えていただけると助かります。ご回答お願いします。



この記事に返信する


hexa.hemi

リンク

2011/1/1(Sat) 20:30:14|NO.36484

ボリュームの変更方法は、

mci "setaudio エイリアス volume to ボリューム(0〜1000)"
です。
トラックバーの方はわかりません。



inovia

リンク

2011/1/1(Sat) 20:32:14|NO.36486

1つ目のみ


dialog "mpg;*.avi;*.wmv;*.asf;*.3gp;*.mp4;*.flv",16,"動画ファイル" if stat = 0 : end // 未選択時に終了 fname = refstr mci "open \""+fname+"\" alias f" // オープン if stat = -1 : dialog "Open Error" : end // エラー mci "play f" // 再生 vol = 500 // 0〜1000 の範囲を指定 mci "setaudio f volume to "+vol



inovia

リンク

2011/1/1(Sat) 21:02:35|NO.36492

>頑張っても上に0が来て100が下に来てしまいます。

100から値を引いたらどうでしょうか?

http://lhsp.s206.xrea.com/hsp_object7.html#3


; トラックバー設置 (デフォルト範囲は0〜100) ; ウィンドウスタイルに目盛り自動表示 ($1=TBS_AUTOTICKS) winobj "msctls_trackbar32", "", , $50000000 | $2, 30, 200 ; このトラックバーのウィンドウハンドル取得 hTrackbar = objinfo(stat, 2) ; つまみの位置 50 (TBM_SETPOS) sendmsg hTrackbar, $405, 1, 50 ; バーの目盛り間隔 10 (TBM_SETTICFREQ) sendmsg hTrackbar, $414, 10 ; トラックバーの範囲 sendmsg hTrackbar, $407, 1, 0 ; 最小値 sendmsg hTrackbar, $408, 1, 100 ; 最大値 ; リアルタイムで垂直バーの動きを見たい (WM_VSCROLL) ; (水平バーの場合はWM_HSCROLLを) oncmd gosub *vscroll, $115 stop *vscroll ; lparamにウィンドウハンドルが返る if lparam = hTrackbar { ; 現在の位置取得 (TBM_GETPOS) ; statに位置が返ります。 sendmsg hTrackbar, $400 title ""+(100-stat) } return



kn.tm

リンク

2011/1/2(Sun) 18:24:46|NO.36504

ご回答ありがとうございます。
特にサンプルスクリプトは役立ちました。

mciの音量調整は意外と簡単だったのにすみません。

inoviaさんが考えてくれたのもやってみたのですがツールチップで困ってしまいました。

何とかなりませんか。わがままで申し訳ないです。



ESZET

リンク

2011/1/2(Sun) 18:51:27|NO.36505

ツールチップが表示できなくて困っているということでしょうか?
http://lhsp.s206.xrea.com/hsp_object6.html



kn.tm

リンク

2011/1/3(Mon) 12:58:27|NO.36513

すみません。説明不足だったようです。
つまみがクリックされているときツールチップを付けるということです。
↑ trackbox.hspのtrackbox命令のn3(第3パラメータ)の$100です。

inoviaさんは http://lhsp.s206.xrea.com/hsp_object7.html#3 をtuk使ったスクリプトだったけど、
trackbox.hspを使ったのにしてみたら下のようになりました。


#include "llmod3.hsp" #include "llmod3\\trackbox.hsp" trackbox 40,200,2|$100|$20 repeat redraw 0 color 255,255,255 : boxf trackpos ,1 : SoundVol=100-stat color :pos ,200 mes "表示値\tSoundVol:"+SoundVol // ユーザーに表示する値 mes "設定値\tSoundVol:"+SoundVol*10 // プログラム上で使う値(ユーザーに表示する値を10倍したもの) redraw 1:await 10 loop


このときに値を引くだけだとトラックボックスに表示されるツールチップがおかしくなってしまうのを何とか防ぐ方法を教えてください。



ESZET

リンク

2011/1/4(Tue) 09:22:08|NO.36522

失敗作だけど参考になるかも
#include "llmod3\\llmod3.hsp"
#include "llmod3\\trackbox.hsp" #include "llmod3\\misc.hsp" trackbox 40,200,2|$20 tbid = stat repeat redraw 0 color 255,255,255 : boxf trackpos ,1 : SoundVol=100-stat color :pos ,200 tooltip tbid, "" + SoundVol mes "表示値\tSoundVol:"+SoundVol // ユーザーに表示する値 mes "設定値\tSoundVol:"+SoundVol*10 // プログラム上で使う値(ユーザーに表示する値を10倍したもの) redraw 1:await 10 loop



kn.tm

リンク

2011/1/4(Tue) 18:40:01|NO.36526

ああ!トラックボックス自体にツールチップを付けたんですね。

これだと動かしたときに値が出ないのが欠点ですね。

方法がない場合の案としてはいいですが、
できる限りはツールチップがちゃんと表示されたほうがいいですね。

わがままで申し訳ないです…



hexa.hemi

リンク

2011/1/4(Tue) 20:40:54|NO.36527

少し不具合がありますがツールチップを自作する方法で

#include "llmod3\\llmod3.hsp" #include "llmod3\\trackbox.hsp" #uselib "user32.dll" #func ScreenToClient "ScreenToClient" int, var #func SetParent "SetParent" int, int #func SetClassLong "SetClassLongA" int, int, int #cfunc GetClassLong "GetClassLongA" int, int #func SetWindowLong "SetWindowLongA" int, int, int #cfunc GetWindowLong "GetWindowLongA" int, int trackbox 40, 200, 2 | $20 tbid = stat tbh = objinfo(tbid, 2) hwnd0 = hwnd bgscr 2, 300, 100, 2 hwnd1 = hwnd font msgothic, 14 mes "0" w = ginfo(14) h = ginfo(15) width w * 3, h + 4 gsel 0, 1 SetClassLong hwnd1, -26, GetClassLong(hwnd1, -26) | $20000 SetWindowLong hwnd1, -8, hwnd0 SetWindowLong hwnd1, -26, GetWindowLong(hwnd1, -26) | $40000000 SetParent hwnd1, hwnd0 repeat redraw 0 color 255, 255, 255 : boxf trackpos , 1 : SoundVol = 100 - stat point = ginfo(0), ginfo(1) ScreenToClient hwnd0, point getkey k, 1 if point(0) >= 0 & point(0) <= 40 & point(1) >= 0 & point(1) <= 200 & k = 1 { gsel 2, 1 msg = "" + SoundVol width w * strlen(msg) + 4, , point(0), point(1) redraw 0 color boxf syscolor 24 boxf 1, 1, ginfo(12) - 2, ginfo(13) - 2 syscolor 23 pos 3, 2 mes msg redraw 1 gsel 0 mode = 1 }else : if mode : gsel 2, -1 : gsel 0 : mode = 0 mes "表示値\tSoundVol:"+SoundVol // ユーザーに表示する値 mes "設定値\tSoundVol:"+SoundVol*10 // プログラム上で使う値(ユーザーに表示する値を10倍したもの) redraw 1:await 10 loop



MIZUSHIKI

リンク

2011/1/7(Fri) 01:38:11|NO.36539

で、できた(^^;;;
うわー、昔同じことでずーっと悩んで結局あきらめてたから出来て感動した(~q~)

最初はツールチップを強制的に表示して何とか出来ないかなと思ったけど無理でした。
トラックバーのツールチップ内容を変更するのはサブクラス化するのが常道みたいですね。

ちょくとさんの作ったコールバック関数実装プラグインhscallbk.dllを使います。
ダウンロード先は↓
http://yokohama.cool.ne.jp/chokuto/download/index.html#hscallbk

#include "user32.as" ;重複回避のためマクロ名の取り消し。llmod3.hspの中で再定義。 #undef charlower #undef charupper #include "llmod3\\llmod3.hsp" #include "llmod3\\trackbox.hsp" ;コールバック関数実装プラグインのインクルード #include "hscallbk.as" ;コールバック関数を使うための準備 #uselib "" #func wProcTrackbar "" int, int, int, int setcallbk Proc, wProcTrackbar, *OnwProcTrackbar ;トラックバー作成 trackbox 40,200,2|$100|$20 ;トラックバーのウィンドウハンドル取得 hTrackbar = objinfo_hwnd(stat) ;元のプロシージャを取得しておく GetWindowLong hTrackbar, -4/*GWL_WNDPROC*/ OrgTrackProc = stat ;サブクラス化する SetWindowLong hTrackbar, -4/*GWL_WNDPROC*/, varptr(Proc) stop *OnwProcTrackbar // コールバック関数としてこのラベルに飛んでくる ;コールバック関数の引数を取得 hTrack = callbkarg(0) msg = callbkarg(1) wp = callbkarg(2) lp = callbkarg(3) switch msg case 0x004E/*WM_NOTIFY*/ ;lp は NMHDR構造体(12byte)のポインタが入っている dupptr NMHDR,lp,12,4 ; 変数化してアクセスできるようにする hwndFrom = NMHDR.0 idFrom = NMHDR.1 code = NMHDR.2 if code = -520/*TTN_NEEDTEXTA*/ || code = -530/*TTN_NEEDTEXTW*/ { // TTN_NEEDTEXT(A/W)のときNMHDR構造体の後ろにTOOLTIPTEXT構造体(NMHDR含む104byte)が存在する dupptr TOOLTIPTEXT, lp, 104 ; 変数化してアクセスできるようにする ;トラックバーの数値取得 trackpos ,1 hint = ""+(100-stat) ;←(4文字まで?)とりあえず0〜100なら大丈夫 title "trackpos = "+stat if code = -520/*TTN_NEEDTEXTA*/ { // ツールチップテキストがANSIのとき(9x系? ←よくわかりません。誰か検証お願いします;[Vistaと7で実験、両方TTN_NEEDTEXTWでした]) TOOLTIPTEXT.3 = varptr(hint) ;文字列変数のポインタをTOOLTIPTEXT.lpszTextにセット }else :if code = -530/*TTN_NEEDTEXTW*/ { // ツールチップテキストがUnicodeのとき(NT系) cnvstow unicode, hint ;Unicode化 TOOLTIPTEXT.3 = varptr(unicode) ;文字列変数のポインタをTOOLTIPTEXT.lpszTextにセット } } swbreak swend // 元のプロシージャに残りの処理を任せる CallWindowProc OrgTrackProc, hTrack, msg, wp, lp return stat

多分よくわからないとは思いますが、こうやったら出来るよっていうことで(^^;

# よし! さっそく自分のソフトの次回の更新時に組み込むとしよう^^
# ・・・あれ? hint変数の文字数って4文字までしか駄目? 残りが表示されない・・・。


【お勉強場所】
CFileDialogダイアログの右上に出てくるToolbarWindow32の言葉を英語にしたい!:
http://q.hatena.ne.jp/1181795123
ツールバー作成:
http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200510/05100030.txt
第65章 ツールバーにツールチップをつける:
http://homepage2.nifty.com/c_lang/sdk/sdk_65.htm



kn.tm

リンク

2011/1/15(Sat) 18:42:41|NO.36619

返事が遅れて申し訳ありません。

皆さんのおかげで何とかできそうです。

エラーは出ていて今困っていますが、解決すると思います。

皆さんのご協力に感謝します。ありがとうございました。



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