Скрипты для foo_uie_wsh_panel_mod

Список разделов Аудиоплеер foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #81 Nikolaich » 16.10.2012, 18:25

как только научусь, так сразу буду прятать...
P.S.имхо, далее, "портянки мои" скорее, никого не интересуют, их и не будет!
С фубаром дружу с версии v_0.8.3 !
Nikolaich M
Бывалый
Откуда: Пермь
Репутация: 1
С нами: 8 лет 1 месяц

Сообщение #82 Aum » 28.10.2013, 22:37

Привет всем!
Подскажите, как заставить эту функцию работать по отношению к выделенным трекам в плейлисте:
Код: Выделить всё
function on_mouse_lbtn_dblclk(x, y, mask){
        fb.RunContextCommand('File info');
    }
А то все время вызывает инфо проигрываемого файла, а хотелось бы группы выделенных!?
Мудр не тот, кто доказал что-либо, а тот, кто зная истину, не стал спорить.
Aum M
Бывалый
Аватара
Возраст: 32
Откуда: UA
Репутация: 14
С нами: 7 лет 3 месяца

Сообщение #83 vladj » 28.10.2013, 23:08

fb.RunContextCommand('File info');
Файл инфо, читай трек инфо, а у каждого трека своё название, как скрипт сможет прочитать такой командой треки с различными названиями ?
HTPC Termaltake, Onkyo 525E,Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 275
С нами: 7 лет 4 месяца

Сообщение #84 kgena_ua » 29.10.2013, 18:38

Решил немного разнообразить панель WSH SeekBar.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }            
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }             
            
var font = gdi.Font("Arial",10,1);            
   
var fader = 0;            
var fader1, fader2;            
var fading_step = 1;            
var fading_step_on = 5;            
var g_timer;            
var g_timer_refresh = 10;            
var delay = 0;            
            
var g_drag = 0;         
var g_drag_seek = 0;         
var g_drag_seek = 0;         
         
var text, text_width, left_right;         
var text_h, text_width_h, left_right_h;         
         
var row = 1;         
var line_height = 2;         
var txt_row = row + line_height + 1;         
         
var on_mouse_sb = false;         
         
var FSO = new ActiveXObject("Scripting.FileSystemObject");         
var WshShell = new ActiveXObject("WScript.Shell");         
         
var seek_mode ;         
var start_end_track = false;         
         
function sec2time(sec) {         
    var h,m,s;         
             
    h = Math.floor(sec/3600);         
    m = Math.floor((sec-h*3600)/60);         
    s = sec - h*3600 - m*60;         
              
    if(m<10 && h!=0) m = "0" + m;         
    if(s<10) s = "0" + s;         
             
    return (h==0 ? "" : h+":") + m + ":" + s;         
}         
         
function on_paint(gr) {         
             
    seek_mode = parseInt( utils.ReadINI(fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 1) );         
             
   var ww = window.Width;      
   var wh = window.Height;      
   var pos = 0;      
   var length = fb.PlaybackLength;      
         
   var pos_h = 0;      
         
   if(length > 0) {      
      if(g_drag){   
         pos = ww * g_drag_seek;
      } else {   
         pos = ww * (fb.PlaybackTime / length);
      }   
   }      
         
    pos_h = ww * g_drag_seek;         
         
     gr.FillSolidRect( 0, row + line_height, pos, 1, RGBA(0,0,0,100) );      
    gr.FillSolidRect( 0, row, pos, line_height, RGBA(100,113,149,100) );         
         
    if (fb.IsPlaying) {         
         
        text = " " + sec2time(Math.floor((g_drag && length>0) ? length*g_drag_seek : fb.PlaybackTime )) + " " ;         
        text_width = gr.CalcTextWidth(text, font);         
        left_right = pos < text_width ? 1 : 0;         

        switch (seek_mode) {         
        case 2:         
            text_h = "  " + sec2time(Math.floor(length*g_drag_seek )) + " "; break;          
        case 3:         
            text_h = "  " + sec2time(Math.floor(length*g_drag_seek )) + " ▪ " + sec2time(Math.floor(fb.PlaybackLength)) + " " ; break;          
        }         
        text_width_h = gr.CalcTextWidth(text_h, font) ;         
        left_right_h = pos_h < text_width_h ? 1 : 0;         
           
        if( ( pos_h > text_width_h ? pos_h : text_width_h ) < pos- text_width || pos_h > pos + text_width_h || seek_mode == 1 || g_drag == 1) {         
            fader1 = fader ;         
        } else {         
            fader1 = fader - 100 < 0 ? 0 : fader - 100 ;                 
        }         
                     
        if(left_right==1) {         
            gr.DrawString( text, font, RGBA(0,0,0,fader1), 1, txt_row + 1, text_width, wh, 0 );         
            gr.DrawString( text, font, RGBA(0,157,255,fader1), 0, txt_row, text_width, wh, 0 );         
        } else {         
            gr.DrawString( text, font, RGBA(0,0,0,fader1), pos-text_width + 1, txt_row + 1, text_width, wh, 0 );         
            gr.DrawString( text, font, RGBA(0,157,255,fader1), pos-text_width, txt_row, text_width, wh, 0 );         
        }         
                 
        fader2 = fader - 150 < 0 ? 0 : fader - 150 ;               
        gr.FillSolidRect( 0, row, pos , line_height , RGBA(0,129,215,fader2) );         
        gr.FillSolidRect( pos, row, ww - pos , line_height , RGBA(0,20,40,fader2) );         
         
        if(g_drag == 0 && seek_mode > 1) {         
            gr.FillSolidRect( pos_h - 3, row + line_height, 3, 1, RGBA(0,0,0,fader) );         
            gr.FillSolidRect( pos_h - 3, row, 3, line_height, RGBA(140,164,179,fader) );         
                    
            if(left_right_h==1) {         
                gr.DrawString( text_h, font, RGBA(0,0,0,fader), 1, txt_row + 1, text_width_h, wh, 0 );         
                gr.DrawString( text_h, font, RGBA(140,164,179,fader), 0, txt_row, text_width_h, wh, 0 );                         
            } else {                     
                gr.DrawString( text_h, font, RGBA(0,0,0,fader), pos_h - text_width_h + 1, txt_row + 1, text_width_h, wh, 0 );         
                gr.DrawString( text_h, font, RGBA(140,164,179,fader), pos_h - text_width_h, txt_row, text_width_h, wh, 0 );                                     
            }         
        }            
    }         
             
    if( (fb.PlaybackLength - fb.PlaybackTime) < 5 || fb.PlaybackTime < 1 ){         
        start_end_track = true;         
    } else {         
        start_end_track = false;         
    }         

//    gr.DrawString( start_end_track + " " + delay + "  " + fader + "  " + on_mouse_sb, font, RGBA(255,255,200,255), ww - 200, txt_row, ww , wh, 0);                          


    if(on_mouse_sb || start_end_track){         
        delay = 400;          
        window.ClearInterval(g_timer);         
        g_timer = window.SetInterval(function(){         
            fader = fader + fading_step_on ;                     
          if ( fader >= 255) { fader = 255; window.ClearInterval(g_timer)}   
          window.Repaint();   
       }, g_timer_refresh);      
    }         
             
    if(!(on_mouse_sb || start_end_track)){         
        window.ClearInterval(g_timer);         
        g_timer = window.SetInterval(function(){         
          if ( delay > 0 ) { delay = delay - fading_step };   
            if ( delay == 0) { fader = fader - fading_step };                     
          if ( fader <= 0) { fader = 0; window.ClearInterval(g_timer)}   
          window.Repaint();   
       }, g_timer_refresh);      
    }         
}         
         
function on_mouse_lbtn_down(x,y) {         
   g_drag = 1;      
}         
         
function on_mouse_lbtn_up(x,y) {         
   if(g_drag) {      
      g_drag = 0;   
      g_drag_seek = x / window.Width;   
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;   
      fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;   
   }      
}         
         
function on_mouse_move(x,y){         
         
    on_mouse_sb = true;         
    if(fb.IsPlaying) window.SetCursor(32649);         
         
    g_drag_seek = x / window.Width ;         
    g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;         
         
   if(g_drag){      
      g_drag_seek = x / window.Width;   
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;   
   }      
    if(on_mouse_sb || g_drag) {                 
        window.Repaint();         
    }         
}         
         
function on_mouse_leave() {         
    on_mouse_sb = false;         
    window.SetCursor(32512);         
    window.Repaint();         
}         
         
function on_playback_new_track(info) {         
   window.Repaint();      
}         
         
function on_playback_stop(reason) {         
   window.Repaint();      
}         
         
function on_playback_seek(time) {         
   window.Repaint();      
}         
         
function on_playback_time(time) {         
   window.Repaint();      
}         
         
function on_mouse_wheel(delta) {         
    fb.PlaybackTime = delta>0 ? fb.PlaybackTime + 1 : fb.PlaybackTime - 1;         
    window.Repaint();         
}         
         
function on_mouse_rbtn_up (x, y){         
             
    var _menu = window.CreatePopupMenu();         
    var ret = 1;         
         
    _menu.AppendMenuItem(0x00000000, ret ++, "PBTime");         
    _menu.AppendMenuItem(0x00000000, ret ++, "PBTime, seek");         
    _menu.AppendMenuItem(0x00000000, ret ++, "PBTime, seek, PBLength");         
    _menu.AppendMenuItem(0x00000800, 0, 0);         
    _menu.AppendMenuItem(0x00000000, ret ++, "Configure ...");         
         
   _menu.CheckMenuRadioItem(1, ret, seek_mode);      
   _menu.EnableMenuItem(seek_mode, 1);      
         
    ret = _menu.TrackPopupMenu(x, y);         
    if (ret == 0) return;         
         
    switch (ret) {         
    case 1:         
        utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 1);         
        break;          
    case 2:         
        utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 2);         
        break;           
    case 3:         
        utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 3);         
        break;         
    case 4:{         
        window.ShowConfigure();         
        }         
        break;         
    _menu.Dispose();         
    }         
    return true;         
}         

Вложения
seekbar.png
seekbar.png (3.49 КБ) Просмотров: 3629
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 325
С нами: 4 года 2 месяца

Сообщение #85 Aum » 02.11.2013, 12:45

vladj писал(а):fb.RunContextCommand('File info');
Файл инфо, читай трек инфо, а у каждого трека своё название, как скрипт сможет прочитать такой командой треки с различными названиями ?
Из контекстного меню фубара эта комадна отображает окно информации по всем выделенным трекам в плейлисте, вот и отсюда хотелось вызывать из скрипта то самое окно фубара с инфо по всем трекам: команды properties и file info отображает только по 1 треку (который воспроизводиться). Надо понимать не получиться?
Спойлер
1.jpg
Все, разобрался, работает:
Код: Выделить всё
function on_mouse_lbtn_dblclk(x, y, mask){
    fb.RunContextCommandWithMetadb('Properties', fb.GetSelections());
    }
Мудр не тот, кто доказал что-либо, а тот, кто зная истину, не стал спорить.
Aum M
Бывалый
Аватара
Возраст: 32
Откуда: UA
Репутация: 14
С нами: 7 лет 3 месяца

Сообщение #86 Aum » 17.11.2013, 12:43

Ребята, как прописать команду плагина Runcmnd:View/ELPlaylist/Refresh в wsh? Да и вообще любую команду Run command: Main Menu (изменно из мейн меню-там команд больше), чтобы скрипт ее понял и потопал выполнять?
Мудр не тот, кто доказал что-либо, а тот, кто зная истину, не стал спорить.
Aum M
Бывалый
Аватара
Возраст: 32
Откуда: UA
Репутация: 14
С нами: 7 лет 3 месяца

Сообщение #87 vladj » 17.11.2013, 14:00

fb.RunMainMenuCommand("View/ELPlaylist/Refresh");
не ?
HTPC Termaltake, Onkyo 525E,Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 275
С нами: 7 лет 4 месяца

Сообщение #88 Aum » 24.11.2013, 21:52

не, я ошибся - плейлист ES был и команда нужна была Runcmnd:View/ESPlaylist/Refresh. Да фиг с ним, не нужно уже - оказался глюк бетки фубара (не рефрешился плейлист при изменении рейтинга группы файлов), поставил стабл версию - все гуд.
Мудр не тот, кто доказал что-либо, а тот, кто зная истину, не стал спорить.
Aum M
Бывалый
Аватара
Возраст: 32
Откуда: UA
Репутация: 14
С нами: 7 лет 3 месяца

Сообщение #89 kgena_ua » 25.11.2013, 17:21

Для управления панелью ELplayList из WSH написал скрипт, в котором при выборе из меню пункта "Group 1" или "Group 2" или "Group 3"
создается соответствующий файл с именем elp_group_1 или elp_group_2 или elp_group_3.
Для "подсвечивания" в меню текущего выбора (скрин) использую переменную elp_group, значение которой от выбора равно 1, 2 или 3.
При выходе из фубара значение elp_group не сохраняется, открывая вновь меню не видно текущее состояния выбора (скрин).
Я понимаю, что при запуске фубара я должен присвоить переменной elp_group значение,
равное правому символу имени файла elp_group_*, но не знаю как это прописать в WSH.

Нужен аналог строки $right($findfile(%el_foobar2000_path%\maybe\settings\elp_group_*),1) для WSH.

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }            
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }             
var font = gdi.Font("Arial",10,1);            
   
var elp_group;   
   
var fso = new ActiveXObject("Scripting.FileSystemObject");         
   
//var path = fb.ProfilePath + "\\maybe\\settings\\";
var path = fb.ProfilePath;
if(!fso.FileExists(path + "elp_group_" + 1)) fso.CreateTextFile(path + "elp_group_" + 1, true);

function on_paint(gr) {   
    var ww = window.Width;      
   var wh = window.Height;      
    gr.DrawString( "elp_group = " + elp_group, font, RGBA(0,0,0,255), 1, 10, ww, wh, 0 );   
}

function on_mouse_lbtn_up(x, y){ 
             
    var _menu = window.CreatePopupMenu();         
    var ret = 1;

    _menu.AppendMenuItem(0x00000000, ret ++, "Group 1");         
    _menu.AppendMenuItem(0x00000000, ret ++, "Group 2");         
    _menu.AppendMenuItem(0x00000000, ret ++, "Group 3");         
    _menu.AppendMenuItem(0x00000800, 0, 0);         
    _menu.AppendMenuItem(0x00000000, ret ++, "Configure ...");         
         
   _menu.CheckMenuRadioItem(1, ret, elp_group);      
   _menu.EnableMenuItem(elp_group, 1);      
         
    ret = _menu.TrackPopupMenu(x, y);         
    if (ret == 0) return;         
      
    elp_group = ret ;
   
    switch (ret) {         
    case 1:         
        fso.deleteFile( path + "elp_group_" + '*' );
        fso.CreateTextFile( path + "elp_group_" + 1 );
        break;          
    case 2:         
        fso.deleteFile( path + "elp_group_" + '*' );
        fso.CreateTextFile( path + "elp_group_" + 2 );
        break;           
    case 3:         
        fso.deleteFile( path + "elp_group_" + '*' );
        fso.CreateTextFile( path + "elp_group_" + 3 );
        break;         
    case 4:{         
        window.ShowConfigure();         
        }         
        break;         
    _menu.Dispose();         
    }         
    return true;         
}   

function on_mouse_move(x,y){         
    window.SetCursor(32649);         
    window.Repaint();         
}         
         
function on_mouse_leave() {         
    window.SetCursor(32512);
    window.Repaint();      
Вложения
Безымянный.png
Безымянный.png (14.17 КБ) Просмотров: 3125
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 325
С нами: 4 года 2 месяца

Сообщение #90 onv » 26.11.2013, 02:44

Так а в лоб простейшим способом не работает ?
if(fso.FileExists(path + "elp_group_1")) {elp_group = 1} // ну и т.д.
onv M
Мастер
Возраст: 58
Откуда: Харьков
Репутация: 48
С нами: 5 лет 1 месяц

Сообщение #91 kgena_ua » 26.11.2013, 09:10

Оказалось даже очень просто.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 325
С нами: 4 года 2 месяца

Сообщение #92 Крепыш » 14.12.2013, 21:32

Накрылся плагин foo_uie_biography.dll: вместо 5 фотографий (как было раньше) показывает только одно фото.
В сборке нашёл WSH-скрипт от marc2003 для замены данного плагина. В скрипте есть команды контекстного меню для действий над фотками:
Спойлер
Изображение
Спойлер
Код: Выделить всё
if (im.trace(x, y) && im.images.length > 0 && (!this.check_feature("thumbs") || th.mode != "grid")) {
   _menu.AppendMenuItem(MF_STRING, 400, "Открыть папку с этими файлами");
   _menu.AppendMenuItem(MF_STRING, 401, "Открыть изображение");
   _menu.AppendMenuItem(MF_STRING, 402, "Удалить изображение");
   _menu.AppendMenuSeparator();
   _menu.AppendMenuItem(MF_STRING, 404, "Обрезать (фокусировать по центру)");
   _menu.AppendMenuItem(MF_STRING, 405, "Обрезать (фокусировать по верху)");
   _menu.AppendMenuItem(MF_STRING, 406, "Отцентровать");
   _menu.AppendMenuItem(MF_STRING, 407, "Растянуть");
   _menu.CheckMenuRadioItem(404, 407, im.type == "crop" ? 404 : im.type == "crop top" ? 405 : im.type == "centre" ? 406 : 407);
   _menu.AppendMenuSeparator();
}
Спойлер
Код: Выделить всё
case 400:
   this.run("explorer /select,\"" + im.files[im.index] + "\"");
   break;
case 401:
   this.run("\"" + im.files[im.index] + "\"");
   break;
case 402:
   im.delete_image();
   break;
case 403:
   im.update();
   break;
case 404:
case 405:
case 406:
case 407:
   im.type = idx == 404 ? "crop" : idx == 405 ? "crop top" : idx == 406 ? "centre" : "stretch";
   window.SetProperty("image_type", im.type);
   window.Repaint();
   break;

Как в меню добавить команду "Сохранить изображение", при выборе которого открывалось бы окно, типа такого?
Спойлер
Изображение
Вложения
marc2003.rar
(642.51 КБ) Скачиваний: 246
Крепыш
Новичок
Репутация: 2
С нами: 3 года 6 месяцев

Сообщение #93 spijet » 15.12.2013, 07:27

Крепыш писал(а):вместо 5 фотографий (как было раньше) показывает только одно фото.
Дело не в плагине, Last.fm что-то поменял в своём API и теперь выдаёт только одну фотографию.
Внезапно всплывающий ворчун. Ленив, противен, 'self-hating audiophile'. Люблю издеваться над людьми, которые разогревают кабели.
ASUS Xonar D2 / Philips SHP2700
spijet M
Бывалый
Аватара
Откуда: Иркутск
Репутация: 13
С нами: 7 лет

Сообщение #94 Крепыш » 15.12.2013, 15:09

spijet писал(а):Дело не в плагине, Last.fm что-то поменял в своём API и теперь выдаёт только одну фотографию.
Уже не важно - нашёл замену (см. выше). Надо только в скрипт добавить команду для сохранения фотографий в указанную папку.
Крепыш
Новичок
Репутация: 2
С нами: 3 года 6 месяцев

Сообщение #95 vladj » 15.12.2013, 16:51

И что, снова качает по пять фото ?
HTPC Termaltake, Onkyo 525E,Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 275
С нами: 7 лет 4 месяца

Сообщение #96 Крепыш » 15.12.2013, 17:38

vladj писал(а):И что, снова качает по пять фото ?
WSH-скрипт от marc2003 показывает 5 фото исполнителя.
Крепыш
Новичок
Репутация: 2
С нами: 3 года 6 месяцев

Сообщение #97 kgena_ua » 19.12.2013, 10:25

Нужен скрипт для WSH panel с функцией quicksearch (аналог работы плагина foo_quicksearch).
Существуют скрипты WSH, в которых это реализовано (WSH - плейлист, WSH - библиотека и т.д.),
а вытащить из них нужный код у меня мозгов не хватает.
С меня пиво.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 325
С нами: 4 года 2 месяца

Сообщение #98 Крепыш » 29.12.2013, 14:26

Крепыш писал(а):Как в меню добавить команду "Сохранить изображение"
Написал на AutoIt утилиту, добавил в меню плагина Now Playing от marc2003 пункт "Сохранить изображение...", при выборе которого можно указать папку для сохранения файла изображения.
Вложения
marc2003.rar
(944.28 КБ) Скачиваний: 251
Крепыш
Новичок
Репутация: 2
С нами: 3 года 6 месяцев

Сообщение #99 вовасбрат » 29.12.2013, 18:09

Крепыш, Спасибо! Теперь меньше телодвижений.... И в папке wsh_lastfm теперь каталоги сохраняются с правильным названием (имя артиста)
вовасбрат M
Бывалый
Аватара
Возраст: 48
Откуда: ТАМБОВ
Репутация: 52
С нами: 4 года 9 месяцев

Сообщение #100 kgena_ua » 30.12.2013, 23:00

WSH Volume bar.
Плавное изменение (уменьшение/увеличение) громкости:
- ср.кн.м. - mute;
- ср.кн.м. - первоначальное состояние.
Как такой вариант, какие неудобства ?


Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }

var font = gdi.Font("arial",10,1);

var fader = 0;
var fader2;
var fading_step = 1;
var fading_step_on = 5;
var g_timer;
var g_timer_refresh = 10;
var delay = 200;

var fading_step_v = 1;
var v_st = 0;
var g_timer_v;
var g_timer_refresh_v = 3;


var g_drag = 0;
var v;
var text, text_muted, text_width, left_right;

var row = 1;
var line_height = 2;
var txt_row = row + line_height + 1;

var on_mouse = false;
var state = 0;


function pos2vol(pos) { return (50 * Math.log(0.99 * pos + 0.01) / Math.LN10); }

function on_paint(gr) {
   
   var volume = fb.Volume;
    var www = Math.pow(10,((fb.Volume+100)/50));
    var ww = window.Width;
   var wh = window.Height;
 
    var pos = www*ww/100;

    if(volume == -100) pos=0;

    gr.FillSolidRect( 0, row + line_height, pos, 1, RGBA(0,0,0,100));
    gr.FillSolidRect( 0, row, pos, line_height, RGBA(100,113,149,100));
   
    text_muted = volume == -100 ? " Muted" : "" ;
   
    gr.DrawString( text_muted, font, RGB(0,0,0), 1, txt_row + 1, text_width, wh, 0);
    gr.DrawString( text_muted, font, RGB(100,115,143), 0, txt_row, text_width, wh, 0);
                     
       
    text = volume == -100 ? " Muted" : " " + Math.round(volume) + " db " ;
    text_width = gr.CalcTextWidth(text, font);
    left_right = pos < text_width ? 1 : 0;   
           
    if(left_right==1) {   
        gr.DrawString( text, font, RGBA(0,0,0,fader), 1, txt_row + 1, text_width, wh, 0);   
        gr.DrawString( text, font, RGBA(0,157,255,fader), 0, txt_row, text_width, wh, 0);   
    } else {
        gr.DrawString( text, font, RGBA(0,0,0,fader), pos-text_width + 1, txt_row + 1, text_width, wh, 0);           
        gr.DrawString( text, font, RGBA(0,157,255,fader), pos-text_width, txt_row, text_width, wh, 0);   
    }
   
    fader2 = fader - 150 < 0 ? 0 : fader - 150 ;     
    gr.FillSolidRect(  0, 1, pos, line_height, RGBA(0,129,215,fader2));
//    gr.FillSolidRect( pos, 1, ww - pos , line_height , RGBA(0,20,40,fader2));

    if(on_mouse){   
        delay = 400;
        window.ClearInterval(g_timer);
        g_timer = window.SetInterval(function(){   
            fader = fader + fading_step_on ;           
          if ( fader >= 255) { fader = 255; window.ClearInterval(g_timer)}
          window.Repaint();
       }, g_timer_refresh);
    }
   
    if(!on_mouse){   
        window.ClearInterval(g_timer);
        g_timer = window.SetInterval(function(){   
          if ( delay > 0 ) { delay = delay - fading_step };
            if ( delay == 0) { fader = fader - fading_step };           
          if ( fader <= 0) { fader = 0; window.ClearInterval(g_timer)}
          window.Repaint();
       }, g_timer_refresh);
    }
//    gr.DrawString( delay + "  " + fader  , font, RGBA(250,250,250,255), 50, 1, ww, wh, 0 );   
}

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;
}

function on_mouse_move(x,y) {
    on_mouse = true;
    window.SetCursor(32649);
   if(g_drag) {
        v = (x / window.Width)*100;
        v = (v<0) ? 0 : (v<100) ? v : 100;
        v = -100 + pos2vol(v);
        if(fb.Volume!=v) fb.Volume = v;
    }
    if(on_mouse || g_drag) {     
        window.Repaint();
    }
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}

function on_mouse_wheel(delta) {
   if(delta>0)
      fb.VolumeUp();
   else
      fb.VolumeDown();
}

function on_volume_change(val) {
   window.Repaint();
}

function on_mouse_mbtn_up(x,y) {
    if ( fb.Volume > -100){
        v_st = 1;
        state =fb.Volume
//        fb.Volume = -100;
    }else{
        v_st = 2;
//        fb.Volume = state;
    }

    window.ClearInterval(g_timer_v);
    g_timer_v = window.SetInterval(function(){   
        if ( v_st == 1){
            fb.Volume = fb.Volume - fading_step_v;           
          if ( fb.Volume <= -100  ) { v_st = 0; window.ClearInterval(g_timer_v)}
        }
        if ( v_st == 2){
            fb.Volume = fb.Volume + fading_step_v;           
          if ( fb.Volume >= state) { v_st = 0; window.ClearInterval(g_timer_v)}
        }
        window.Repaint();
    }, g_timer_refresh_v);
}

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 325
С нами: 4 года 2 месяца

Пред.След.

Вернуться в Секреты foobar2000