Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #241 AHAPXICT » 26.02.2015, 15:43

Проверил WHS Panel Modded v1.5.8 Beta 1 от marc2003 и сразу выяснилось что часики то не работают. Замучился пока нашёл как "скомпилить":
var clock_time = window.CreateTimerInterval(1000); теперь var clock_timer = window.SetInterval(on_timer, 1000);

Как оказывается marc2003 лишнее удалил))))
Код: Выделить всё
-v1.5.7
- CHG: Compiled with new SDK. Requires foobar2000 v1.3 or above.
- ADD: Script errors are now displayed in a popup window in addition to the Console like it was previously.
- ADD: Default right click menu now has a "Reload" script option. This saves opening/closing the dialog when working on external files.
- CHG: Remove functions marked as obsolete 2+ years ago. There are newer alternatives for all of them.
    window.WatchMetadb
    window.UnWatchMetadb
    window.CreateTimerTimeout
    window.CreateTimerInterval
    window.KillTimer
    UpdateFileInfo
- CHG: AppendMenuItem no longer accepts MF_POPUP as a flag. You should be using AppendTo instead.
- CHG: utils.GetAlbumArt removed as corresponding function has been removed from SDK.
- CHG: Safe mode disabled by default. If you're reading this, you're probably going to be using scripts that require this!
- FIX: EstimateLineWrap no longer leaves stray punctuation when wrapping text at end of line.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 6 месяцев

Сообщение #242 kgena_ua » 27.02.2015, 12:56

AHAPXICT, я земенил:
var clock_time = window.CreateTimerInterval(1000);
и
function on_timer(id) {
d = new Date();
window.Repaint();
}

на
var clock_timer = window.SetInterval(function() {d = new Date(); window.Repaint()}, 500);
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #243 seriousstas » 28.02.2015, 06:21

kgena_ua
Ест такой скрипт , для доступа к DSP украшалкам (панелька в виде кнопки S.png) :
Код: Выделить всё
////San_dr http://forum.oszone.net ////

window.MinHeight = window.MaxHeight = 80;
window.MinWidth = window.MaxWidth = 80;
var MF_STRING = 0x00000000
var WshShell = new ActiveXObject("WScript.Shell");
var tooltip = window.CreateTooltip();
tooltip.SetMaxWidth( 80 );
var m_hover4;
var m_hover=false, m_hover1=false;
var ww = 0, wh = 0;
var timer_started = false;
function on_mouse_lbtn_down(x, y){

  if(y>0 ){
   var _menu = window.CreatePopupMenu();
   var i = 1, dsp=window.GetProperty("DSP","0");
   _menu.AppendMenuItem(MF_STRING, i++, "Без DSP");
   _menu.AppendMenuItem(MF_STRING, i++, "Минимальная");
   _menu.AppendMenuItem(MF_STRING, i++, "Оптимальная");
    _menu.AppendMenuItem(MF_STRING, i++, "Стерео в 5.1");
    _menu.AppendMenuItem(MF_STRING, i++, "Стерео в 5.0");
   _menu.AppendMenuItem(MF_STRING, i++, "Стерео в 4.0");
   _menu.AppendMenuItem(MF_STRING, i++,"iZOzone");
   _menu.AppendMenuItem(MF_STRING, i++,"Наушники Bauer ");
   _menu.AppendMenuItem(MF_STRING, i++,"ЭХО");
   _menu.AppendMenuItem(MF_STRING, i++,"МОЙ");
   _menu.AppendMenuItem(MF_STRING, i, "Показать DSP");
   _menu.CheckMenuRadioItem(1, i, dsp*1);
   ret = _menu.TrackPopupMenu(x, y);
   if (ret >= 1 && ret <= i)
   {
      switch (ret) {
case 1:window.SetProperty("DSP","1");
    fb.RunMainMenuCommand("Playback/DSP settings/OFF");break;   
case 2:window.SetProperty("DSP","2");
    fb.RunMainMenuCommand("Playback/DSP settings/Min");break;   
case 3:window.SetProperty("DSP","3");
    fb.RunMainMenuCommand("Playback/DSP settings/Optim");break;   
case 4:window.SetProperty("DSP","4");
    fb.RunMainMenuCommand("Playback/DSP settings/51");break;   
case 5:window.SetProperty("DSP","5");
    fb.RunMainMenuCommand("Playback/DSP settings/50");break; 
case 6:window.SetProperty("DSP","6");
    fb.RunMainMenuCommand("Playback/DSP settings/40");break;   
case 7:window.SetProperty("DSP","7");
    fb.RunMainMenuCommand("Playback/DSP settings/iZOzone");break; 
case 8:window.SetProperty("DSP","8");
    fb.RunMainMenuCommand("Playback/DSP settings/Resampler");break; 
case 9:window.SetProperty("DSP","9");
    fb.RunMainMenuCommand("Playback/DSP settings/ECHO");break;   
case 10:window.SetProperty("DSP","10");
    fb.RunMainMenuCommand("Playback/DSP settings/Default");break;
case 11:
    fb.RunMainMenuCommand("Playback/DSP settings/Preferences");break;
  }
    window.Repaint();
  }
 }
}


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

function on_paint(gr) { 
   gr.SetSmoothingMode(2);
var DSP = window.GetProperty("DSP","1"),ww=window.Width, wh=window.Height;
    switch (DSP) {
    case "1":text = "DSP OFF";break;
    case "2":text = "Minimum";break;
    case "3":text = "Optimal";;break;
    case "4":text = "2.0 in 5.1";break;
    case "5":text = "2.0 in 5.0";break;
    case "6":text = "2.0 in 4.0";break;
    case "7":text = "iZOzone";break;
    case "8":text = "Наушники Bauer";break;
    case "9":text = "ECHO";break;
    case "10":text = "- MY -";break;
         }
    var text_color = m_hover1 ? RGB(0,0,0) :  RGB(215-51-51);
    gr.DrawImage( gdi.Image( fb.FoobarPath + "\\themes\\" +'S.png'),0,0,80,80,0,0,80,80,0,255);
    gr.GdiDrawText(text,gdi.Font("Eras Bold ITC", 14),text_color, 3,6,75, wh,0x00000001);
}
function on_mouse_move(x,y) {

    if (y>47 && y<66){
   window.SetCursor(32649);
   if ( !m_hover1 ) {

        tooltip.Text = '';
        tooltip.Activate();
      window.Repaint();
     }
  }
}
 
К Вам просьба сделать доступ к списку пресетов под палец в авто (как в поиске был выбор сортировки ) . Можете помочь ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #244 kgena_ua » 28.02.2015, 15:53

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

Сообщение #245 vladj » 28.02.2015, 16:22

Список ему вероятно нужен для работы на мониторе в автомобиле, т.е. небольшом. Потому договоритесь какие строки
можно убрать. Что-бы потом не переделывать. Сомневаюсь что ему нужны будут iZOzone, Наушники Bauer, ЭХО.
Функция Стерео в *** нужна тоже только одна, в зависимости от его инсталла в машине, от числа каналов, имхо.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 3 месяца

Сообщение #246 seriousstas » 28.02.2015, 18:53

kgena_ua
Думаю список необходимо отображать вертикально.
Да, так как это есть сейчас (ну и автозакрытие списка при выборе ) .Можно пользоваться , но пальцем попадаешь с третьего раза (проблема высоких разрешений при малых диагоналях)
vladj
Ну 10 позиций должно поместится , а список можно откорректировать быстро ...
В скрипте с поиском можно поменять высоту колонок и шрифт по своим размерам экрана
(я надеюсь там найдётся способ нахождения трека в основном листе , без группировки в Search ) .

Ozone кстати мягко привносит изменения (4-5 малотребовательны к ресурсам , хотя и 6-ка норм )
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #247 kgena_ua » 28.02.2015, 21:01

seriousstas, так понимаю нужно что-то вроде этого
Безымянный.png

панель, которая вызывается какой-то кнопкой.
seriousstas:автозакрытие списка при выборе
Тут немного сложнее. Я не знаю как можно закрыть панель из WSH. Можно в PSS. Т.е. в WSH создаем переменную, которую затем читаем в PSS,
а там $showpanel_c(.... .
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #248 seriousstas » 28.02.2015, 23:43

панель, которая вызывается какой-то кнопкой.
Да , это то, что нужно . Скрипт , который выше содержит ссылку на картинку кнопки , на которой при выборе
отображается (в виде текста) выбранный пресет .
По поводу автозакрытия (оно сейчас реализовано (через PopupMenu) , но так понимаю если вызывать через вашу панель - не выйдет ) - не критично ,
но если объясните на пальцах(на примере) , как это сделать через PSS - попробую .
Так открывается-закрывается панель поиска в последней сборке от macarych :
Код: Выделить всё
$if($isvisible_c(search)
    ,
    $drawtext(L,10,$sub(%hh%,85),80,80,%color0%,hcenter vcenter)
    $imagebutton(10,$sub(%hh%,85),80,80,%b0%,%b1%,PANELSHOW:search:0;REFRESH,%b_options1%,%b_options2%)
    ,
    $drawtext(L,10,$sub(%hh%,85),80,80,%color0%,hcenter vcenter)
    $imagebutton(10,$sub(%hh%,85),80,80,%b0%,%b1%,PANELSHOW:search:1;REFRESH,%b_options1%,%b_options2%)
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #249 kgena_ua » 01.03.2015, 15:25

seriousstas, скрипт для выбора DSP.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

var font = gdi.Font("arial",14,1);
var ww = window.Width;   
var wh = window.Height; 

DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_SINGLELINE = 0x00000020;
DT_VCENTER = 0x00000004;

var t_color = RGB(180,180,180);
var m_color = RGB(120,120,120);
var sel_color = RGB(250,250,250);
var sel_bg_color = RGB(80,80,80);

var dsp = window.GetProperty("dsp", 1);

var on_mouse = false;

var dsp_m = Array("Без DSP","Минимальная","Оптимальная","Стерео в 5.1","Стерео в 5.0","Стерео в 4.0","iZOzone","Наушники Bauer","ЭХО","МОЙ","Показать DSP");
var it = dsp_m.length;
var sel_dsp;

var fso = new ActiveXObject("Scripting.FileSystemObject");
//var set_path = fb.ProfilePath + "\\settings\\";
var set_path = fb.ProfilePath;
if(!fso.FileExists( set_path + "dsp_off_0") && !fso.FileExists( set_path + "dsp_off_1")) fso.CreateTextFile( set_path + "dsp_off_1", true);

function on_paint(gr) {
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
   
    t_height = gr.CalcTextheight("abc", font) + 10;

    if(on_mouse) gr.FillSolidRect (0, y_row, ww, t_height, sel_bg_color);

    for (var i = 0; i < it; i = i + 1) {
        color = (y_color > t_height * i && y_color < t_height * (i + 1) && on_mouse) || dsp == i + 1 ? sel_color : m_color;;
        gr.GdiDrawText(dsp_m[i], font, color, 0, t_height * i, ww, t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);
    }
//    gr.GdiDrawText(dsp + "  " + sel_dsp, font, RGB(200,200,200), 0, 5, ww - 10  , wh, DT_RIGHT);
}

function on_mouse_lbtn_up (x, y){
    for (var i = 0; i < it; i = i + 1) {
        if (y > t_height * i && y < t_height * (i + 1)) sel_dsp = i + 1;
    }
    if (sel_dsp != it) {dsp = sel_dsp; window.SetProperty("dsp", sel_dsp)};
    dsp_set();
}

function dsp_set(){
    switch (sel_dsp) {
    case 1:
        fb.RunMainMenuCommand("Playback/DSP settings/OFF");break;   
    case 2:
        fb.RunMainMenuCommand("Playback/DSP settings/Min");break;   
    case 3:
        fb.RunMainMenuCommand("Playback/DSP settings/Optim");break;   
    case 4:
        fb.RunMainMenuCommand("Playback/DSP settings/51");break;   
    case 5:
        fb.RunMainMenuCommand("Playback/DSP settings/50");break; 
    case 6:
        fb.RunMainMenuCommand("Playback/DSP settings/40");break;   
    case 7:
        fb.RunMainMenuCommand("Playback/DSP settings/iZOzone");break; 
    case 8:
        fb.RunMainMenuCommand("Playback/DSP settings/Resampler");break; 
    case 9:
        fb.RunMainMenuCommand("Playback/DSP settings/ECHO");break;   
    case 10:
        fb.RunMainMenuCommand("Playback/DSP settings/Default");break;
    case 11:
        fb.RunMainMenuCommand("Playback/DSP settings/Preferences");break;
    }
    if (sel_dsp != it) close_panel();
}

var y_color, y_row;
function on_mouse_move(x,y) {
    window.SetCursor(32649);
    on_mouse = true;
    y_color = y;
    for (var i = 0; i < it; i = i + 1) {
        if (y > t_height * i) {y_row = t_height * i}
    }
    window.Repaint();
}

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

function on_size(){   
    ww = window.Width;   
    wh = window.Height;   
}

function close_panel() {
    fso.deleteFile( set_path + "dsp_off_" + "*" );
    fso.CreateTextFile( set_path + "dsp_off_0" );
    RefreshPSS();
    clear_flag();
}

var g_timer;
function clear_flag(){
    g_timer = window.SetTimeout(function() {
        if(fso.FileExists( set_path + "dsp_off_0")) {
            fso.deleteFile( set_path + "dsp_off_" + "*" );
            fso.CreateTextFile( set_path + "dsp_off_1" )
            window.ClearTimeout(g_timer);
        }
    }, 20);
}

function RefreshPSS() {
    if (fb.IsPlaying || fb.IsPaused) {   
        fb.RunMainMenuCommand("Playback/Play or Pause");
        fb.RunMainMenuCommand("Playback/Play or Pause");
    } else {
        fb.RunMainMenuCommand("Playback/Play");
        fb.RunMainMenuCommand("Playback/Stop");
    }
}

После установки скрипта в корне появится файл dsp_off_1.

Для выключения панели после выбора, в PSS сделал так:

$init_ps_global(dsp_set,0)
$puts(dsp_off,$right($findfile(%ps_user_profile_path%/dsp_off_*),1))

$if( $and($stricmp($get(dsp_off),0),$stricmp(%dsp_set%,1) ),
$set_ps_global(dsp_set,0)
$puts(dsp_off,1)
,)

$imagebutton(x,y,,,*.png,*_on.png,
SETGLOBAL:dsp_set:$ifequal(%dsp_set%,1,0,1);
REFRESH,)

$showpanel_c(WSH_DSP,%dsp_set%)


Т.е.
Создал переменную dsp_set, которая принимает значения 0 - панель закрыть, 1 - открыть панель.
Переключение в $imagebutton(x,y,,,*.... . Включение/выключение панели - $showpanel_c(WSH_DSP,.... .

При выборе пункта меню DSP (панель открыта и %dsp_set% = 1) создается в корне файл dsp_off_0,
Функцией $puts(dsp_off,... присваиваю переменной dsp_off значение последнего символа файла dsp_off_0, т.е. 0.
Затем оператором $if(... обнуляю значение переменной %dsp_set% и панель закрывается.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #250 seriousstas » 01.03.2015, 22:03

Пока удалось открывать-закрывать панель кнопкой .
Я с PSS знаком совсем недавно , подскажите , что куда .
После установки скрипта в корне появится файл dsp_off_1
есть такой (о байт).
В исходном скрипте ссылка на кнопку из WSH :
Код: Выделить всё
      var text_color = m_hover1 ? RGB(0,0,0) :  RGB(215-51-51);
    gr.DrawImage( gdi.Image( fb.FoobarPath + "\\themes\\" +'[b]S.png[/b]'),0,0,80,80,0,0,80,80,0,255);
    gr.GdiDrawText(text,gdi.Font("Eras Bold ITC", 14),text_color, 3,6,75, wh,0x00000001);)
Здесь я должен указать путь к кнопке в этих параметрах так ? :
Код: Выделить всё
$imagebutton(x,y,,,*.png,*_on.png,
SETGLOBAL:dsp_set:$ifequal(%dsp_set%,1,0,1);
REFRESH,)
А скрипт Для выключения панели после выбора
я должен переместить в сплиттер над панелью (обозвав её WSH_DSP) ,
Или часть должна быть в основном?
В итоге графическая кнопка должна выводить панель , а на кнопке "_on.png" я должен видеть название выбранного пресета ,
верно ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #251 macarych » 01.03.2015, 22:55

seriousstas, WSH -> PSS, простой способ управления, поможет разобраться.
macarych M
Аватара
Репутация: 417
С нами: 15 лет 4 месяца

Сообщение #252 seriousstas » 01.03.2015, 23:28

macarych
Принцип переключения (через нулевой файл dsp_off_) понял , но углубится в ту-же PSS мешает новорождённый - это не возможно ,
совсем :)
А пользоваться панелькой хотелось сразу , поэтому на этом этапе прошу помощи
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #253 seriousstas » 02.03.2015, 07:44

Ну вот , как всегда методом тыка и всё работает :)
Вот моя кнопочка :
Код: Выделить всё
$drawtext(L,10,$sub(%hh%,85),80,80,%color0%,hcenter vcenter)
$imagebutton(10,$sub(%hh%,85),80,80,%b0%,%b1%,SETGLOBAL:dsp_set:$ifequal(%dsp_set%,1,0,1); REFRESH,)
$showpanel_c(WSH_DSP,%dsp_set%)


kgena_ua Спасибо большое!
а все-таки , эту часть :
Код: Выделить всё
function RGB(r,g,b){ return (0xff000000|(r<<17)|(g<<8)|(b)); }

function on_paint(gr) { 
   gr.SetSmoothingMode(2);
var DSP = window.GetProperty("DSP","1"),ww=window.Width, wh=window.Height;
    switch (DSP) {
    case "1":text = "DSP OFF";break;
    case "2":text = "Minimum";break;
    case "3":text = "Optimal";;break;
    case "4":text = "2.0 in 5.1";break;
    case "5":text = "2.0 in 5.0";break;
    case "6":text = "2.0 in 4.0";break;
    case "7":text = "iZOzone";break;
    case "8":text = "Наушники Bauer";break;
    case "9":text = "ECHO";break;
    case "10":text = "- MY -";break;
         }
    var text_color = m_hover1 ? RGB(0,0,0) :  RGB(215-51-51);
    gr.DrawImage( gdi.Image( fb.FoobarPath + "\\themes\\" +'S.png'),0,0,80,80,0,0,80,80,0,255);
    gr.GdiDrawText(text,gdi.Font("Eras Bold ITC", 14),text_color, 3,6,75, wh,0x00000001);
}
можно приделать, что-б на кнопке видеть выбранный текст ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #254 kgena_ua » 02.03.2015, 13:13

quote="seriousstas"]а все-таки , эту часть[/quote]
Да,seriousstas, это я просто не досмотрел. Это, в принципе, готовая кнопка на WSH, только немного переделать, чтобы она открывала панель со скриптом (Вчера, 13:25) в PSS.
seriousstas:скрипт Для выключения панели после выбора
Этот (для PSS) скрипт должен быть в той панели, где находится WSH_DSP, в загладке Script.
Вот для примера:
Безымянный.png

Безымянный2.png
Безымянный2.png (10.29 КБ) Просмотров: 2798


Добавится панель WSH_DSP_Button и заменится $imagebutton(... на $showpanel_c(WSH_DSP_Button,........)
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #255 seriousstas » 02.03.2015, 14:29

kgena_ua
да ,писал Выше :
Ну вот , как всегда методом тыка и всё работает :)

То-есть всё ОК !
остаётся только текст пресета на кнопке .
это я просто не досмотрел. Это, в принципе, готовая кнопка на WSH, только немного переделать, чтобы она открывала панель со скриптом (Вчера, 13:25) в PSS.
а сама кнопка ведь уже не нужна , она ведь есть из PSS , может только текст поверх ? (без gr.DrawImage( gdi.Image( fb.FoobarPath + "\\themes\\" +'S.png)
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Сообщение #256 kgena_ua » 02.03.2015, 18:39

WSH clock
Изменения по яркости элементов.
var colorY1 = HSLtoRGB(h, s, l - 0); // Second Hand
var colorY2 = HSLtoRGB(h, s, l - 10); // Minute Hand
var colorY3 = HSLtoRGB(h, s, l - 17); // Hour Hand, Text
var colorY4 = HSLtoRGB(h, s, l - 19); // Minute Dots, Hour Numbers
Код: Выделить всё
// fooClock 1.0 // Coded by Hunter (modifed)

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 hour_font = gdi.Font("Arial", 11, 0);
var date_font = gdi.Font("Arial", 11, 0);

window.GetProperty("DC",true)

var d = new Date();
var clock_timer = window.SetInterval(function() {d = new Date(); window.Repaint()}, 500);

var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

var radius_h = 68;  //65
var radius_h_dot = 3;
var radius_h_numbers = radius_h - 15;
var radius_h_hand = radius_h - 24;
var h_hand_w = 4;

var radius_m = radius_h;
var radius_m_dot = 3;
var radius_m_hand = radius_m - 9;
var m_hand_w = 2;

var radius_s_hand = radius_m - 9;
var s_hand_w = 1;

var center_r = 10;
var center_r2 = 4;

var x, y, ww, wh, w_h;

function on_paint(gr) {

//    gr.FillSolidRect(0, 0, ww, wh, colorY3);   
   
    var a = true;

    if (window.GetProperty("Color") == 1) var color = RGB(0,157,255);
    if (window.GetProperty("Color") == 2) var color = RGB(140,164,179);

    R = getRed(color);   
    G = getGreen(color);   
    B = getBlue(color);   
   
    RGBtoHSL(R, G, B);
   
    var colorY1 = HSLtoRGB(h, s, l - 0);    // Second Hand   
    var colorY2 = HSLtoRGB(h, s, l - 10);   // Minute Hand
    var colorY3 = HSLtoRGB(h, s, l - 17);   // Hour Hand, Text
    var colorY4 = HSLtoRGB(h, s, l - 19);   // Minute Dots, Hour Numbers

//    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);
   
    // ************* Minute Dots
   
    var steps = 60;
    var radius =  radius_m;
    var minute_r = radius_m_dot;

    for (var i = 0; i < steps; i++) {
//        xV = (radius * Math.cos(Math.PI * i / steps * 2));
//        yV = (radius * Math.sin(Math.PI * i / steps * 2));
//        gr.FillEllipse(x + xV - minute_r / 2, y + yV - minute_r / 2, minute_r, minute_r, colorY3);
       
        xV2 = (radius * Math.cos(Math.PI * i / steps * 2));
        yV2 = (radius * Math.sin(Math.PI * i / steps * 2));
        xV1 = ((radius - minute_r) * Math.cos(Math.PI * i / steps * 2));
        yV1 = ((radius - minute_r) * Math.sin(Math.PI * i / steps * 2));

        a && gr.DrawLine(x + xV1 + 1, y + yV1 + 1, x + xV2 + 1, y + yV2 + 1, minute_r, RGB(0,0,0));
        a && gr.DrawLine(x + xV1, y + yV1, x + xV2, y + yV2, minute_r, colorY4);
    } 
   
    // ************* Hour Dots
   
    var steps = 12;
    var radius = radius_h;
    var hour_r = radius_h_dot;

    for (var i = 0; i < steps; i++) {
//        xV = (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2));
//        yV = (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2));
//        gr.FillEllipse(x + xV - hour_r / 2, y + yV - hour_r / 2, hour_r, hour_r, colorY3);

        xV2 = (radius * Math.cos(Math.PI * i / steps * 2));
        yV2 = (radius * Math.sin(Math.PI * i / steps * 2));
        xV1 = ((radius - hour_r - 3) * Math.cos(Math.PI * i / steps * 2));
        yV1 = ((radius - hour_r - 3) * Math.sin(Math.PI * i / steps * 2));

        gr.DrawLine(x + xV1 + 1, y + yV1 + 1, x + xV2 + 1, y + yV2 + 1, hour_r, RGB(0,0,0));
        gr.DrawLine(x + xV1, y + yV1, x + xV2, y + yV2, hour_r, colorY4);
    }
   
    // ************* Hour Numbers

    var radius =  radius_h_numbers;

    for (var i = 0; i < steps; i++) {
       
        i == 0 ? hours = 12 : hours = i;

        xV = (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2));
        yV = (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2));

        shift = i > 0 && i < 6 ? 2 : 0;

        gr.DrawString(hours, hour_font, RGB(0,0,0) + 1, x + xV - hour_r / 2 + shift + 1, y + yV - hour_r / 2 + 1, hour_r, hour_r, 0x11005000); //
        gr.DrawString(hours, hour_font, colorY4, x + xV - hour_r / 2 + shift, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
    // ************* Hour Hand
   
    var steps = 12;
    var radius = radius_h_hand;
    var m_angle = d.getHours() % 12 + d.getMinutes() / 60;

    xV = (radius * Math.cos(Math.PI * m_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * m_angle / steps * 2 - Math.PI / 2));

    gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, h_hand_w, RGB(0,0,0));
    gr.DrawLine(x, y, x + xV, y + yV, h_hand_w, colorY3);   
   
    // ************* Minute Hand

    var steps = 60;
    var radius = radius_m_hand;
    var m_angle = d.getMinutes() + d.getSeconds() / 60;

    xV = (radius * Math.cos(Math.PI * m_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * m_angle / steps * 2 - Math.PI / 2));

    gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, m_hand_w, RGB(0,0,0));
    gr.DrawLine(x, y, x + xV, y + yV, m_hand_w, colorY2);

    // ************* center dot (shadow)

    gr.FillEllipse(x - center_r / 2 + 1, y - center_r / 2 + 1, center_r + 1, center_r + 1, RGBA(0,0,0,40)); //Center dot

    // ************* Second Hand

    var steps = 60;
    var radius = radius_s_hand;
    var s_angle = d.getSeconds();

    xV = (radius * Math.cos(Math.PI * s_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * s_angle / steps * 2 - Math.PI / 2));

    gr.DrawLine(x+1, y+1 , x + xV+1, y + yV+1, s_hand_w, RGB(0,0,0));
    gr.DrawLine(x, y , x + xV, y + yV, s_hand_w, colorY1);

    // ************* Second Hand  (oposite side)
   
    var radius = radius_s_hand / 3;
    var s_angle = 90 + d.getSeconds();

    xV = (radius * Math.cos(Math.PI * s_angle / steps * 2 - Math.PI / 2));
    yV = (radius * Math.sin(Math.PI * s_angle / steps * 2 - Math.PI / 2));

    gr.DrawLine(x + 1, y + 1, x + xV + 1, y + yV + 1, s_hand_w, RGB(0,0,0));
    gr.DrawLine(x, y, x + xV, y + yV, s_hand_w, colorY1);

    // ************* center dot

    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, colorY1); //Center dot
    gr.FillEllipse(x - center_r2 / 2, y - center_r2 / 2, center_r2, center_r2, RGB(0,0,0)); //Center dot2

    // ************* Date, Digital Clock

    if(window.GetProperty("DC",true)) {
        gr.GdiDrawText(days[d.getDay()], date_font, RGB(0,0,0), 1, y + radius_h + 8, ww, wh, 0x00000001);
        gr.GdiDrawText(days[d.getDay()], date_font, colorY2, 0, y + radius_h + 7, ww, wh, 0x00000001);
        gr.GdiDrawText(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), date_font, RGB(0,0,0), 1, y + radius_h + 21, ww, wh, 0x00000001);           
        gr.GdiDrawText(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), date_font, colorY2, 0, y + radius_h + 20, ww, wh, 0x00000001);           
    } else {
        gr.GdiDrawText(d.toLocaleTimeString(), date_font, RGB(0,0,0), 1, y + radius_h + 11, ww, wh, 0x00000001);
        gr.GdiDrawText(d.toLocaleTimeString(), date_font, colorY2, 0, y + radius_h + 10, ww, wh, 0x00000001);
    }
}

function on_mouse_move(x,y) {
    window.SetCursor(32649);
}

function on_mouse_leave() {
    window.SetCursor(32512);
    window.Repaint();
}
function on_size() {
    ww = window.Width;
    wh = window.Height;
    x = ww / 2; // CENTER
//    y = radius_h + 5; // CENTER
    y = wh / 2 - 10; // CENTER
}

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

function on_mouse_lbtn_down(x, y) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
}

function on_mouse_lbtn_up(x, y) {
    MF_STRING = 0x00000000;
    MF_SEPARATOR = 0x00000800;
 
    var _menu = window.CreatePopupMenu();
    var idx;
   
    _menu.AppendMenuItem(MF_STRING, 1, "Blue");
    _menu.AppendMenuItem(MF_STRING, 2, "Slate gray");
   
    _menu.CheckMenuRadioItem(1, 2, window.GetProperty("Color", 1));
      _menu.EnableMenuItem(window.GetProperty("Color", 1), 1);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 3, "Calendar");
    _menu.CheckMenuItem(3, window.GetProperty("DC"));
   
    if (ShiftDown) {
        _menu.AppendMenuItem(MF_STRING, 20, "Properties");
        _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
    }
   
    idx = _menu.TrackPopupMenu(x, y);
   
    switch(idx) {
        case 1:
        case 2:
            window.SetProperty("Color", idx);
            window.Repaint();
            break;
        case 3:
            window.GetProperty("DC") == false ? window.SetProperty("DC", true) : window.SetProperty("DC", false);
            break;
        case 20:
            window.ShowProperties();
            break;
        case 21:
            window.ShowConfigure();
            break;
    }
    _menu.Dispose();
    return true;
}

function on_mouse_wheel(step) {
}

function on_mouse_mbtn_up(x,y) {
}



function getRed(color) {
   return ((color >> 16) & 0xff);
}

function getGreen(color) {
   return ((color >> 8) & 0xff);
}

function getBlue(color) {
   return (color & 0xff);
}

var R, G, B, h, s, l;

function RGBtoHSL(r, g, b) {
    r = r / 255;
    g = g / 255;
    b = b / 255;

    var min = Math.min(r, g, b),
        max = Math.max(r, g, b),
        delta = max - min;

    l = (max + min) / 2;

    if (delta == 0) {
        h = 0;
        s = 0;
    } else {
        if (l < 0.5) {s = delta / (max + min);
        } else {s = delta / (2 - max - min);}

        delta_r = (((max - r) / 6) + (delta / 2)) / delta;
        delta_g = (((max - g) / 6) + (delta / 2)) / delta;
        delta_b = (((max - b) / 6) + (delta / 2)) / delta;

        if (r == max) h = delta_b - delta_g;
        if (g == max) h = (1 / 3) + delta_r - delta_b;
        if (b == max) h = (2 / 3) + delta_g - delta_r;

        if (h < 0) h += 1;
        if (h > 1) h -= 1;
    }
    h = h * 100;
    s = s * 100;
    l = l * 100;
}

function HSLtoRGB(h, s, l) {
    h = h / 100;
    s = s / 100;
    l = l / 100;
   
    if (s == 0) {
        r = l * 255;
        g = l * 255;
        b = l * 255;
    } else {
        if(l < 0.5) {
            var_2 = l * (1 + s);
        } else { 
            var_2 = (l + s) - (s * l);
        }
       
        var_1 = 2 * l - var_2;

        r = 255 * hue_2_rgb(var_1, var_2, h + ( 1 / 3 ));
        g = 255 * hue_2_rgb(var_1, var_2, h );
        b = 255 * hue_2_rgb(var_1, var_2, h - ( 1 / 3 ));
    }
    function hue_2_rgb( v1, v2, vh) {
        if (vh < 0) vh += 1;
        if (vh > 1) vh -= 1;
        if ((6 * vh) < 1) return (v1 + (v2 - v1) * 6 * vh);
        if ((2 * vh) < 1) return (v2);
        if ((3 * vh) < 2) return (v1 + (v2 - v1) * ((2 / 3) - vh) * 6);
        return (v1);
    }
   return RGB(Math.round(r), Math.round(g), Math.round(b));
}
 
Безымянный.png
Безымянный.png (35.31 КБ) Просмотров: 2762

Т.е. есть основной цвет, а элементы (цифры, стрелки) отображаем изменяя яркость для придания "объема".
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #257 AHAPXICT » 02.03.2015, 21:12

kgena_ua, а почему 500? Я поменял только одну строку, как описывал выше, и вроде бы работает. Не знаю может, как всегда, сделал всё неправильно. Проверьте, если не затруднит. :beer:
Код: Выделить всё
// Digital Clock
// LatroX 1.2 by eXtremeHunter1972
// @author "jscript by Hunter >> http://extremehunter1972.deviantart.com/art/LatroX-1-2-151924059
// WSH Panel Mod component by Tianpeng Wang
// Modifed AHAPXICT and kgena_ua for DarkOne v4.0 by tedGo

//####################################################################
// Choose your language here.


// ENGLISH = 1
// ESTONIAN = 2
// GERMAN = 3
// FRENCH = 4
// FINNISH = 5
// RUSSIAN = 6
// UKRAINIAN = 7

var language = 6
//####################################################################

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)); }
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

var DT_CENTER = 0x00000001;
var g_font1 = gdi.Font("DarkOne", 57, 0); //Time
var g_font2 = gdi.Font("DarkOne", 19, 0); // Day
var g_font3 = gdi.Font("DarkOne", 29, 0); // Date
var g_font4 = gdi.Font("DarkOne", 19, 0); // Month

var currentTime = new Date();
var clock_time = window.SetInterval(on_timer, 1000);

if(language == 1){
var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
}
if(language == 2){
var days = new Array("Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev");
var months = new Array("Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember");
}
if(language == 3){
var days = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
var months = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");
}
if(language == 4){
var days = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");
var months = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");
}
if(language == 5){
var days = new Array("Sunnuntai", "Maanantai", "Tiistai", "Keskiviiko", "Torstai", "Perjantai", "Lauantai");
var months = new Array("Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Süüskuu", "Lokakuu", "Marraskuu", "Joulukuu");
}
if(language == 6){
var days = new Array("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота");
var months = new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь");
}
if(language == 7){
var days = new Array("Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П’ятниця", "Субота");
var months = new Array("Січень", "Лютий", "Березень", "Квітень", "Травень", "Червень", "Липень", "Серпень", "Вересень", "Жовтень", "Листопад", "Грудень");
}
function on_paint(gr){

if (window.GetProperty("Color") == 1) var font_rgb = RGB(190,227,254), block_rgb = RGB(24, 37, 46);   //Default   
if (window.GetProperty("Color") == 2) var font_rgb = RGB(127,191,254), block_rgb = RGB(22, 36, 46);   //Blue   
if (window.GetProperty("Color") == 3) var font_rgb = RGB(0,255,0), block_rgb = RGB(18, 38, 38);       //Green   
if (window.GetProperty("Color") == 4) var font_rgb = RGB(255,0,0), block_rgb = RGB(38, 26, 34);       //Red   
if (window.GetProperty("Color") == 5) var font_rgb = RGB(253,253,254), block_rgb = RGB(26, 38, 46);   //White   
if (window.GetProperty("Color") == 6) var font_rgb = RGB(253,254,1), block_rgb = RGB(26, 38, 38);     //Yellow
   
gr.SetTextRenderingHint(5);

var currentHours = currentTime.getHours ( );
var currentMinutes = currentTime.getMinutes ( );
var currentSeconds = currentTime.getSeconds ( );
var currentDay = currentTime.getDay ( );
var currentDate = currentTime.getDate ( );
var currentMonth = currentTime.getMonth ( );
var ww = window.Width;
var txt;
var y = 5;
var x = 0;
if(currentHours < 10){x = 3;}

  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
 
  gr.GdiDrawText( "\u2589\u2589\u2589", g_font1, block_rgb, -30, -7-y, ww, 60, DT_CENTER);
  gr.GdiDrawText( currentHours + ":" + currentMinutes + ":" + currentSeconds, g_font1, font_rgb, -33+x, -7-y, ww, 60, DT_CENTER);
 
  gr.GdiDrawText( "\u2588\u2588\u2588", g_font3, block_rgb, -161, 0-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( "\u2588\u2588\u2588", g_font3, block_rgb, -161, 18-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( currentDate , g_font3, font_rgb, -162, 9-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -185, 6-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -185, 12-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -137, 6-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -137, 12-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -161, -18-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -161, 18-y, ww, 40, DT_CENTER);
 
  gr.GdiDrawText( "\u2589\u2589\u2589\u2589\u2589\u2588", g_font2, block_rgb, 134, 0-y, ww, 24, DT_CENTER);
  gr.GdiDrawText( "\u2589\u2589\u2589\u2589\u2589\u2588", g_font4, block_rgb, 134, 14-y, ww, 24, DT_CENTER);
  gr.GdiDrawText( "\u2589\u2589\u2589\u2589\u2589\u2588", g_font4, block_rgb, 134, 28-y, ww, 24, DT_CENTER);
  gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 130, 2-y, ww, 24, DT_CENTER);
  gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 138, 24-y, ww, 24, DT_CENTER);
}
// ========Menu======== //
function on_mouse_rbtn_up(x, y) {

    var _menu = window.CreatePopupMenu();
   
    _menu.AppendMenuItem(MF_STRING, 1, "Default");
    _menu.AppendMenuItem(MF_STRING, 2, "Blue");
    _menu.AppendMenuItem(MF_STRING, 3, "Green");
    _menu.AppendMenuItem(MF_STRING, 4, "Red");
    _menu.AppendMenuItem(MF_STRING, 5, "White");
    _menu.AppendMenuItem(MF_STRING, 6, "Yellow")
    _menu.CheckMenuRadioItem(1, 6, window.GetProperty("Color", 1));   

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0)
    _menu.AppendMenuItem(MF_STRING, 7, "Properties...");
    _menu.AppendMenuItem(MF_STRING, 8, "Configure...");

    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {

    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
        window.SetProperty("Color", idx);   
        window.Repaint();   
        break;   
    case 7:
        window.ShowProperties();
        break;
    case 8:
        window.ShowConfigure();
        break;
}
    _menu.Dispose();
return true
}
function on_timer(id){
  currentTime = new Date();
  currentTime.getMilliseconds()/1000;
window.Repaint();
}
//EOF
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 6 месяцев

Сообщение #258 kgena_ua » 03.03.2015, 12:03

AHAPXICT, это время в миллисекундах, через которое нам нужно обновлять new Date() и делать window.Repaint(). 500 или 1000 я думаю разницы нет. :smile:
А для чего currentTime.getMilliseconds()/1000;.

По поводу повтора символа (ранее поднимался этот вопрос).
Вот нашел такое:
прописываем такую функцию

String.prototype.repeat = function(n) {
return new Array(n + 1).join(this);
}


и в function on_paint(gr) {
нужно повторить символ, к примеру, семь раз
var s = "\u2589".repeat(7);
gr.GdiDrawText(s, ....

или
gr.GdiDrawText("\u2589".repeat(7),...

Добавлено спустя 45 минут 52 секунды:
seriousstas:сама кнопка ведь уже не нужна , она ведь есть из PSS , может только текст поверх ?
seriousstas,
создаем (блокнотом) в корне фубара пустой файл м именем dsp_txt_ (т.к. FileExists не понимает '*')
меняем (зачем нам разные тексты)
Код: Выделить всё
var dsp_m = Array("Без DSP","Минимальная","Оптимальная","Стерео в 5.1","Стерео в 5.0","Стерео в 4.0","iZOzone","Наушники Bauer","ЭХО","МОЙ","Показать DSP");
на
Код: Выделить всё
var dsp_m = Array("DSP OFF","Minimum","Optimal","2.0 in 5.1","2.0 in 5.0","2.0 in 4.0","iZOzone","Наушники Bauer","ECHO","- MY -","DSP");
меняем содержимое
function close_panel() {
на
Код: Выделить всё
   function close_panel() {
       fso.deleteFile( set_path + "dsp_off_" + "*" );
       fso.CreateTextFile( set_path + "dsp_off_0" );
           fso.deleteFile( set_path + "dsp_txt_" + "*" );
       fso.CreateTextFile( set_path + "dsp_txt_" + dsp_m[sel_dsp - 1] );
       RefreshPSS();
       clear_flag();
   }

в PSS пишем
$puts(file_name,$findfile(%ps_foobar2000_path%/dsp_txt_*))
$puts(point,$strrchr($get(file_name),'\'))
$puts(file_len,$len($get(file_name)))
$puts(dsp_txt,$right($get(file_name),$sub($get(file_len),$get(point),8)))


и в Вашем случай:

$drawtext($get(dsp_txt),10,$sub(%hh%,85),80,80,%color0%,hcenter vcenter)
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 1 месяц

Сообщение #259 AHAPXICT » 03.03.2015, 12:57

kgena_ua, спасибо! Я поэтому и спрашивал зачем 500 мс, когда достаточно 1000мс - 1 сек для обновления, просто интересно стало вот я и спросил)))) За повтор символов отдельное спасибо!!! Это самое оно! :beer:
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 6 месяцев

Сообщение #260 seriousstas » 03.03.2015, 21:35

kgena_ua
Получилось, ещё раз thx !
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 3 месяца

Пред.След.

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