|
|
2011/1/1(Sat) 19:52:02|NO.36481
この頃質問してばかりですみません。
MCIを使用して音楽プレイヤーを作っているのですが音量の調整についての2つ質問があります。
1つ目はMCIで音量の調整をする方法です。いろいろと検索してみたのですが全くわかりませんでした。
システムのメインボリュームを操作するという方法もあったのですがそれだと他のプログラムにも影響してしまうので避けたいです。
2つ目は縦のトラックボックスで下に0を上に100をふる方法です。説明がわかりにくくて済みません。簡単に言えばタスクバーにあるボリュームコントロールのようなトラックボックスです。
頑張っても上に0が来て100が下に来てしまいます。
どちらかの方法でも教えていただけると助かります。ご回答お願いします。
|
|
2011/1/1(Sat) 20:30:14|NO.36484
ボリュームの変更方法は、
mci "setaudio エイリアス volume to ボリューム(0〜1000)"
です。
トラックバーの方はわかりません。
|
|
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
|
|
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
|
|
2011/1/2(Sun) 18:24:46|NO.36504
ご回答ありがとうございます。
特にサンプルスクリプトは役立ちました。
mciの音量調整は意外と簡単だったのにすみません。
inoviaさんが考えてくれたのもやってみたのですがツールチップで困ってしまいました。
何とかなりませんか。わがままで申し訳ないです。
|
|
2011/1/2(Sun) 18:51:27|NO.36505
|
|
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
このときに値を引くだけだとトラックボックスに表示されるツールチップがおかしくなってしまうのを何とか防ぐ方法を教えてください。
|
|
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
|
|
2011/1/4(Tue) 18:40:01|NO.36526
ああ!トラックボックス自体にツールチップを付けたんですね。
これだと動かしたときに値が出ないのが欠点ですね。
方法がない場合の案としてはいいですが、
できる限りはツールチップがちゃんと表示されたほうがいいですね。
わがままで申し訳ないです…
|
|
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
| |
|
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
| |
|
2011/1/15(Sat) 18:42:41|NO.36619
返事が遅れて申し訳ありません。
皆さんのおかげで何とかできそうです。
エラーは出ていて今困っていますが、解決すると思います。
皆さんのご協力に感謝します。ありがとうございました。
|
|