Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #61 Aum » 15.05.2010, 13:38

если можно, подробнее, а то со скриптами оооооочень туговато *ну*

function on_mouse_move(x,y) {

if(mouse_hover)
var icon = gdi.Image(FP+ "order/pbo_" + PBO + ".png");
else
var icon = gdi.Image(FP+ "order2/pbo_" + PBO + ".png");
            window.Repaint();
}
если мышь наведена, берем иконки из первой папки, если нет из другой папки...как все это правильно оформить? :-[
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #62 Zin-Uru » 15.05.2010, 13:46

Код: Выделить всё
var on_mouse = false;

function on_mouse_move(x,y) {
  on_mouse = true;
  window.Repaint();
}

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

function on_paint(gr) {
  var icon;

  if(on_mouse) {
    icon = gdi.Image(FP+ "order/pbo_" + PBO + ".png");
  } else {
    icon = gdi.Image(FP+ "order2/pbo_" + PBO + ".png");
  }
}

2Aum, естественно, все это надо вставить в уже имеющийся скрипт (функции on_paint совместить).
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #63 Aum » 15.05.2010, 14:14

Код: Выделить всё
function on_paint(gr) {
  var icon;
  var icon2;
     var PBO = fb.PlayBackOrder;
   var FP = fb.ComponentPath.replace("components","images");
   var dropdown = gdi.Image(FP + "order2/pbo_dropdown.png");
   var icon = gdi.Image(FP+ "order2/pbo_" + PBO + ".png");
        var icon2 = 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,0,0,20,20,0,0,20,20);

  if(on_mouse) {
    icon = gdi.Image(FP+ "order2/pbo_" + PBO + ".png");
  } else {
    icon2 = gdi.Image(FP+ "order/pbo_" + PBO + ".png");
  }
}
не могу заставить его брать нужную папку? берет либо, 1ую, либо 2ую?? *ну*
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #64 Zin-Uru » 15.05.2010, 14:22

2Aum,
if(on_mouse) и т.д. должно же до отрисовки стоять, а не после. Т.е. до gr.DrawImage(icon,0,0,20,20,0,0,20,20);
А как у тебя сейчас, он сначала рисует по стандартному назначению, а потом только проверяет, что рисовать надо. Естественно, что получается не то. :)
И icon2 тут вообще не нужен.

Код: Выделить всё
function on_paint(gr) {
     var PBO = fb.PlayBackOrder;
   var FP = fb.ComponentPath.replace("components","images");
   var dropdown = gdi.Image(FP + "order2/pbo_dropdown.png");
   var icon;
   var ww = window.Width;
   var wh = window.Height;

           if(on_mouse) {
               icon = gdi.Image(FP+ "order2/pbo_" + PBO + ".png");
           } else {
               icon = gdi.Image(FP+ "order/pbo_" + PBO + ".png");
           }
   
   //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,0,0,20,20,0,0,20,20);
}
Последний раз редактировалось Zin-Uru 15.05.2010, 14:24, всего редактировалось 1 раз.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #65 Aum » 15.05.2010, 14:37

вспоминается учеба: поясняют - вроде все просто и понятно... тока препод отходит - все забыл!
[:-} готово!!!
спасиб за пояснения...
потихоньку азы программирования изучаю...и само главно - бесплатно! (такого репетиторства ща не найдешь)!! :)
*пыво*
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #66 Zin-Uru » 15.05.2010, 14:48

Программирование - довольная занятная вещь, особенно если код красиво написан и эффективно делает то, что надо. :) Рад помочь.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #67 Aum » 04.06.2010, 16:39

Zin-Uru:
Код: Выделить всё
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 backcol = RGB(240,240,226);")
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #68 Zin-Uru » 04.06.2010, 16:43

2Aum, мешает не переменная, а собственно команда отрисовки фона:

gr.FillSolidRect(0,0, window.Width, window.Height, backcol);

Поставь перед ней //.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #69 Aum » 07.06.2010, 21:11

вопрос в следующем возможно прописать такую строку-команду (допустим в скрипте выше), чтоб отображала количество, время проигрывания и размер (учитывая cue) всех треков в плейлисте?
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #70 Zin-Uru » 07.06.2010, 21:29

2Aum, теоретически можно открыть с жесткого диска файл текущего плейлиста и с учетом его разметки вытянуть имена всех его элементов, после чего получить размер каждого из них и сложить. Тогда будет общий размер. Для общего же времени даже такой способ не получится реализовать, т.к. чтобы узнать время, необходим кроме размера файла еще битрейт, размер области с тегами и т.п. А их для каждого файла если и можно как-то получить, это будет сильно напряжно. Да и вариант с размером сложен, особенно для .fpl-плейлистов.

Может быть возможно реализовать желаемое, вызвав из скрипта команду "Выделить все", а после этого как-то с помощью fb.GetSelection() посчитать желаемое. Но не уверен, что даже такое получится реализовать. ;) Поэкспериментируй.
Последний раз редактировалось Zin-Uru 07.06.2010, 21:35, всего редактировалось 1 раз.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #71 Максим » 08.06.2010, 21:32

Aum
Возможно. Используй COM Automation server.
Максим M
Аватара
Репутация: 93
С нами: 17 лет

Сообщение #72 Aum » 14.07.2010, 11:48

есть 2 нужные команды для подкастов:
контекстное меню\Podcatcher\download podcast
контекстное меню\Podcatcher\archive podcast
как их прописать(вызвать) в WHS?и вообще возможно ли?

Из главного меню - понятно как вызывать, (но там нет нужных):
fb.RunMainMenuCommand("View/Podcatcher Feed Properties");
А из контекстного???
Последний раз редактировалось Aum 24.07.2010, 10:40, всего редактировалось 1 раз.
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #73 bulletproof2k » 27.05.2012, 22:46

Доброго времени суток форумчане, нужна кнопка громкости как стандартная в правом углу фубар которая появляется при нажатии на 0.00dB, только вертикальная ну и собснно нужен код для вставки WSH P.M. :cyclop:
bulletproof2k M
Аватара
Откуда: Воронеж
Репутация: -19
С нами: 11 лет 10 месяцев

Сообщение #74 onv » 28.05.2012, 12:19

Aum:Из главного меню - понятно как вызывать, (но там нет нужных):
fb.RunMainMenuCommand("View/Podcatcher Feed Properties");
А из контекстного???

fb.RunContextCommand
fb.RunContextCommandWithMetadb
onv M
Откуда: Харьков
Репутация: 52
С нами: 11 лет 10 месяцев

Сообщение #75 bulletproof2k » 28.05.2012, 20:43

А на мой вопрос кто-нибудь ответит? :eh:
bulletproof2k M
Аватара
Откуда: Воронеж
Репутация: -19
С нами: 11 лет 10 месяцев

Сообщение #76 to0freak » 04.10.2012, 23:09

Подскажите, есть ли возможность создать кнопку, выделяющую весь альбом активного на данный момент трека?
to0freak
Репутация: 0
С нами: 11 лет 5 месяцев

Сообщение #77 vladj » 04.10.2012, 23:50

А зачем кнопка, щёлкай по шапке альбома в плейлисте, всё что там лежит и выделится.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #78 to0freak » 05.10.2012, 09:00

vladj, кнопка нужна, во-первых, потому что шапки альбома нет вообще - плейлист показывает только выделенную группу, а группа выделяется с помощью cover_flow - такова реализация, а во-вторых, для того, чтобы можно было сделать одним кликом следующее: удалить весь альбом, кропнуть альбом, найти теги в дискожс и т.д.
to0freak
Репутация: 0
С нами: 11 лет 5 месяцев

Сообщение #79 Nikolaich » 15.10.2012, 13:40

Я такое использую:
Код: Выделить всё
/////////////////////// бегущая строка - сикбар 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" :

"----=== 1.1.13===----");// название сборки
    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
Последний раз редактировалось Nikolaich 25.03.2013, 10:43, всего редактировалось 2 раз(а).
Причина: Выделил блок кода
Nikolaich M
Откуда: Пермь
Репутация: 16
С нами: 14 лет 10 месяцев

Сообщение #80 sudden » 16.10.2012, 00:17

Nikolaich, спрятали бы свою портянку под спойлер :)
sudden M
Репутация: 22
С нами: 17 лет 1 месяц

Пред.След.

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