Нужна помощь с WSH Panel Mod

Список разделов foobar2000 Есть вопрос!

Описание: У вас проблемы с foobar2000 и вам необходима помощь? Спрашивайте здесь!
Правила раздела: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть. Подробно описывайте проблему. Не забывайте указать версию плеера, название сборки, по возможности добавить скриншоты проблемы.

Сообщение #1 Kreed » 21.04.2013, 18:45

Добрый день посетители форума.

Нашел SeekBar в интернете но без подписи, после добавления она находиться позади SeekBar'a.
Спойлер
Изображение

WSH код:
Код: Выделить всё
// Flags, used with GdiDrawText
// For more information, see: http://msdn.microsoft.com/en-us/library/dd162498(VS.85).aspx
var DT_TOP = 0x00000000;
var DT_LEFT = 0x00000000;
var DT_CENTER = 0x00000001;
var DT_RIGHT = 0x00000002;
var DT_VCENTER = 0x00000004;
var DT_BOTTOM = 0x00000008;
var DT_WORDBREAK = 0x00000010;
var DT_SINGLELINE = 0x00000020;
var DT_EXPANDTABS = 0x00000040;
var DT_TABSTOP = 0x00000080;
var DT_NOCLIP = 0x00000100;
var DT_EXTERNALLEADING = 0x00000200;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
var DT_INTERNAL = 0x00001000;
var DT_EDITCONTROL = 0x00002000;
var DT_PATH_ELLIPSIS = 0x00004000;
var DT_END_ELLIPSIS = 0x00008000;
var DT_MODIFYSTRING = 0x00010000;
var DT_RTLREADING = 0x00020000;
var DT_WORD_ELLIPSIS = 0x00040000;
var DT_NOFULLWIDTHCHARBREAK = 0x00080000;
var DT_HIDEPREFIX = 0x00100000;
var DT_PREFIXONLY = 0x00200000;

function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var g_font = gdi.Font("Tahoma", 12, 1);
var g_drag = 0;
var g_drag_seek = 0;
var tfo = fb.TitleFormat("$if(%ispaused%,PAUSE) $if(%isplaying%,%artist% - %title% '['%playback_time%/%length%']')");
 
function TimeFmt(t){
  var zpad = function(n){
      var str = n.toString();
      return (str.length<2) ? "0"+str : str;
  }
  var h = Math.floor(t/3600); t-=h*3600;
  var m = Math.floor(t/60); t-=m*60;
  var s = Math.floor(t);
  if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
  return m.toString()+":"+zpad(s);
}
function on_paint(gr){
  var txt = "";
  var pos =0;
         
  if(fb.PlaybackTime > 0){
      if(g_drag){
          pos = window.Width * g_drag_seek;
          txt = "Seek " + TimeFmt(g_drag_seek * fb.PlaybackLength) + " / " + TimeFmt(fb.PlaybackLength);
      }
      else{
          pos = window.Width * (fb.PlaybackTime / fb.PlaybackLength);
          txt = tfo.Eval();
      }

  }else
  {
  txt = "Playback Stopped";
  }
       gr.DrawRect(0,0,window.Width-1,window.Height-1,1.0,RGB(0,0,0));
       gr.FillSolidRect(1,1,window.Width-2,window.Height-2,RGB(28,28,28));
       var dio1 = 0.375*(window.Height-2);
       var dio2 = 0.625*(window.Height-2);
       gr.GdiDrawText(txt, g_font, RGB(50,250,50), 0, 0, window.Width, window.Height, DT_CENTER | DT_VCENTER |DT_SINGLELINE );
       gr.FillSolidRect(1,1,pos-1,dio1,RGB(119,187,255));
       gr.FillSolidRect(1,1+dio1,pos-1,dio2,RGB(51,153,255));
}


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){
  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;
      window.Repaint();
  }
}

function on_playback_time(time){
  window.Repaint();
}

function on_playback_stop(){
      window.Repaint();
}

function on_playback_starting(cmd, paused){
   window.Repaint();
}
function on_playback_new_track(info){
  window.Repaint();
}
//EOF
Kreed
Автор темы
Репутация: 0
С нами: 10 лет 11 месяцев

Сообщение #2 macarych » 21.04.2013, 19:18

Kreed:находиться позади SeekBar'a.
В коде ниже будет спереди.
Код: Выделить всё
// Flags, used with GdiDrawText
// For more information, see: http://msdn.microsoft.com/en-us/library/dd162498(VS.85).aspx
var DT_TOP = 0x00000000;
var DT_LEFT = 0x00000000;
var DT_CENTER = 0x00000001;
var DT_RIGHT = 0x00000002;
var DT_VCENTER = 0x00000004;
var DT_BOTTOM = 0x00000008;
var DT_WORDBREAK = 0x00000010;
var DT_SINGLELINE = 0x00000020;
var DT_EXPANDTABS = 0x00000040;
var DT_TABSTOP = 0x00000080;
var DT_NOCLIP = 0x00000100;
var DT_EXTERNALLEADING = 0x00000200;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
var DT_INTERNAL = 0x00001000;
var DT_EDITCONTROL = 0x00002000;
var DT_PATH_ELLIPSIS = 0x00004000;
var DT_END_ELLIPSIS = 0x00008000;
var DT_MODIFYSTRING = 0x00010000;
var DT_RTLREADING = 0x00020000;
var DT_WORD_ELLIPSIS = 0x00040000;
var DT_NOFULLWIDTHCHARBREAK = 0x00080000;
var DT_HIDEPREFIX = 0x00100000;
var DT_PREFIXONLY = 0x00200000;

function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var g_font = gdi.Font("Tahoma", 12, 1);
var g_drag = 0;
var g_drag_seek = 0;
var tfo = fb.TitleFormat("$if(%ispaused%,PAUSE) $if(%isplaying%,%artist% - %title% '['%playback_time%/%length%']')");
 
function TimeFmt(t){
  var zpad = function(n){
      var str = n.toString();
      return (str.length<2) ? "0"+str : str;
  }
  var h = Math.floor(t/3600); t-=h*3600;
  var m = Math.floor(t/60); t-=m*60;
  var s = Math.floor(t);
  if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
  return m.toString()+":"+zpad(s);
}
function on_paint(gr){
  var txt = "";
  var pos =0;
         
  if(fb.PlaybackTime > 0){
      if(g_drag){
          pos = window.Width * g_drag_seek;
          txt = "Seek " + TimeFmt(g_drag_seek * fb.PlaybackLength) + " / " + TimeFmt(fb.PlaybackLength);
      }
      else{
          pos = window.Width * (fb.PlaybackTime / fb.PlaybackLength);
          txt = tfo.Eval();
      }

  }else
  {
  txt = "Playback Stopped";
  }
       gr.DrawRect(0,0,window.Width-1,window.Height-1,1.0,RGB(0,0,0));
       gr.FillSolidRect(1,1,window.Width-2,window.Height-2,RGB(28,28,28));
       var dio1 = 0.375*(window.Height-2);
       var dio2 = 0.625*(window.Height-2);
       gr.FillSolidRect(1,1,pos-1,dio1,RGB(119,187,255));
       gr.FillSolidRect(1,1+dio1,pos-1,dio2,RGB(51,153,255));
      gr.GdiDrawText(txt, g_font, RGB(50,250,50), 0, 0, window.Width, window.Height, DT_CENTER | DT_VCENTER |DT_SINGLELINE );
}


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){
  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;
      window.Repaint();
  }
}

function on_playback_time(time){
  window.Repaint();
}

function on_playback_stop(){
      window.Repaint();
}

function on_playback_starting(cmd, paused){
   window.Repaint();
}
function on_playback_new_track(info){
  window.Repaint();
}
//EOF
macarych M
Аватара
Репутация: 417
С нами: 15 лет 3 месяца

Сообщение #3 Kreed » 21.04.2013, 19:37

Огромное спасибо все работает.
Kreed
Автор темы
Репутация: 0
С нами: 10 лет 11 месяцев

Сообщение #4 macarych » 21.04.2013, 19:51

Не за что. Надо было, всего лишь, строчку, отмеченную красным, поставить последней в этом куске кода.

2013-04-21_194424.jpg
macarych M
Аватара
Репутация: 417
С нами: 15 лет 3 месяца

Сообщение #5 Yurnikos » 22.04.2013, 07:01

К сожалению, этот код выдаёт ошибку, если в плейлисте "мёртвая запись"
Использую другой, от San_dr, по-умолчанию, для "расшифровки кракозябров", включено использование шрифта AGOpus
(при условии наличия его или в системе, или в папке фубара):
Спойлер
/////////////////////// бегущая строка - сикбар v.10.12.2010 \\\\\\\\\\\
//San_dr http://forum.oszone.net && Zin-Uru http://foobar2000.ru/forum\\
//var font = gdi.Font("Tahoma", 12, 0);
var font = gdi.Font("AGOpus", 17, 0);
var align = 0x00000003 | 0x00000008, align_scroll = 0x00000009;
var tf_string = ('[%artist% —] [%title% •] %codec%•[%playback_time%]/[%length%]');
var ww, pos_d = 3, q = 0, timer, g_drag = 0;
var start = true, stopped = false;
window.MinHeight = window.MaxHeight = 28;
function RGBA(r, g, b, a) {return ((a << 24) | (r << 16) | (g << 6) | (b));
}
function on_timer(id) {
window.Repaint();
}
function on_playback_new_track(metadb) {
window.Repaint();
}
function on_playback_stop(){
window.Repaint();
}
function on_playback_seek(time){
window.Repaint();
}
function on_playback_time(time){
window.Repaint();
}
function on_playback_pause(state){
window.Repaint();
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
on_mouse_move(x,y);
}
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;
g_drag = 0;
}
}
function on_mouse_move(x,y){
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;
window.Repaint();
}
}
function RGB(r, g, b) { return (0xff000000 | (r << 16) | (g << 8) | (b)); }
function on_paint(gr) {
var text = fb.IsPlaying ? fb.TitleFormat(tf_string).Eval() : (stopped ? "STOP" :

"----===foo-v1.2.x===----");// название сборки
var text_width_d = gr.CalcTextWidth(text, font);
ww = window.Width, wh = window.Height, pos = 0, length =

fb.PlaybackLength;
if(!timer) timer = window.CreateTimerInterval(70);
q = q + 50;
if(length > 0){
if(g_drag){
pos = window.Width * g_drag_seek;
}
else{
pos = window.Width * (fb.PlaybackTime /

[length]);
}
} else if (fb.PlaybackTime) {
}
gr.FillGradRect(0,0,ww,wh,-90,RGB(70,120,140), RGB(0,6,1));
gr.FillGradRect(0, 0, pos, wh,-90,RGB(0,6,1),

RGB(70,140,120));//фон прошло
gr.DrawRect(-1,-9, pos+1, 35, 2, RGB(199,0,190));//движок-разделитель
text_width_2 = gr.CalcTextWidth(text, font);
if(text_width_d>ww-15) {
text = text + " • " + text;
text_width_2 = gr.CalcTextWidth(text, font);
if(pos_d <= text_width_d - text_width_2) {
pos_d = 7 - (start ? 0 : 3);
start = false;
} else {
pos_d = pos_d - 1;
}
gr.GdiDrawText(text, font, RGB(180,196,200), pos_d + 1, 0, text_width_2,

18, align_scroll);
} else {
gr.GdiDrawText(text, font, RGB(180,196,200), 1, 0, ww, 90, align_scroll);
}
function on_size() {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
}
function on_playback_pause(state) {
window.Repaint();
}
function on_playback_starting(cmd, is_paused) {}
}
// APPLICATION - END


Yurnikos
Гость

Сообщение #6 iprad » 04.05.2013, 08:23

Добрый день всем.
Как нарисовать наклоненную линию в WSH????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
iprad M
Аватара
Репутация: 89
С нами: 11 лет 1 месяц

Сообщение #7 onv » 04.05.2013, 11:41

DrawLine(x1, y1, x2, y2, толщина в пикселях, RGB(R,G,B))
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 11 месяцев

Сообщение #8 iprad » 09.05.2013, 19:27

спасибо!
iprad M
Аватара
Репутация: 89
С нами: 11 лет 1 месяц

Сообщение #9 iprad » 30.05.2013, 13:30

Добрый день всем. Как получить общую продолжительность звучания активного плейлиста с помощью WSH? Ткните в правильое направление!!!!!!!!!!!
iprad M
Аватара
Репутация: 89
С нами: 11 лет 1 месяц

Сообщение #10 onv » 31.05.2013, 13:53

Каждый total length считает по-своему, как ему удобнее. В качестве последних реализаций можете, например, посмотреть у Хантера в его последнем catrox-е ф-ю function calculateGroupLength(a, b), или у Фальстафа посмотреть его global_time или как-то так, уже не помню.
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 11 месяцев

Сообщение #11 iprad » 20.09.2013, 12:20

Всем доброго дня.
Как можно изменять размеры окна Foobar, используя код в WSH панели?
iprad M
Аватара
Репутация: 89
С нами: 11 лет 1 месяц

Сообщение #12 kgena_ua » 03.10.2013, 18:35

Ув. форумчане, нужна помощь с панелями WSH SeekBar и WSH VolumeBar.
(мои познания в WSH Panel Mod ненамного превышают 1%.)

Задача такая:
в нормальном состоянии в в панелях отображается только полоса прокрутки (WSH SeekBar) и уровень громкости (WSH VolumeBar);
при наведении мышкой (на соответствующую панель) изменяется цвет полосы и отображаются цифровые значения (минуты... , горомкость в db);
если убрать мышь - цвет полосы плавно изменяется до первоначалбного а цифровые значения исчезают (уменьшаю значение Alpha).

Вопрос такой: с WSH VolumeBar вроде получается, а в WSH SeekBar не работает, хотя делаю аналогично, ну я так думаю.
срипт WSH VolumeBar
Код: Выделить всё

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 fader = 0;
var fading_step = 1;
var g_timer;
var g_timer_refresh = 10;

var g_drag = 0;
var asd;
var v;
var text,text_muted,text_width,left_right;
var font = gdi.Font("arial",10,0);
var line_height = 1

var on_mouse = false, on_mouse_chk = false;

var m = 0

function on_paint(gr) {

    var www = Math.pow(10,((fb.Volume+100)/50));
    var ww = window.Width;
   var wh = window.Height;
   var volume = fb.Volume;

 
    if(fb.Volume != v) {
        var pos = www*ww/100;
    } else {
       var pos = asd;
   }

    if(pos>ww) pos=ww;
    if(pos) pos; 

    gr.FillSolidRect(  0 , 2 , pos , line_height , RGBA(0,0,0,150));
    gr.FillSolidRect(  0 , 1 , pos , line_height , RGBA(100,113,149,150));
   
    text_muted = volume == -100 ? " Muted" : "" ;
   
    gr.DrawString( text_muted , font, RGB(0,0,0), 1 , line_height + 3 , text_width, wh, 0);
    gr.DrawString( text_muted , font, RGB(100,115,143), 0 , line_height + 2 , text_width, wh, 0);
                     
//    if(on_mouse || g_drag) {
       
        text = volume == -100 ? " Muted"  + "   " + fader : " " + Math.round(volume) + " db " + "   " + fader ;
        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 , line_height + 3 , text_width, wh, 0);   
            gr.DrawString( text , font, RGBA(0,129,215,fader), 0 , line_height + 2 , text_width, wh, 0);   
        } else {
            gr.DrawString( text , font, RGBA(0,0,0,fader), pos-text_width + 1, line_height + 3 , text_width, wh, 0);           
            gr.DrawString( text , font, RGBA(0,129,215,fader), pos-text_width, line_height + 2 , text_width, wh, 0);   
        }
        gr.FillSolidRect(  0 , 1 , pos , line_height , RGBA(0,129,215,fader));
//    }


    if(on_mouse){   
        if(fader>0) window.ClearInterval(g_timer);
       fader = 255;
        g_timer = window.SetInterval(function(){   
          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) {
    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+(Math.floor((((Math.log(v+1)))/Math.LN10)*50));
      asd = x;                               
        if(fb.Volume!=v) fb.Volume = v;
    }
    if(on_mouse_chk!=on_mouse || g_drag) {
        on_mouse_chk = on_mouse;
        window.Repaint();
    }
}

function on_mouse_leave() {
    on_mouse = false;
    on_mouse_chk = 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();
}

 

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 fader = 0;
var fading_step = 1;
var g_timer;
var g_timer_refresh = 10;

var g_drag = 0;
var g_drag_seek = 0;

var font = gdi.Font("Arial",10,0);
var text_1, text_2, text_width,text_1_width, text_2_width, left_right;
var line_height = 1

var on_mouse = false, on_mouse_chk = 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) {   
   var ww = window.Width;
   var wh = window.Height;
   var pos = 0;
   var length = fb.PlaybackLength;
         
   if(length > 0) {      
      if(g_drag){   
         pos = ww * g_drag_seek;
      } else {   
         pos = ww * (fb.PlaybackTime / length);
      }   
   }   

     gr.FillSolidRect( 0, 2, pos , line_height , RGBA(0,0,0,150));
     gr.FillSolidRect( 0, 1, pos , line_height , RGBA(100,113,149,150));

   
//    if(fb.IsPlaying) {   
//    if((on_mouse || g_drag) && fb.IsPlaying) {
        text_1 = " " + sec2time(Math.floor((g_drag && length>0) ? length*g_drag_seek : fb.PlaybackTime + " ")) + " ";
        text_2 = " /  " + sec2time(Math.floor(fb.PlaybackLength)) + " " + on_mouse + fader;
       
        text_1_width = gr.CalcTextWidth(text_1, font);
        text_2_width = gr.CalcTextWidth(text_2, font);
        text_width = text_1_width + text_2_width;
       
        left_right = pos < text_width ? 1 : 0;

        if(left_right==1) {
            gr.GdiDrawText(text_1, font, RGBA(0,0,0,fader), 1 , line_height + 3 , text_1_width, wh, 0);
            gr.GdiDrawText(text_1, font, RGBA(0,129,215,fader), 0 , line_height + 2 , text_1_width, wh, 0);

            gr.GdiDrawText(text_2, font, RGBA(0,0,0,fader), text_1_width + 1 , line_height + 3 , text_2_width, wh, 0);
            gr.GdiDrawText(text_2, font, RGBA(100,113,149,fader), text_1_width , line_height + 2 , text_2_width, wh, 0);
         
        } else {
            gr.GdiDrawText(text_1, font, RGBA(0,0,0,fader), pos-text_width + 1, line_height + 3 , text_1_width, wh, 0);
            gr.GdiDrawText(text_1, font, RGBA(0,129,215,fader), pos-text_width , line_height + 2 , text_1_width, wh, 0);
           
            gr.GdiDrawText(text_2, font, RGBA(0,0,0,fader), pos-text_width + text_1_width + 1 , line_height + 3 , text_2_width, wh, 0);
            gr.GdiDrawText(text_2, font, RGBA(100,113,149,fader), pos - text_width + text_1_width , line_height + 2 , text_2_width, wh, 0);
        }
         gr.FillSolidRect( 0, 1, pos , line_height , RGBA(0,129,215,fader));
 
   
//    }
   
    if(on_mouse){   
        if(fader>0) window.ClearInterval(g_timer);       
        fader = 255;
        g_timer = window.SetInterval(function(){   
              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 = true;      
    if(fb.IsPlaying) window.SetCursor(32649);      
   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_chk!=on_mouse || g_drag) {      
        on_mouse_chk = on_mouse;      
        window.Repaint();      
    }      
}      

function on_mouse_leave() {      
    on_mouse = false;      
    on_mouse_chk = 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();
}






Спасибо.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет

Сообщение #13 vladj » 03.10.2013, 21:06

Именно с изменением цвета нужно ? А такой не пробовал ?(by tech). Работает без траблов, узенький (20)...
Код: Выделить всё
var img_dir = fb.FoobarPath+"\\skins\\tech\\images\\";

//=================================================// Tools
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));
}

//Text formatting function
function StringFormat() {
   var h_align = 0, v_align = 0, trimming = 0, flags = 0;
   switch (arguments.length)
   {
      // fall-thru
      case 4:
         flags = arguments[3];
      case 3:
         trimming = arguments[2];
      case 2:
         v_align = arguments[1];
      case 1:
         h_align = arguments[0];
         break;
      default:
         return 0;
   }
   return ((h_align << 28) | (v_align << 24) | (trimming << 20) | flags);
}

//Time formatting 00:00:00
function Format_hms(t){
   var hms;
   switch (t.length)
   {
      case 4:
         hms="00:0"+t;
         break;
      case 5:
         hms="00:"+t;
         break;
      case 7:
         hms="0"+t;
         break;
      default:
         hms=t;
         break;
   }
   return hms;
}

//Time formatting secondes -> 0:00
function TimeFmt(t){
   var zpad = function(n){
   var str = n.toString();
      return (str.length<2) ? "0"+str : str;
   }
   var h = Math.floor(t/3600); t-=h*3600;
   var m = Math.floor(t/60); t-=m*60;
   var s = Math.floor(t);
   if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
   return m.toString()+":"+zpad(s);
}

StringAlignment = {Near: 0,Centre: 1,Far: 2};

var font = gdi.Font("tahoma", 9, 0);

var l_stringformat = StringFormat(StringAlignment.Near, StringAlignment.Centre);
var c_stringformat = StringFormat(StringAlignment.Centre, StringAlignment.Centre);
var r_stringformat = StringFormat(StringAlignment.Far, StringAlignment.Centre);

var g_drag = 0;
var g_drag_seek = 0;
var g_drag_hov = 0;

var ww;
var wh;

//Titleformatting
var len = fb.Titleformat("%length%");
var elap = fb.TitleFormat("%playback_time%");
var remain = fb.TitleFormat("%playback_time_remaining%");
var len_seconds = fb.Titleformat("%length_seconds%");

var pos = 0;
var seekpad = 0;
var seekerwidth = 92/2;
var seekstart_bg = 2;
var seekend_bg = 2;
var seekstart = 2;
var seekend = 2;

var g_timer;

var lbtn_click=false;

var refresh_timer=50;
var hov_x;
var pad_y=9;

var marks_xmin;
var marks_xmax;

// ================================================================================/ on_paint
function on_paint(gr) {
   
    gr.SetTextRenderingHint(5);
   
    // background
    gr.FillSolidRect(seekstart+seekpad, pad_y+1, ww-seekstart-seekpad-seekend, 4, RGBA(60, 160, 60, 255));
    gr.FillSolidRect(seekstart+seekpad, pad_y+1, ww-seekstart-seekpad-seekend-1, 3, RGBA(00, 100, 00, 255));
    gr.FillSolidRect(seekstart+seekpad+1, pad_y+2, ww-seekstart-seekpad-seekend-2, 2, RGBA(25, 125, 25, 255));

    gr.FillSolidRect(seekstart+seekpad, 2, 1, 6, RGBA(55, 55, 55, 255));
    gr.FillSolidRect(seekstart+seekpad+1, 2, 1, 6, RGBA(25, 25, 25, 255));

    gr.FillSolidRect(Math.round(ww/2), 2, 1, 6, RGBA(55, 55, 55, 255));
    gr.FillSolidRect(Math.round(ww/2)-1, 2, 1, 6, RGBA(25, 25, 25, 255));

    gr.FillSolidRect(ww-seekend-seekpad-1, 2, 1, 6, RGBA(55, 55, 55, 255));
    gr.FillSolidRect(ww-seekend+seekpad-2, 2, 1, 6, RGBA(25, 25, 25, 255));

   if(fb.PlaybackLength>0)
   {
      if(g_drag)
      {
         pos = seekstart+seekpad+seekerwidth+(ww-(seekstart+seekend+2*(seekpad+seekerwidth))) * g_drag_seek;
      }
      else
      {
         pos = seekstart+seekpad+seekerwidth+(ww-(seekstart+seekend+2*(seekpad+seekerwidth))) * (fb.PlaybackTime / fb.PlaybackLength);
      }
      // stop at the end if track time is corrupted
      pos = pos>marks_xmax-1?marks_xmax-1:pos;

        if (g_drag_hov) {

            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 92, 13, RGBA(0, 0, 0, 25));
            gr.FillSolidRect(Math.floor(pos-46), pad_y-4, 92, 13, RGBA(80, 80, 80, 135));
            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 91, 12, RGBA(25, 25, 25, 135));
            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 90, 11, RGBA(55, 55, 60, 135));
            gr.FillGradRect(Math.floor(pos-46+1), pad_y-3, 90/2, 10, 90, RGBA(25, 25, 25, 70), RGBA(65, 65, 70, 70));
            gr.FillGradRect(Math.floor(pos-46+1+90/2), pad_y-3, 90/2, 10, 90, RGBA(65, 65, 70, 70), RGBA(25, 25, 25, 70));
            gr.DrawString(Format_hms(TimeFmt(fb.PlaybackTime))+"   "+Format_hms(TimeFmt(fb.PlaybackLength)), font, (lbtn_click==true)?RGBA(250,250,250,80):RGBA(250,250,250,40), Math.floor(pos-43), pad_y-7, 84, 18, c_stringformat);
           
            gr.FillSolidRect(Math.floor(hov_x-46)+1, pad_y-3, 92, 13, RGBA(0, 0, 0, 45));
            gr.FillSolidRect(Math.floor(hov_x-46), pad_y-4, 92, 13, RGBA(80, 80, 80, 255));
            gr.FillSolidRect(Math.floor(hov_x-46)+1, pad_y-3, 91, 12, RGBA(25, 25, 25, 255));
            gr.FillSolidRect(Math.floor(hov_x-46)+1, pad_y-3, 90, 11, RGBA(55, 55, 60, 255));
            gr.FillGradRect(Math.floor(hov_x-46+1), pad_y-3, 90/2, 10, 90, RGBA(25, 25, 25, 160), RGBA(65, 65, 70, 160));
            gr.FillGradRect(Math.floor(hov_x-46+1+90/2), pad_y-3, 90/2, 10, 90, RGBA(65, 65, 70, 160), RGBA(25, 25, 25, 160));
            gr.DrawString(Format_hms(TimeFmt(fb.PlaybackLength*g_drag_seek))+"   "+Format_hms(TimeFmt(fb.PlaybackLength)), font, (lbtn_click==true)?RGBA(250,250,250,220):RGBA(250,250,250,120), Math.floor(hov_x-43), pad_y-7, 84, 18, c_stringformat);

        } else {

            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 92, 13, RGBA(0, 0, 0, 45));
            gr.FillSolidRect(Math.floor(pos-46), pad_y-4, 92, 13, RGBA(80, 80, 80, 255));
            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 91, 12, RGBA(25, 25, 25, 255));
            gr.FillSolidRect(Math.floor(pos-46)+1, pad_y-3, 90, 11, RGBA(55, 55, 60, 255));
            gr.FillGradRect(Math.floor(pos-46+1), pad_y-3, 90/2, 10, 90, RGBA(25, 25, 25, 160), RGBA(65, 65, 70, 160));
            gr.FillGradRect(Math.floor(pos-46+1+90/2), pad_y-3, 90/2, 10, 90, RGBA(65, 65, 70, 160), RGBA(25, 25, 25, 160));
            gr.DrawString(Format_hms(TimeFmt(fb.PlaybackTime))+"   "+Format_hms(TimeFmt(fb.PlaybackLength)), font, (lbtn_click==true)?RGBA(250,250,250,125):RGBA(250,250,250,075), Math.floor(pos-43), pad_y-7, 84, 18, c_stringformat);

        }
       
    }

}

// ================================================================================/ on_size
function on_size() {
    ww = window.Width;
    wh = window.Height;
   
   refresh_timer = (fb.PlaybackLength>0)?(Math.floor(len_seconds.Eval()/60)*25):50;
   if (refresh_timer<20) refresh_timer=20;
   
   marks_xmin=seekstart-1+seekerwidth;
   marks_xmax=ww-seekend+1-seekerwidth;
}

// ==============================================================/ mouse left click
function on_mouse_lbtn_down(x,y) {
   lbtn_click=true;

    if(x>seekstart+seekpad && x<ww-(seekend+seekpad) && y>0)
    {
       if(fb.PlaybackLength){g_drag = 1;}
       g_drag_seek = (x>seekstart+seekpad+seekerwidth)?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):(x<(ww-(seekend+seekpad+seekerwidth)))?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):1;
       g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
    }

   window.Repaint();
}

// ==============================================================/ double click
function on_mouse_lbtn_dblclk(x, y, mask) {
}

// ==============================================================/ mouse move
function on_mouse_move(x, y) {
   
   // Seeker
   hov_x = x;
   if((fb.IsPlaying&&fb.PlaybackLength>0&&x>seekstart_bg&&x<ww-seekend_bg&&y>0)||(g_drag&&x>seekstart_bg&&x<ww-seekend_bg))
   {
        window.SetCursor(32649);
      g_drag_hov = true;
      g_drag_seek = (x>seekstart+seekpad+seekerwidth)?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):(x<(ww-(seekend+seekpad+seekerwidth)))?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):1;
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
   } else {
        window.SetCursor(32512);
      g_drag_hov = false;
   }
   
    hov_x = (x<seekstart+seekpad+seekerwidth)?seekstart+seekpad+seekerwidth:(x>ww-seekend-seekpad-seekerwidth)?ww-seekend-seekpad-seekerwidth:hov_x;
   
   window.Repaint();
}

// ==============================================================/ left button up
function on_mouse_lbtn_up(x, y) {
   lbtn_click=false;
   
   // Seeker
   if(g_drag)
   {
      g_drag = 0;
      g_drag_seek = (x>seekstart+seekpad+seekerwidth)?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):(x<(ww-(seekend+seekpad+seekerwidth)))?(x-(seekstart+seekpad+seekerwidth))/(ww-(seekstart+seekend+2*(seekpad+seekerwidth))):1;
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
      fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
   }
   
   window.Repaint();
}

// ==============================================================/ mouse Leave
function on_mouse_leave() {
   g_drag_hov = false;

   window.Repaint();
}

function on_playback_seek(time) {
   window.Repaint();
}

// ==============================================================/ playback time (every seconds)
function on_playback_time(time) {
}

function on_playback_stop() {
   if(g_timer){
      window.KillTimer(g_timer);
   }
   window.Repaint();
}

function on_playback_pause(state) {
   window.Repaint();
}

// ==============================================================/ Playback starting
function on_playback_starting(cmd, is_paused) {
}

// ==============================================================/ Redraw more than once per sec
function on_timer(id)
{
    window.Repaint();
}

// ===============================================================================/ new track
function on_playback_new_track(info) {
   
   refresh_timer=Math.floor(len_seconds.Eval()/60)*25;
   if (refresh_timer<25) refresh_timer=25;
   
    if(fb.PlaybackLength>0) g_timer = window.CreateTimerInterval(refresh_timer);
   
    window.Repaint();
   CollectGarbage();

}

// ===============================================================================/ Seek using mouse wheel
function on_mouse_wheel(delta){
   if(delta>0)
        fb.PlaybackTime+=1;
   else
        fb.PlaybackTime-=1;
}

function on_mouse_rbtn_up(x, y) {
    return true;
}
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #14 kgena_ua » 04.10.2013, 13:47

Все, разобрался. gr.GdiDrawText не поддерживает RGBA.
Еще и ошибку нашел, которую раньше не видел.
Vladj, скрипт интересный . Изучаю для самообразования.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет


Вернуться в Есть вопрос!