Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #41 Zin-Uru » 11.01.2010, 17:39

Уже сам разобрался. :)
Последний раз редактировалось Zin-Uru 11.01.2010, 18:58, всего редактировалось 1 раз.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #42 Com » 18.02.2010, 00:17

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(){
}
но хочу сделать совсем подругому, чтобы надпись отображалась когда курсор мыши находится над регулятором и пропадала, когда курсор с него уходит. нужно использовать что-то вроде on mouse over, но только я этот JScript впервые вижу вообще и хз как это сделать..


add:
и еще вопрос.
Код: Выделить всё
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(){
}


это бегущая строка. но она обновляется только по событию on paint, что не хорошо. на какое событие лучше ее прикрутить и как добавить таймер скорости, не зависимый от воспроизведения трека? тоесть чтобы строка крутилась всегда с одинаковой скоростью, даже если воспроизведение на паузе или остановлено.
Последний раз редактировалось Com 18.02.2010, 02:45, всего редактировалось 1 раз.
Com
Репутация: 0
С нами: 14 лет 1 месяц

Сообщение #43 Com » 10.03.2010, 18:43

так никто и не может помочь?
есть ли вообще возможность обработки событий по наведению мыши в этом плагине?
и раз уж так пошло, подскажите хоть что почитатать можно про функции этих скриптов. все что нахожу по гуглу - это java для веб страниц, но по моему это немного не то. а на обычный java эти скрипты не похожи
Com
Репутация: 0
С нами: 14 лет 1 месяц

Сообщение #44 Zin-Uru » 10.03.2010, 18:50

2Com, то что вам нужно, в on_mouse_move надо ковырять по идее. В имеющемся у вас скрипе эта функция уже есть, так что достаточно сделать там необходимые изменения.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #45 Com » 11.03.2010, 00:33

Zin-Uru:в on_mouse_move надо ковырять по идее.
хм.. я по ошибке думал что она работает только по нажанию кнопки мыши  *sorry*
осталось только узнать как сделать функцию, которая будет вызываться 1 раз в секунду хотя бы...
Com
Репутация: 0
С нами: 14 лет 1 месяц

Сообщение #46 Zin-Uru » 11.03.2010, 00:42

Com:осталось только узнать как сделать функцию, которая будет вызываться 1 раз в секунду хотя бы...
on_playback_time

А если надо даже когда трек на паузе или остановлен, то тут посложнее:
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;
//сюда собственно писать то, что должно происходить с течением времени
}
Последний раз редактировалось Zin-Uru 11.03.2010, 00:51, всего редактировалось 1 раз.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #47 van4o » 16.03.2010, 20:09

подскажите пожалуйста как сделать так,чтобы при вращении колесика громкость изменялась наоборот,ну всмысле как мне инверсию сделать...а то при вращении колесика вниз громкость прибавляется...а я хочу наоборот...стоит foobar complex ideas 1.0
Последний раз редактировалось van4o 16.03.2010, 20:19, всего редактировалось 1 раз.
van4o
Репутация: 0
С нами: 14 лет

Сообщение #48 Com » 17.03.2010, 00:52

если в скрипте что-то типа:
Код: Выделить всё
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
Репутация: 0
С нами: 14 лет 1 месяц

Сообщение #49 van4o » 20.03.2010, 14:22

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();
}
если там на +/- значения стоят, то просто поменяй местами + и - в формулах. если не выйдет - скинь скрипт, я поправлю

СПАСИБО ОГРОМНОЕ ВСЁ ПОЛУЧИЛОСЬ!!!
van4o
Репутация: 0
С нами: 14 лет

Сообщение #50 Axess » 08.04.2010, 13:46

есть ли в WSH Mod функция которая реагирует на максимизацию и обратно окна фубара?
т.к при максимизации вместо WSH элементов становятся просто квадраты, пока не произойдет действие window.Repaint()
p.s: постоянно Repaint делать не хочется, хотелось бы что то типа function on_fb_maximized() :)
Axess M
Аватара
Откуда: Kirov
Репутация: 16
С нами: 14 лет 7 месяцев

Сообщение #51 Zin-Uru » 08.04.2010, 16:33

on_size() должна подойти.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #52 Axess » 08.04.2010, 19:51

в on_size() нельзя писать repaint - настоятельное пожелание автора плагина :)
Axess M
Аватара
Откуда: Kirov
Репутация: 16
С нами: 14 лет 7 месяцев

Сообщение #53 Zin-Uru » 08.04.2010, 20:16

Значит надо ввести переменную, которая будет в on_size() менять свое значение, а отслеживаться это будет к примеру в on_playback_time(time) и при изменении значения делать перерисовку.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #54 Aum » 10.05.2010, 22:06

На гидрогене нашел интересный скрипт:
показывает инфо о воспроизводимом треке (по типу track info), состоящее из 3ех строчек, которые переключаются колесиком мыши, и есть прокрутка..)

Код: Выделить всё
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

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

Сообщение #55 Zin-Uru » 10.05.2010, 22:27

2Aum, поменять строку:
g_metadb = fb.GetNowPlaying();
на:
g_metadb = fb.GetFocusItem();
А также в строке:
//function on_metadb_changed() {
и следующих трех убрать слэши //
Последний раз редактировалось Zin-Uru 10.05.2010, 22:38, всего редактировалось 1 раз.
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #56 Aum » 10.05.2010, 23:03

все перетыкал... все равно работает только при воспроизведении...и показывает "нау плеинг" трек... :(
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #57 Zin-Uru » 10.05.2010, 23:13

Код: Выделить всё
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
Zin-Uru M
Репутация: 45
С нами: 14 лет 6 месяцев

Сообщение #58 Aum » 10.05.2010, 23:22

Да это то, что доктор прописал!!!
*пыво* *пыво* *пыво*
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #59 Aum » 14.05.2010, 20:09

еще нашел интересный скриптик - отображает порядок проигрывания треков одной кнопкой (кнопки белые, должны находиться в папке плеера\images\order\):
Код: Выделить всё
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();
}

И сразу вопрос возник: можно ли прописать два варианта отображения каждой кнопки: 1ый-обычный, 2ой - наведен курсор мыши???
Последний раз редактировалось Aum 14.05.2010, 20:12, всего редактировалось 1 раз.
Aum M
Аватара
Репутация: 20
С нами: 14 лет

Сообщение #60 Axess » 14.05.2010, 20:35

2Aum
можно - вводишь переменную - например mouse_hover и в on_paint по if(mouse_hover) разные отрисовки.
в on_mouse_move(x,y) - переменную ставишь в "1" допустим, а в on_mouse_leave() - "0"
Axess M
Аватара
Откуда: Kirov
Репутация: 16
С нами: 14 лет 7 месяцев

Пред.След.

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