Список разделов › foobar2000 › Секреты foobar2000
немного модифицировал скрипт, чтобы значение громкости отображалось не все время, а только при изменении мышью.MaФ:2Monsignor
- Код: Выделить всё
...
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var pos;
var g_font = gdi.Font("Tahoma", 10, 1);
var g_drag = 0;
var mmouse_1 = 0;
function on_paint(gr){
gr.SetTextRenderingHint(5);
var ww = window.Width;
var wh = window.Height;
var volume = fb.Volume;
var pos=((Math.pow(10,volume/50)-0.01)/0.99)*ww;
pos = (pos<0) ? 0 : (pos<ww) ?Math.round(pos) : ww;
var txt = Math.round(100*pos/ww);
gr.FillGradRect( 0, 0, pos, wh, 90, RGB(148,204,72), RGB(40,80,21));
gr.FillGradRect(pos, 0, ww-pos, wh, 90, RGB(40,80,21), RGB(148,204,72));
if(mmouse_1){
gr.DrawString("Vol " + txt +"%", g_font, RGB(255,255,128), 0, 0, ww, wh, 0x11005000);
}
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
}
function on_mouse_lbtn_up(x,y){
on_mouse_move(x,y);
g_drag = 0;
mmouse_1 = 0;
}
function on_mouse_move(x,y){
if(g_drag){
var ww= window.Width;
pos=x;
mmouse_1 = 1;
pos = (pos<0) ? 0 : (pos<ww) ?Math.round(pos) : ww;
var vol =50*Math.log(0.99*pos/ww+0.01)/Math.log(10);
if(fb.Volume != vol)
fb.Volume = vol;
}
}
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeUp();
else
fb.VolumeDown();
}
function on_volume_change(val){
window.Repaint();
}
function on_size(){
}
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
var speed = 90; //не используется
var g_font = gdi.Font("Tahoma", 30, 1);
//------текст сообщения (пока тестовый)
var msg = "jfksdflkdhsfjhdajhfyuireyehnrmne erewhrkjheqrbbekrkjhkj 1234567890";
var position=0;
function on_paint(gr){
var ww = window.Width;
var wh = window.Height;
//------увеличим длину строки
var msg1=msg+"---"+msg+"---"+msg;
//------на вывод для теста пойдет и 20 символов
var txt = msg1.substring(position,position+20)
gr.DrawString(txt, g_font, RGB(255,255,128), 0, 0, ww, wh, 0x11005000);
position = position +1; //текущая позиция в тексте смещается на 1
//------если 1 цикл прошел, начнем с начала
if (position==msg.length)
{ position=0;}
}
function on_size(){
}
хм.. я по ошибке думал что она работает только по нажанию кнопки мыши *sorry*Zin-Uru:в on_mouse_move надо ковырять по идее.
on_playback_timeCom:осталось только узнать как сделать функцию, которая будет вызываться 1 раз в секунду хотя бы...
var timer;
function on_playback_new_track(info) {
timer && window.KillTimer(timer);
timer=null;
CollectGarbage();
//в скобках - интервал в милисекундах
if (!timer) timer = window.CreateTimerInterval(20);
}
on_timer = function(id) {
if (!timer || timer.ID != id) return;
//сюда собственно писать то, что должно происходить с течением времени
}
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeUp();
else
fb.VolumeDown();
}
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeDown();
else
fb.VolumeUp();
}
Com:если в скрипте что-то типа:то поменяй местами на такое:
- Код: Выделить всё
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeUp();
else
fb.VolumeDown();
}если там на +/- значения стоят, то просто поменяй местами + и - в формулах. если не выйдет - скинь скрипт, я поправлю
- Код: Выделить всё
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeDown();
else
fb.VolumeUp();
}
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_NOPREFIX = 0x00000800;
var g_drag = 0;
var g_metadb;
var g_timer;
var g_tfo1 = fb.TitleFormat("%artist% • %title%");
var g_tfo2 = fb.TitleFormat("[%album%] [' # '$num(%tracknumber%,2)]");
var g_tfo3 = fb.TitleFormat("$left(%_path%,2)/$directory(%path%,3)/$directory(%path%,2)/... [%genre%]");
var g_tfo;
var g_font = gdi.Font("Tahoma", 22, 1);
var backcol = RGB(240,240,226);
var playcol = RGB(48,0,0); var pausecol = RGB(128,128,92);
var hofset=8; var vofset =2;
var txt;
var strlength;
var i; var j;
var sens;
window.MinHeight = 32;
g_tfo = g_tfo1;
function on_paint(gr){
gr.FillSolidRect(0,0, window.Width, window.Height, backcol);
if (g_metadb) {
strlength = gr.CalcTextWidth(txt, g_font);
if (strlength > window.Width - 2*hofset ) {
if (g_timer) {
i = i + sens*1;
gr.GdiDrawText(txt, g_font, RGB(255,255,255), hofset+3-i, vofset+2, strlength, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.GdiDrawText(txt, g_font, (fb.IsPaused ? pausecol : playcol), hofset+2-i, vofset+1, strlength, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.FillSolidRect(0,0, hofset, window.Height, backcol);
gr.FillSolidRect(window.Width-hofset+1,0, hofset-1, window.Height, backcol);
if ((i > strlength - window.Width +2*hofset)||(i<0)) {
sens = -1*sens;
j = 0;
}
}
else {
j = 0; i = 0; sens = 1;
g_timer = window.CreateTimerInterval(50);
}
}
else {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
gr.GdiDrawText(txt, g_font, RGB(255,255,255), hofset+3, vofset+2, window.Width - 2*hofset - 2, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.GdiDrawText(txt, g_font, (fb.IsPaused ? pausecol : playcol), hofset+2, vofset+1, window.Width - 2*hofset - 2, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
}
}
}
function on_timer(id) {
if (g_timer && id == g_timer.ID) {
if (j==0) {
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset +1, window.Height - 2*vofset , false);
window.Repaint();
}
if (j < 30) {j = j+1; }
else {
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset+1 , window.Height - 2*vofset , false);
window.Repaint();
}
}
}
function on_size() {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
}
function on_mouse_wheel(delta){
if (fb.IsPlaying | fb.IsPaused) {
if (g_tfo == g_tfo1) {g_tfo = g_tfo2;}
else {
if (g_tfo == g_tfo2) {g_tfo = g_tfo3;}
else {
if (g_tfo == g_tfo3) {g_tfo = g_tfo1;}
}
}
if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
window.Repaint();
}
}
//function on_metadb_changed() {
// if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
// window.Repaint();
// }
function on_playback_new_track(metadb) {
g_tfo = g_tfo1;
g_metadb = fb.GetNowPlaying();
if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
window.Repaint();
}
// state = true when paused, false when resumed
function on_playback_pause(state) {
window.Repaint();
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset , window.Height - 2*vofset , false);
}
// reason: (integer, begin with 0): user, eof, starting_another, shutting_down
function on_playback_stop(reason) {
txt = "";
window.Repaint();
}
// cmd: (integer, begin with 0): default, play, next, prev, settrack, rand, resume
function on_playback_starting(cmd, is_paused) {}
//EOF
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_NOPREFIX = 0x00000800;
var g_drag = 0;
var g_metadb;
var g_timer;
var g_tfo1 = fb.TitleFormat("%artist% • %title%");
var g_tfo2 = fb.TitleFormat("[%album%] [' # '$num(%tracknumber%,2)]");
var g_tfo3 = fb.TitleFormat("$left(%_path%,2)/$directory(%path%,3)/$directory(%path%,2)/... [%genre%]");
var g_tfo;
var g_font = gdi.Font("Tahoma", 22, 1);
var backcol = RGB(240,240,226);
var playcol = RGB(48,0,0); var pausecol = RGB(128,128,92);
var hofset=8; var vofset =2;
var txt;
var strlength;
var i; var j;
var sens;
window.MinHeight = 32;
g_tfo = g_tfo1;
function on_paint(gr){
gr.FillSolidRect(0,0, window.Width, window.Height, backcol);
if (g_metadb) {
strlength = gr.CalcTextWidth(txt, g_font);
if (strlength > window.Width - 2*hofset ) {
if (g_timer) {
i = i + sens*1;
gr.GdiDrawText(txt, g_font, RGB(255,255,255), hofset+3-i, vofset+2, strlength, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.GdiDrawText(txt, g_font, (fb.IsPaused ? pausecol : playcol), hofset+2-i, vofset+1, strlength, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.FillSolidRect(0,0, hofset, window.Height, backcol);
gr.FillSolidRect(window.Width-hofset+1,0, hofset-1, window.Height, backcol);
if ((i > strlength - window.Width +2*hofset)||(i<0)) {
sens = -1*sens;
j = 0;
}
}
else {
j = 0; i = 0; sens = 1;
g_timer = window.CreateTimerInterval(50);
}
}
else {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
gr.GdiDrawText(txt, g_font, RGB(255,255,255), hofset+3, vofset+2, window.Width - 2*hofset - 2, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
gr.GdiDrawText(txt, g_font, (fb.IsPaused ? pausecol : playcol), hofset+2, vofset+1, window.Width - 2*hofset - 2, window.Height - 2*vofset - 1, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX);
}
}
}
function on_timer(id) {
if (g_timer && id == g_timer.ID) {
if (j==0) {
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset +1, window.Height - 2*vofset , false);
window.Repaint();
}
if (j < 30) {j = j+1; }
else {
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset+1 , window.Height - 2*vofset , false);
window.Repaint();
}
}
}
function on_size() {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
}
function on_mouse_wheel(delta){
//if (fb.IsPlaying | fb.IsPaused) {
if (g_tfo == g_tfo1) {g_tfo = g_tfo2;}
else {
if (g_tfo == g_tfo2) {g_tfo = g_tfo3;}
else {
if (g_tfo == g_tfo3) {g_tfo = g_tfo1;}
}
}
if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
window.Repaint();
//}
}
function on_item_focus_change() {
g_metadb = fb.GetFocusItem();
if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
window.Repaint();
}
function on_playback_new_track(metadb) {
g_tfo = g_tfo1;
g_metadb = fb.GetFocusItem();
if (g_metadb) {txt = g_tfo.EvalWithMetadb(g_metadb);}
window.Repaint();
}
// state = true when paused, false when resumed
function on_playback_pause(state) {
window.Repaint();
// window.RepaintRect(hofset, vofset, window.Width - 2*hofset , window.Height - 2*vofset , false);
}
// reason: (integer, begin with 0): user, eof, starting_another, shutting_down
function on_playback_stop(reason) {
//txt = "";
window.Repaint();
}
// cmd: (integer, begin with 0): default, play, next, prev, settrack, rand, resume
function on_playback_starting(cmd, is_paused) {}
//EOF
var MF_SEPARATOR = 0x00000800;
var MF_ENABLED = 0x00000000;
var MF_GRAYED = 0x00000001;
var MF_DISABLED = 0x00000002;
var MF_UNCHECKED = 0x00000000;
var MF_CHECKED = 0x00000008;
var MF_STRING = 0x00000000;
var MF_POPUP = 0x00000010;
var MF_RIGHTJUSTIFY = 0x00004000;
//==========
function on_mouse_lbtn_down(x, y) {
var _menu = window.CreatePopupMenu();
var i = 1;
var ret;
_menu.AppendMenuItem(MF_STRING, i++, "Default");
_menu.AppendMenuItem(MF_STRING, i++, "Repeat (Playlist)");
_menu.AppendMenuItem(MF_STRING, i++, "Repeat (Track)");
_menu.AppendMenuItem(MF_STRING, i++, "Random");
_menu.AppendMenuItem(MF_STRING, i++, "Shuffle (Tracks)");
_menu.AppendMenuItem(MF_STRING, i++, "Shuffle (Albums)");
_menu.AppendMenuItem(MF_STRING, i, "Shuffle (Folders)");
_menu.CheckMenuRadioItem(1, i, fb.PlayBackOrder + 1);
ret = _menu.TrackPopupMenu(x, y);
if (ret >= 1 && ret <= i)
{
fb.PlayBackOrder = ret - 1;
}
}
function StringFormat(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<20)|flag); }
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }
function on_paint(gr){
var PBO = fb.PlayBackOrder;
var FP = fb.ComponentPath.replace("components","images");
var dropdown = gdi.Image(FP + "order2pbo_dropdown.png");
var icon = gdi.Image(FP+ "order/pbo_" + PBO + ".png");
var ww = window.Width;
var wh = window.Height;
//gr.FillSolidRect(0,0,ww,wh,RGB(177,177,177));
gr.DrawImage(dropdown,ww-5,8,5,5,0,0,5,5);
gr.DrawImage(icon,1,3,19,14,0,0,19,14);
}
function on_playback_order_changed(new_order_index) {
window.Repaint();
}
Вернуться в Секреты foobar2000