Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #141 iprad » 24.07.2014, 06:40

Цель правильная-управление PSS с помощью WSH. Но вот способ... Про маркеры я знаю. Просто наткнулся на способ рисования VU Meter с помощью WSH:
VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
Вот и подумал, может и к PSS можно так подключиться. Только не нашел индификатор PSS, по которому можно подключиться (VU Meter - "VUMeter")
iprad M
Аватара
Репутация: 89
С нами: 11 лет

Сообщение #142 kgena_ua » 21.09.2014, 21:28

В одной из сборок от Br3tt есть эффект использования "цветового тона обложки". Наконец-то получилось "вытащить" эту функцию.
От себя добавил чтение обложек и увеличение яркости полученных цветов (для названия альбома). Сделал демонстрационный скрипт, где фон -
цветовая гамма обложки и текст того же цвета , только с увеличенной яркостью.
Может кому пригодиться.
Безымянный.jpg

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("Arial",14,1);

var g_metadb;
on_item_focus_change();

var pic, album;

function on_paint(gd){
    var ww = window.Width;   
    var wh = window.Height;

    if (pic){
//        gd.DrawImage( pic, 0, 0, 50, 50, 0, 0, 50, 50, 0, 255);
        getColorSchemeFromImage(pic);

        var Y = 70;
        YR = gRed + (255 - gRed) * Y / 100;   
        YG = gGreen + (255 - gGreen) * Y / 100;
        YB = gBlue + (255 - gBlue) * Y / 100;
       
        gd.FillSolidRect (0, 0, ww, wh, RGB(gRed,gGreen,gBlue));
        gd.DrawString(album, font, RGB(0,0,0), 6, 6, ww, wh, 0 );       
        gd.DrawString(album, font, RGB(YR,YG,YB), 5, 5, ww, wh, 0 );             
    }
}

function on_item_focus_change() {   
   metadb = fb.GetNowPlaying();   
    get_album_art(metadb);
}

function on_playback_new_track(metadb) {      
    on_item_focus_change();
}

function get_album_art(metadb) {
    if (metadb) {
        pic = utils.GetAlbumArtV2(metadb);
        album = fb.TitleFormat("%album%").EvalWithMetadb(metadb);
    }
}

function getAlpha(color) {
   return ((color >> 24) & 0xff);
}

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

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

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

getColorSchemeFromImage = function(image) {   // @author "Br3tt aka Falstaff
            
     if(!image) return;                  
               
    var left_img = gdi.CreateImage(30, 50);               
    var gb = left_img.GetGraphics();               
    var colorScheme_array = Array();               
               
    gb.DrawImage(image, 0, 0, image.Width, image.Height, 7, 7, image.Width-14, image.Height-14, 0, 255);               
    left_img.ReleaseGraphics(gb);               
                       
//        var myVBArray = image.Resize(50,50,5).GetColorScheme(1);               
    var myVBArray = left_img.GetColorScheme(1);               
                       
    colorScheme_array.splice(0, colorScheme_array.length);               
    colorScheme_array = myVBArray.toArray();               
               
    gRed = getRed(colorScheme_array[0]);               
    gGreen = getGreen(colorScheme_array[0]);               
    gBlue = getBlue(colorScheme_array[0]);               
    gAlpha = getAlpha(colorScheme_array[0]);               
    colorSchemeBack = RGBA(this.gRed, this.gGreen, this.gBlue, 255);               
}               
               
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #143 Strigoy » 23.09.2014, 02:50

kgena_ua
Неплохо, я не так давно экспериментировал с этой фишкой, но что-то так и не нашел дельного применения в своем интерфейсе :/ Специфическая штука.
Strigoy
Репутация: 19
С нами: 10 лет 2 месяца

Сообщение #144 kgena_ua » 23.09.2014, 22:19

Strigoy:я не так давно экспериментировал с этой фишкой
Strigoy, а можно Ваши наработки посмотреть.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #145 macarych » 26.09.2014, 17:26

Код: Выделить всё

// fooClock 1.0 // Coded by Hunter
// ==PREPROCESSOR==
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Flags.txt"
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Helpers.txt"     
// ==/PREPROCESSOR==
//аалоговые часы из 7" v2.3.2
window.GetProperty("DC",true)
window.GetProperty("Color",1)
var clock_timer = window.CreateTimerInterval(1000);
var d = new Date();
var datefont = gdi.Font("Courier New", 42, 0);
var datefont2 = gdi.Font("Arial", 21, 0);
var datefont3 = gdi.Font("Courier New", 70, 0);
var x, y, ww, wh, w_h, xx, color3;
var c3 = 1
// =============================================== //

function on_paint(gr) {
   
    var g_textcolor = window.GetColorCUI(ColorTypeCUI.text);
    var g_textcolor_hl = window.GetColorCUI(ColorTypeCUI.highlight);
    var g_backcolor = window.GetColorCUI(ColorTypeCUI.background);
   
    if(window.GetProperty("Color")==1)
    {var color = RGB(140, 0, 0); // RED
    var color2 = RGB(200, 0, 0);} // RED
    if(window.GetProperty("Color")==2)
    {var color = RGB(0, 30, 0); // GREEN
    var color2 = RGB(0, 150, 0); }// GREEN
    if(window.GetProperty("Color")==3)
    {var color = RGB(0, 0, 120); // BLUE
    var color2 = RGB(0, 100, 250); }// BLUE
    if(window.GetProperty("Color")==4)
    {var color = RGB(0, 0, 0); // BLACK
    var color2 = RGB(0, 75, 100); }// BLACK
    if(window.GetProperty("Color")==5)
    {var color = RGB(19, 30, 38); // Macarych & ONV
    var color2 = RGB(0, 150, 200); }// Macarych & ONV
    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);


    gr.FillEllipse(x - w_h / 2 , y - w_h / 2 , w_h, w_h, color); // Clock face color
   

    // ************* Hour Dots
   
    var steps = 12;
    var radius = 160;
    var hour_r = 9;

    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, RGB(0, 150, 200));

    }
    // ************* Hour Numbers
   
    for (var i = 0; i < steps; i++) {

        var radius =  140;

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

        gr.DrawString(hours, datefont2, RGB(0, 150, 200), x + xV - hour_r / 2, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
   
    // ************* Minute Dots
   
    var steps = 60;
    var radius =  160;
    var minute_r = 5;

    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, RGB(100, 100, 100));

    }
   
    // ************* Minute Hand
   
    var radius =  130;
    var steps = 60;
    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, y, x + xV, y + yV, 5, RGB(100, 150, 200));
        gr.DrawLine(x, y, x + xV, y + yV, 1, RGB(0, 150, 200));
    // ************* Hour Hand
   
    var radius = 85;
    var steps = 12;
    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, y, x + xV, y + yV, 7, RGB(100, 150, 200));
    gr.DrawLine(x, y, x + xV, y + yV, 1, RGB(0, 0, 0));

    // ************* Second Hand
   
    var radius = 150;
    var steps = 60;
    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, y , x + xV, y + yV, 3, RGB(200, 50, 50));

    // ************* Second Hand  (oposite side)
   
    var radius = 55;
    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, y, x + xV, y + yV, 3, RGB(200, 50, 50));

    var center_r = 10;
    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, RGB(200, 50, 50)); //Center dot
    var center_r = 4;
    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, RGB(50, 50, 50)); //Center dot2

    var mask = ww / 2;
    var mask_pad = 0;
   
    gr.DrawEllipse(x - w_h / 2 - mask / 2 - mask_pad, y - w_h / 2 - mask / 2 - mask_pad, w_h + mask + mask_pad * 2, w_h + mask + mask_pad * 2, mask, g_backcolor);

    gr.DrawEllipse(x - w_h / 2 + 7, y - w_h / 2 + 7 , w_h - 14, w_h - 14, 0, RGBA(19, 30, 38, 255));
    gr.DrawEllipse(x - w_h / 2, y - w_h / 2, w_h, w_h, 3, RGB(19, 30, 38));
    gr.DrawImage(blur, 0, 0, ww, wh, 0, 0, ww, wh);
    gr.DrawEllipse(x - w_h / 2 + 7, y - w_h / 2 + 7, w_h - 14, w_h - 14, 18, RGBA(19, 30, 38, 55));
   
    //gr.DrawRect(2, 1, ww - 4, wh - 4, 1, g_textcolor_hl);
   
   
    var img1 = gdi.Image( fb.ProfilePath + "themes\\340_Round.png" );
     var img2 = gdi.Image( fb.ProfilePath + "themes\\bg44.png" );
    gr.DrawImage( img1 , 188, 5, 344, 344, 0, 0, 340, 340);
   
   
    // ************* Digital Clock
       
    if(window.GetProperty("DC",true)) {
    gr.DrawImage( img2 , 5, 355, 720, 215, -0, 0, 725, 205);
    gr.DrawString(d.toLocaleString(), datefont, color2, 0, wh-43, ww, 40, 0x11005000);
    }
    else {
    gr.DrawString(d.getHours() % 24 , datefont3, color2, -110, wh-43, ww, 40, 0x11005000);
    gr.DrawString(d.getMinutes() , datefont3, color2, 0, wh-43, ww, 40, 0x11005000);
    gr.DrawString(d.getSeconds() , datefont3, color2, 110, wh-43, ww, 40, 0x11005000);
    if ( c3 > 0 ){ color3 = color2 }
    else { color3 = color }
    gr.DrawString(":" , datefont3, color3, -60, wh-38, ww, 15, 0x11005000);
    gr.DrawString(":" , datefont3, color3, 60, wh-38, ww, 15, 0x11005000);
    c3 = -c3
}
}


// =============================================== //

function on_size() {


    ww = window.Width;
    wh = window.Height;

    x = ww / 2; // CENTER
    y = wh / 2 - 25; // CENTER
     
    if (ww <= wh) {
        scale = ww;     
    } else {
        scale = wh;       
       }
       
    w_h = 335;
   
    if (ww <= 0 || wh <= 0) return;

    blur = gdi.CreateImage(ww, wh);
    var g = blur.GetGraphics();
    var blur_pad = 15;
    var blur_pad2 = 8;

}

// =============================================== //

function on_timer(id) {

    d = new Date();

    window.Repaint();

}
// =============================================== //

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) {
 
   var _menu = window.CreatePopupMenu();
   var idx;
   
    //=====================================
   
    _menu.AppendMenuItem(MF_DISABLED, 0, "CLOCK COLOR");
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------
   
   _menu.AppendMenuItem(MF_STRING, 1, "Red");
   _menu.AppendMenuItem(MF_STRING, 2, "Green");
   _menu.AppendMenuItem(MF_STRING, 3, "Blue");
   _menu.AppendMenuItem(MF_STRING, 4, "Black");
   _menu.AppendMenuItem(MF_STRING, 5, "Macarych + ONV");   
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------
   
    _menu.AppendMenuItem(MF_STRING, 6, "Calendar + Time");
    _menu.CheckMenuItem(6,window.GetProperty("DC"));
   
if (ShiftDown) {
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------

   _menu.AppendMenuItem(MF_STRING, 20, "Properties");
   _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
}
    //-------------------------------------
   
   _menu.CheckMenuRadioItem(1, 5, window.GetProperty("Color", 1));

    //=====================================
   
   idx = _menu.TrackPopupMenu(x, y);
   switch(idx) {
      case 1:
      case 2:
      case 3:
      case 4:
        case 5:
         window.SetProperty("Color", idx);
            on_size()
         window.Repaint();
         break;
      case 6:
            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;
   
}







Код: Выделить всё

// fooClock 1.0 // Coded by Hunter
// ==PREPROCESSOR==
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Flags.txt"
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Helpers.txt"     
// ==/PREPROCESSOR==
//цифровые часы из 7" v2.3.2
window.GetProperty("DC",true)
window.GetProperty("Color",1)
var c3=1;
var clock_timer = window.CreateTimerInterval(1000);
var d = new Date();
var datefont = gdi.Font("Segoe UI", 190, 1);
var datefont2 = gdi.Font("Arial", 21, 0);
var datefont3 = gdi.Font("Segoe UI", 160, 1);
var datefont4 = gdi.Font("Segoe UI", 310, 1);
var x, y, ww, wh, w_h, xx, color3;

// =============================================== //
    on_size();
function on_paint(gr) {
   
    var g_textcolor = window.GetColorCUI(ColorTypeCUI.text);
    var g_textcolor_hl = window.GetColorCUI(ColorTypeCUI.highlight);
    var g_backcolor = window.GetColorCUI(ColorTypeCUI.background);
   
    if(window.GetProperty("Color")==1)
    {var color = RGB(80, 0, 0); // RED
    var color2 = RGB(200, 0, 0);} // RED
    if(window.GetProperty("Color")==2)
    {var color = RGB(0, 30, 0); // GREEN
    var color2 = RGB(0, 150, 0); }// GREEN
    if(window.GetProperty("Color")==3)
    {var color = RGB(0, 0, 80); // BLUE
    var color2 = RGB(0, 100, 250); }// BLUE
    if(window.GetProperty("Color")==4)
    {var color = RGB(0, 0, 0); // BLACK
    var color2 = RGB(0, 75, 100); }// BLACK
    if(window.GetProperty("Color")==5)
    {var color = RGB(19, 30, 38); // Macarych & ONV
    var color2 = RGB(0, 150, 200); }// Macarych & ONV

    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);
   

    gr.FillEllipse(x - w_h / 2, y - w_h / 2, w_h, w_h, color); // Clock face color
   
    // ************* Digital Clock
   
    if(window.GetProperty("DC",true)){
    gr.DrawString(d.getHours() % 24 , datefont, color2, -258, wh-295, ww, 160, 0x11005000);
    gr.DrawString(d.getMinutes() , datefont, color2, -2, wh-295, ww, 160, 0x11005000);
    gr.DrawString(d.getSeconds() , datefont, color2, 252, wh-295, ww, 160, 0x11005000);
    if ( c3 > 0 ){ color3 = color2 }
    else { color3 = color }
    gr.DrawString(":" , datefont3, color3, -130, wh-295, ww, 140, 0x11005000);
    gr.DrawString(":" , datefont3, color3, 126, wh-295, ww, 140, 0x11005000);
    //c3 = -c3;
    }
    else {
    gr.DrawString(d.getHours() % 24 , datefont4, color2, -200, wh-295, ww, 140, 0x11005000);
    gr.DrawString(d.getMinutes() , datefont4, color2, 185, wh-295, ww, 140, 0x11005000);
    if ( c3 > 0 ){ color3 = color2 }
    else { color3 = color }
    gr.DrawString(":" , datefont3, color3, -5, wh-240, ww, 10, 0x11005000);
    //c3 = -c3;
    }
   
}
// =============================================== //

function on_size() {


    ww = window.Width;
    wh = window.Height;

    x = ww / 2; // CENTER
    y = wh / 2 - 20; // CENTER
   
    if (ww <= wh) {
        scale = ww;     
    } else {
        scale = wh;       
       }
       
    w_h = 1135;
   
    if (ww <= 0 || wh <= 0) return;

    blur = gdi.CreateImage(ww, wh);
    var g = blur.GetGraphics();
    var blur_pad = 15;
    var blur_pad2 = 8;

    blur.BoxBlur(4, 2);

    blur.ReleaseGraphics(g);

}

// =============================================== //

function on_timer(id) {

    d = new Date();
    window.Repaint();
    c3 = -c3;
}
// =============================================== //

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) {
 
   var _menu = window.CreatePopupMenu();
   var idx;
   
    //=====================================
   
    _menu.AppendMenuItem(MF_DISABLED, 0, "CLOCK COLOR");
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------
   
   _menu.AppendMenuItem(MF_STRING, 1, "Red");
   _menu.AppendMenuItem(MF_STRING, 2, "Green");
   _menu.AppendMenuItem(MF_STRING, 3, "Blue");
   _menu.AppendMenuItem(MF_STRING, 4, "Black");
   _menu.AppendMenuItem(MF_STRING, 5, "Macarych + ONV");   
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------
   
    _menu.AppendMenuItem(MF_STRING, 6, "Digit Clock");
    _menu.CheckMenuItem(6,window.GetProperty("DC"));
   
if (ShiftDown) {
    //-------------------------------------
   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //-------------------------------------

   _menu.AppendMenuItem(MF_STRING, 20, "Properties");
   _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
}
    //-------------------------------------
   
   _menu.CheckMenuRadioItem(1, 5, window.GetProperty("Color", 1));

    //=====================================
   
   idx = _menu.TrackPopupMenu(x, y);
   switch(idx) {
      case 1:
      case 2:
      case 3:
      case 4:
        case 5:
         window.SetProperty("Color", idx);
            on_size()
         window.Repaint();
         break;
      case 6:
            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;
   
}





macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #146 kgena_ua » 26.09.2014, 17:35

macarych, спасибо. А можно выложить и файлы img... .
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #147 macarych » 26.09.2014, 17:47

kgena_ua, что-то у меня больше не нашлось, это кажется последняя сборка которую мы делали вместе. Потом onv делал свои и там были уже другие часы. В "Релизах сборок" две его сборки, ссылки живые, проверил, если интересно - скачайте.
Кажется эта вся графика, или нет?

https://www.dropbox.com/s/n9dczhq2pqa3hqh/For_any_touchscreens_v01.exe

https://www.dropbox.com/s/rx1mtnx5fu5qt8y/ONV_Foobar-based%20mini-frontend%20v1.15.exe
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #148 kgena_ua » 26.09.2014, 18:13

macarych, да, ссылки это еще лучше. Спасибо, буду смотреть.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #149 AHAPXICT » 27.09.2014, 06:22

Ковыряясь в скрипте WSH digital VU meter 2by eXtremeHunter1972 в течении недели заметил несколько интересных вещей: 1) Нагрузка на процессор в стандартном режиме "Solid Level" напрочь отсутствует (2-5-7%), но при отключении режима "Solid Level" нагрузка возрастает пропорционально значению "Thickness -> Level Line" минимальное значение 1 - нагрузка увеличивается на 40 - 55%, при уменьшении этого числа от 2 до 10 нагрузка падает, при значении 10 опять фактически равна нулю.
2) Режим "Offset" по умолчанию -10 напрямую контролирует функцию preamp , что не очень удобно(у меня стоит +9 и все ву метры попадают в ноль), а в режиме настроек VU Meter - Automatic gain control так вообще скачущие цифры, меня просто добивали.
Но дело в следующем, нужна помощь! Так как моё исправление скриптов похоже на старую добрую игру "сапёр" - поставил запятую или кавычки - ок - работает - Ура!, или Aw, crashed:( - Game Over - начинай сначала. Пока в ступоре, не могу назначить производную на замену цвета для "Color -> Level Preset". kgena_ua, macarych, может подсобите? Меню и сами пресеты уже готовы.
Код: Выделить всё
// ==PREPROCESSOR==
// ======================== //
// @name "digital VU meter 2 (06.June.2012)"
// @author "jscript by Hunter >> http://extremehunter1972.deviantart.com /
// WSH Panel Mod component by Tianpeng Wang
// VU Meter component by DRON
// Modifed AHAPXICT for DarkOne v4.0 by tedGo
// ==/PREPROCESSOR==
// Requirements:
// foobar2000_v1.1 or better  >> http://foobar2000.org
// WSH panel Mod v1.5.3.1 or better  >> http://code.google.com/p/foo-wsh-panel-mod/downloads/list
// VU Meter 2012-06-05 or better >> http://foobar2000.org.ru/forum/
// Script with some examples here http://browse.deviantart.com/customization/skins/media/foobar2000/#/d51whqw
// ======================= //

function RGBA(r, g, b, a) {
    return ((a << 24) | (r << 16) | (g << 8) | (b));
}
function RGB(r, g, b) {
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}
function StringFormat() {
    var h_align = 0,
        v_align = 0,
        trimming = 0,
        flags = 0;
    switch (arguments.length) {
    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);
}

VK_UP = 0x26;
VK_DOWN = 0x28;
VK_CONTROL = 0x11;
DLGC_WANTARROWS = 0x0001;
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

window.DlgCode = DLGC_WANTARROWS;

VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// ======================= //
(function init() {
    VUMeter.Offset = window.GetProperty("Offset", -10);
})();
// ======================= //
function createImage() {

    if (ww <= 0 || wh <= 0) return;

    var minWidth = minHeight = 20;
    window.MinWidth = minWidth;

    orientation = "V";
    if (window.GetProperty("Orientation", "Vertical") == "Horizontal") orientation = "H";

    leftMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Left", 0) : window.GetProperty("Margin -> Horizontal Left", 11));
    topMargin = window.GetProperty("Margin -> Top ", 0);
    bottomMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Bottom", 10) : window.GetProperty("Margin -> Horizontal Bottom", 0));
    rightMargin = window.GetProperty("Margin -> Right", 0);

    centerPadding = window.GetProperty("Padding -> Center", 4);
    peakLevelPadding = window.GetProperty("Padding -> Peak <-> Level ", 6);
    levelLineThickness = window.GetProperty("Thickness -> Level Line", 1);

    if (levelLineThickness < 1) {
        window.SetProperty("Thickness -> Level Line", 1);
        levelLineThickness = 1;
    }

    peakLineThickness = window.GetProperty("Thickness -> Peak Line", 3);
    peakHeight = peakLineThickness;

    if (orientation == "V") {

        leftPeakX = Math.floor(ww / 2) - peakLineThickness - centerPadding;
        rightPeakX = Math.floor(ww / 2) + centerPadding;
        leftPeakY = topMargin;
        rightPeakY = topMargin;

        leftLevelX = leftMargin;
        rightLevelX = rightPeakX + peakLineThickness + peakLevelPadding;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftMargin;
        rightLevelWidth = ww - rightLevelX - leftLevelX;

        leftLevelY = topMargin;
        rightLevelY = topMargin;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = ww - rightMargin - rightLevelX;

    } else if (orientation == "H") {

        leftPeakX = leftMargin;
        leftPeakY = Math.floor(wh / 2) - peakHeight - centerPadding;

        leftPeakHeight = window.GetProperty("Thickness -> Peak Line", 20);
        rightPeakHeight = leftPeakHeight;

        rightPeakX = leftMargin;
        rightPeakY = Math.floor(wh / 2) + centerPadding;

        leftLevelX = leftMargin;
        rightLevelX = leftMargin;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = ww - rightLevelX - leftLevelX;

        leftLevelX = leftMargin;
        rightLevelX = leftMargin;
        leftLevelY = topMargin;
        rightLevelY = rightPeakY + peakHeight + peakLevelPadding;

        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = wh - rightLevelX - leftLevelX;

        leftLevelHeight = leftPeakY - peakLevelPadding - topMargin;
        rightLevelHeight = wh - bottomMargin - rightLevelY;

    }

    switch (window.GetProperty("Color -> Peak Preset", "Peak Default")) {

    case "Peak Default":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Default Gradient 1", "RGBA(95,114,127,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Default Gradient 2", "RGBA(191,228,255,255)"));
        id_p = 1;
        break;
    case "Peak Blue":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Blue Gradient 1", "RGBA(65,97,127,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Blue Gradient 2", "RGBA(128,192,255,255)"));
        id_p = 2;
        break;
    case "Peak Green":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Green Gradient 1", "RGBA(0,76,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Green Gradient 2", "RGB(0,255,0,255)"));
        id_p = 3;
        break;
    case "Peak Red":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Red Gradient 1", "RGBA(76,0,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Red Gradient 2", "RGBA(255,0,0,255)"));
        id_p = 4;
        break;
    case "Peak White":
        peakGradient1 = eval(window.GetProperty("Color -> Peak White Gradient 1", "RGBA(76,76,76,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak White Gradient 2", "RGBA(255,255,255,255)"));
        id_p = 5;
        break;   
    case "Peak Yellow":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Yellow Gradient 1", "RGBA(76,76,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Yellow Gradient 2", "RGBA(255,255,0,255)"));
        id_p = 6;
        break;   
    case "Custom Peak Color":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Custom Gradient 1", "RGBA(20,32,40,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Custom Gradient 2", "RGBA(63,100,127,255)"));
        id_p = 7;
        break;
   
    default:
        id_p = 1;

    }
   
    switch (window.GetProperty("Color -> Level Preset", "Level Default")){
    case "Level Default":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Default Gradient 1", "RGBA(95,114,127,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Default Gradient 2", "RGBA(191,228,255,255)"));
        id_l = 8;
        break;
    case "Level Blue":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Blue Gradient 1", "RGBA(65,97,127,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Blue Gradient 2", "RGBA(128,192,255,255)"));
        id_l = 9;
        break;
    case "Level Green":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Green Gradient 1", "RGBA(0,76,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Green Gradient 2", "RGB(0,255,0,255)"));
        id_l = 10;
        break;
    case "Level Red":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Red Gradient 1", "RGBA(76,0,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Red Gradient 2", "RGB(255,0,0,255)"));
        id_l = 11;
        break;
    case "Level White":
        LevelGradient1 = eval(window.GetProperty("Color -> Level White Gradient 1", "RGBA(76,76,76,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level White Gradient 2", "RGB(255,255,255,255)"));
        id_l = 12;
        break;   
    case "Level Yellow":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Yellow Gradient 1", "RGBA(76,76,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Yellow Gradient 2", "RGB(255,255,0,255)"));
        id_l = 13;
        break;   
    case "Custom Level Color":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Custom Gradient 1", "RGBA(20,32,40,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Custom Gradient 2", "RGBA(63,100,127,255)"));
        id_l = 14;
        break;
   
    default:
        id_l = 8;

    }
   
    //var levelGradient1 = eval(window.GetProperty("Color -> Level Gradient 1", "Level Default"));
    //var levelGradient2 = eval(window.GetProperty("Color -> Level Gradient 2", "Level Default"));
   levelGradient1 = eval(window.GetProperty("Color -> Level Gradient 1", "RGBA(65,97,127,255)"));
   levelGradient2 = eval(window.GetProperty("Color -> Level Gradient 2", "RGBA(128,192,255,255)"));
   
   

    backgroundColor = eval(window.GetProperty("Color -> Background", "RGB(19,30,38)"));

    //---> create image mask
    var mask = gdi.CreateImage(ww, wh);
    var _grMask = mask.GetGraphics();
    _grMask.FillSolidRect(0, 0, ww, wh, 0xFF000000);

    if (orientation == "V") {
        count = Math.floor((wh - topMargin - bottomMargin) / levelLineThickness);
    } else if (orientation == "H") {
        count = Math.floor((ww - leftMargin - rightMargin) / levelLineThickness);
    } else count = 0;

    peakWidth = peakLineThickness;
    peakHeight = peakLineThickness;

    var levelBackgroundGrad1 = eval(window.GetProperty("Color -> Level Background Gradient 1", "RGBA(22,34,42,255)"));
    var levelBackgroundGrad2 = eval(window.GetProperty("Color -> Level Background Gradient 2", "RGBA(40,52,63,255)"));

    var leftLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Left Gradient", "0.5"));
    var rightLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Right Gradient", "0.5"));

    var angle = orientation == "V" ? 0 : 90;

     levelLineBackgroundImg = gdi.CreateImage(ww, wh);
     _grLBI = levelLineBackgroundImg.GetGraphics();

    for (var i = 0; i < count; i++) {

        if (window.GetProperty("Solid Level", true) ? true : !(i % 2)) {

            if (orientation == "V") {
                _grMask.FillSolidRect(leftLevelX, levelLineThickness * i + leftLevelY, leftLevelWidth, levelLineThickness, 0xFFFFFFFF);
                _grMask.FillSolidRect(rightLevelX, levelLineThickness * i + leftLevelY, rightLevelWidth, levelLineThickness, 0xFFFFFFFF);

                _grLBI.FillGradRect(leftLevelX - 2, levelLineThickness * i + leftLevelY, leftLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, leftLevelBackgroundFocus);
                _grLBI.FillGradRect(rightLevelX - 2, levelLineThickness * i + leftLevelY, rightLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);

                peakHeight = (i + 1) * levelLineThickness;

            }

            if (orientation == "H") {
                _grMask.FillSolidRect(levelLineThickness * i + leftLevelX, leftLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);
                _grMask.FillSolidRect(levelLineThickness * i + rightLevelX, rightLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);

                _grLBI.FillGradRect(levelLineThickness * i + leftLevelX, leftLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);
                _grLBI.FillGradRect(levelLineThickness * i + rightLevelX, rightLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);

                peakWidth = (i + 1) * levelLineThickness;

            }

        }

    }

    _grMask.FillSolidRect(leftPeakX, leftPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
    _grMask.FillSolidRect(rightPeakX, rightPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
   
    levelLineBackgroundImg.ReleaseGraphics(_grLBI);
    mask.ReleaseGraphics(_grMask)

    //---> create image
    img = gdi.CreateImage(ww, wh);
    _gr = img.GetGraphics();

    _gr.FillSolidRect(0, 0, ww, wh, backgroundColor);

    img.ReleaseGraphics(_gr);

    //---> apply mask to image
    var mask = mask.Resize(ww, wh);
    img.ApplyMask(mask);
    mask.Dispose();

    peakLineBackgroundImg = gdi.CreateImage(ww, wh);
    _gr = peakLineBackgroundImg.GetGraphics();

    var angle = 0;
    if (orientation == "H") {
        angle = window.GetProperty("Angle -> Peak Background Horizontal", 90);
    }
    if (orientation == "V") {
        angle = window.GetProperty("Angle -> Peak Background Vertical", angle);
    }

    var leftPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Left", "0.5"));
    var rightPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Right", "0.5"));
    var grad1 = eval(window.GetProperty("Color -> Peak Background Gradient 1", "RGBA(20,32,40,255)"));
    var grad2 = eval(window.GetProperty("Color -> Peak Background Gradient 2", "RGBA(35,47,58,255)"));

    _gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, leftPeakBackgroundFocus);
    _gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, rightPeakBackgroundFocus);
   
    peakLineBackgroundImg.ReleaseGraphics(_gr);

}
// ================= //
function on_paint(gr) {

       if (wh > minHeight) {

        gr.DrawImage(peakLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);
        gr.DrawImage(levelLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);

        var swapLevelPeak = window.GetProperty("Swap -> Peak with Level");

       if (swapLevelPeak) {
            $leftPeak = VUMeter.LeftLevel;
            $rightPeak = VUMeter.RightLevel;
            $leftLevel = VUMeter.LeftPeak;
            $rightLevel = VUMeter.RightPeak;
        } else {
            $leftLevel = VUMeter.LeftLevel;
            $rightLevel = VUMeter.RightLevel;
            $leftPeak = VUMeter.LeftPeak;
            $rightPeak = VUMeter.RightPeak;
        }

        var flipLevel = window.GetProperty("Flip -> Level", false);
        var flipPeak = window.GetProperty("Flip -> Peak", false);

      if (orientation == "V") {

            var bottomM = (wh - bottomMargin);

            if (!flipPeak) {
                leftPeakY = bottomM - bottomM * $leftPeak + topMargin;
                rightPeakY = bottomM - bottomM * $rightPeak + topMargin;
            }

            leftPeakHeight = bottomM * $leftPeak - topMargin;
            rightPeakHeight = bottomM * $rightPeak - topMargin;
            leftPeakWidth = peakLineThickness;
            rightPeakWidth = peakLineThickness;

            if (!flipLevel) {
                leftLevelY = bottomM - bottomM * $leftLevel + topMargin;
                rightLevelY = bottomM - bottomM * $rightLevel + topMargin;
            }

            leftLevelHeight = bottomM * $leftLevel - topMargin;
            rightLevelHeight = bottomM * $rightLevel - topMargin;

        }

        if (orientation == "H") {

            var rightM = ww - rightMargin;

            leftPeakWidth = rightM * $leftPeak - leftMargin;
            rightPeakWidth = rightM * $rightPeak - leftMargin;
            leftPeakHeight = peakLineThickness;
            rightPeakHeight = peakLineThickness;
            leftLevelWidth = rightM * $leftLevel - leftMargin;
            rightLevelWidth = rightM * $rightLevel - leftMargin;

            if (flipPeak) {
                leftPeakX = rightM - rightM * $leftPeak + leftMargin;
                rightPeakX = rightM - rightM * $rightPeak + leftMargin;
            }

            if (flipLevel) {
                leftLevelX = rightM - rightM * $leftLevel + leftMargin;
                rightLevelX = rightM - rightM * $rightLevel + leftMargin;
            }

        }

        var angle = orientation == "V" ? 0 : 90;
        var leftPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Left Gradient", "0.5"));
        var rightPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Right Gradient", "0.5"));
        var leftLevelGradientFocus = eval(window.GetProperty("Focus -> Level Left Gradient", "0.5"));
        var rightLevelGradientFocus = eval(window.GetProperty("Focus -> Level Right Gradient", "0.5"));

        gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, leftPeakWidth + 4, leftPeakHeight + 4, angle, peakGradient1, peakGradient2, leftPeakGradientFocus);
        gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, rightPeakWidth + 4, rightPeakHeight + 4, angle, peakGradient1, peakGradient2, rightPeakGradientFocus);

        gr.FillGradRect(leftLevelX - 2, leftLevelY - 2, leftLevelWidth + 4, leftLevelHeight + 4, angle, levelGradient1, levelGradient2, leftPeakGradientFocus);
        gr.FillGradRect(rightLevelX - 2, rightLevelY - 2, rightLevelWidth + 4, rightLevelHeight + 4, angle, levelGradient1, levelGradient2, rightPeakGradientFocus);

        gr.DrawImage(img, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);

        gr.SetTextRenderingHint(5);

        var levelFont = gdi.font("Small Fonts", 7, 0);
        var channelFont = gdi.font("Tahoma", 10, 1);
        var channelColor = eval(window.GetProperty("Color -> Text Channels", "RGBA(191,228,255,255)"));
        var SF = StringFormat(1, 1);

        if (orientation == "V") {

            channelLWidth = gr.CalcTextWidth("O", channelFont);
            channelLX = (ww / 2) / 2 - channelLWidth;
            channelRX = ww - (ww / 4);
            channelLY = bottomM - 1;
            channelRY = bottomM - 1;
            channelRWidth = channelLWidth;
            channelLHeight = wh - bottomM;
            channelRHeight = wh - bottomM;

            offsetX = 0;
            offsetY = bottomM;
            offsetWidth = ww;
            offsetHeight = wh - bottomM - 1;

        }
        if (orientation == "H") {

            channelLHeight = gr.CalcTextHeight("O", channelFont);
            channelLX = 0;
            channelRX = 0;
            channelLY = (wh / 2) / 2 - channelLHeight / 2;
            channelRY = wh - (wh / 4) - channelLHeight / 2;
            channelLWidth = leftMargin;
            channelRWidth = leftMargin;
            channelRHeight = channelLHeight;

            offsetX = 0;
            offsetY = 1;
            offsetWidth = leftMargin - 0;
            offsetHeight = wh;

        }

        gr.DrawString(VUMeter.Offset,levelFont, eval(window.GetProperty("Color -> Text Offset", "RGBA(206,206,206,0)")), offsetX, offsetY, offsetWidth, offsetHeight, SF);
        if (ww > channelLWidth * 5 && wh > channelLHeight * 3) {
            gr.DrawString("L", channelFont, channelColor, channelLX, channelLY, channelLWidth, channelLHeight, SF);
            gr.DrawString("R", channelFont, channelColor, channelRX, channelRY, channelRWidth, channelRHeight, SF);
        }
    }
}
// ======================= //
function on_size() {
    ww = window.Width;
    wh = window.Height;
    createImage();
}
// ======================= //
function on_mouse_wheel(step) {
    if (utils.IsKeyPressed(VK_CONTROL)) window.SetProperty("Offset", VUMeter.Offset + step);
    init();
}
// ======================= //
function on_key_down(vkey) {
    if (vkey == VK_UP) on_mouse_wheel(1);
    if (vkey == VK_DOWN) on_mouse_wheel(-1);
}
// ======================= //
function on_mouse_rbtn_up(x, y) {

    var _menu = window.CreatePopupMenu();
   
    _menu.AppendMenuItem(MF_STRING, 1, "Peak Default");
    _menu.AppendMenuItem(MF_STRING, 2, "Peak Blue");
    _menu.AppendMenuItem(MF_STRING, 3, "Peak Green");
    _menu.AppendMenuItem(MF_STRING, 4, "Peak Red");
    _menu.AppendMenuItem(MF_STRING, 5, "Peak White");
    _menu.AppendMenuItem(MF_STRING, 6, "Peak Yellow")
    _menu.AppendMenuItem(MF_STRING, 7, "Peak Custom")
    _menu.CheckMenuRadioItem(1, 7, id_p);
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 8, "Level Default");
    _menu.AppendMenuItem(MF_STRING, 9, "Level Blue");
    _menu.AppendMenuItem(MF_STRING, 10, "Level Green");
    _menu.AppendMenuItem(MF_STRING, 11, "Level Red");
    _menu.AppendMenuItem(MF_STRING, 12, "Level White");
    _menu.AppendMenuItem(MF_STRING, 13, "Level Yellow")
    _menu.AppendMenuItem(MF_STRING, 14, "Level Custom")
    _menu.CheckMenuRadioItem(8, 14, id_l);
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 15, window.GetProperty("Orientation") == "Horizontal" ? "Vertical" : "Horizontal");
    _menu.AppendMenuItem(MF_STRING, 16, "Flip Peak");
    _menu.CheckMenuItem(16, window.GetProperty("Flip -> Peak", false));
    _menu.AppendMenuItem(MF_STRING, 17, "Flip Level");
    _menu.CheckMenuItem(17, window.GetProperty("Flip -> Level", false));
    _menu.AppendMenuItem(MF_STRING, 18, "Swap -> Peak with Level");
    _menu.CheckMenuItem(18, window.GetProperty("Swap -> Peak with Level", false));
    _menu.AppendMenuItem(MF_STRING, 19, "Solid Level");
    _menu.CheckMenuItem(19, window.GetProperty("Solid Level", false));
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 20, "Properties...");
    _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
   
    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {

    case 1:
        window.SetProperty("Color -> Peak Preset", "Peak Default");
        createImage();
        break;
    case 2:
        window.SetProperty("Color -> Peak Preset", "Peak Blue");
        createImage();
        break;
    case 3:
        window.SetProperty("Color -> Peak Preset", "Peak Green");
        createImage();
        break;
    case 4:
        window.SetProperty("Color -> Peak Preset", "Peak Red");
        createImage();
        break;
    case 5:
        window.SetProperty("Color -> Peak Preset", "Peak White");
        createImage();
        break;   
    case 6:
        window.SetProperty("Color -> Peak Preset", "Peak Yellow");
        createImage();
        break; 
    case 7:
        window.SetProperty("Color -> Peak Preset", "Custom Peak Color");
        createImage();
        break;
    case 8:
        window.SetProperty("Color -> Level Preset", "Level Default");
        createImage();
        break;
    case 9:
        window.SetProperty("Color -> Level Preset", "Level Blue");
        createImage();
        break;
    case 10:
        window.SetProperty("Color -> Level Preset", "Level Green");
        createImage();
        break;
    case 11:
        window.SetProperty("Color -> Level Preset", "Level Red");
        createImage();
        break;
    case 12:
        window.SetProperty("Color -> Level Preset", "Level White");
        createImage();
        break;   
    case 13:
        window.SetProperty("Color -> Level Preset", "Level Yellow");
        createImage();
        break; 
    case 14:
        window.SetProperty("Color -> Level Preset", "Custom Level Color");
        createImage();
        break;
    case 15:
        window.SetProperty("Orientation", window.GetProperty("Orientation") == "Vertical" ? "Horizontal" : "Vertical");
        createImage();
        break;
    case 16:
        window.SetProperty("Flip -> Peak", window.GetProperty("Flip -> Peak") ? false : true);
        createImage();
        break;
    case 17:
        window.SetProperty("Flip -> Level", window.GetProperty("Flip -> Level") ? false : true);
        createImage();
        break;
    case 18:
        window.SetProperty("Swap -> Peak with Level", window.GetProperty("Swap -> Peak with Level") ? false : true);
        createImage();
        break;
    case 19:
        window.SetProperty("Solid Level", window.GetProperty("Solid Level") ? false : true);
        createImage();
        break;
    case 20:
        window.ShowProperties();
        break; 
    case 21:
        window.ShowConfigure();
        break;
    }
    _menu.Dispose();
    return true
}
// ======================= //
P.S. kgena_ua, благодаря этому скрипту таки разобрался с меню лайаут, туда нужно было добавить строку a.CheckMenuRadioItem(1, 3, fb.RunMainMenuCommand("View/Layout") + 1); и появилась точка, так как это меню на каждой активной теме своё, то значение +1 для первой, менял на + 3 для третьей.
Вложения
menu.png
menu.png (3.76 КБ) Просмотров: 15107
WSH digital VU meter 2 DarkOnev4.png
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #150 macarych » 27.09.2014, 06:59

AHAPXICT, тут я не помощник, потому что разбирался с WSH по такой же методе, как и Вы )), да и форму подрастерял, теперь тренироваться нужно усиленно )
Спойлер
С появлением в пределах вытянутой руки 19-дюймового тачскрина, возникло желание собрать под него foobar
,
$когда разберусь с тачскрином(когда он начнет работать стабильно(когда придет посылка с дисками и шнурками))
,
хотя бы для себя, а там посмотрим что получится
.


;-)
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #151 AHAPXICT » 27.09.2014, 08:45

macarych, спасибо! Мне это и не горит совсем, а вот ваши аналоговые ву метры душу греют! С вашего Neutron у меня всё и началось, увидел ролик на "ютуб" и понеслось! Уже как год стоит у меня на компьютере( специально дату глянул 21 сентября 2013 г., 0:46:04), до сих пор вдохновляет! И ярлык Изображение на самом почётном месте стоит, а Hartmann & Braun там всегда по умолчанию установлены - эталон так сказать.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #152 kgena_ua » 27.09.2014, 10:06

AHAPXICT:исправление скриптов похоже на старую добрую игру "сапёр"
AHAPXICT, паять баллов. Прямо в точку сказано. Ржу, остановиться не могу. :beer:

И macarych подбросил материала (Foobar-based mini-frontend v1.15) для разминки мозга. :smile:

Добавлено спустя 2 часа 50 минут:
Часы с днем недели.
Колесом мыши можно изменить размер, ср.кл - первоначальный размер. Зачем изменять размер - сам не знаю :smile: .
Код: Выделить всё
// fooClock 1.0 // Coded by Hunter (modifed)
// ==PREPROCESSOR==
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Flags.txt"
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Helpers.txt"     
// ==/PREPROCESSOR==

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

window.GetProperty("DC",true)
var clock_timer = window.CreateTimerInterval(1000);

var d = new Date();

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 color = RGB(0,157,255);

var radius_h = 65;
var radius_h_dot = 5;
var radius_h_numbers = radius_h - 12;
var radius_h_hand = radius_h - 22;
var h_hand_w = 4;

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

var radius_s_hand = radius_m - 5;
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, RGB(0,40,80));   

    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);

    // ************* 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, color);
    }
    // ************* Hour Numbers
   
    for (var i = 0; i < steps; i++) {
        var radius =  radius_h_numbers;       
        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));

        gr.DrawString(hours, hour_font, color, x + xV - hour_r / 2, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
    // ************* 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, color);
    }
   
    // ************* 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, color);   
   
    // ************* 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, color);

    // ************* 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,50)); //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, color);

    // ************* 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, color);

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

    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, color); //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.DrawString(days[d.getDay()], datefont, color, 0, y + radius_h - 7, ww, 40, 0x11005000);
        gr.DrawString(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), datefont, color, 0, y + radius_h + 6, ww, 40, 0x11005000);           
//        gr.DrawString(d.toLocaleDateString(), datefont, color, 0, y + radius_h, ww, 40, 0x11005000);
    } else {
        gr.DrawString(d.toLocaleTimeString(), datefont, color, 0, y + radius_h, ww, 40, 0x11005000);
    }
}

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_timer(id) {
    d = new Date();
    window.Repaint();
}

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) {
 
    var _menu = window.CreatePopupMenu();
    var idx;

    _menu.AppendMenuItem(MF_STRING, 1, "Calendar");
    _menu.CheckMenuItem(1, window.GetProperty("DC"));
   
    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_STRING, 20, "Properties");
        _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
    }
   
    idx = _menu.TrackPopupMenu(x, y);
   
    switch(idx) {
        case 1:
            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) {
    var step = step > 0 ? 1 : (radius_h > 35 ? -1 : 0);
    size(step);
}

function on_mouse_mbtn_up(x,y) {
    var delta = 65 - radius_h;
    step = delta;
    size(step);
}

function size(step) {
    radius_h = radius_h + step;
    radius_h_numbers = radius_h_numbers + step;
    radius_h_hand = radius_h_hand + step;
    radius_m = radius_m + step;
    radius_m_hand = radius_m_hand + step;
    radius_s_hand = radius_s_hand + step;
   
    if (radius_h <= 80 && radius_h >= 50) {hour_font = gdi.Font("Arial", 11, 0)};
    if (radius_h < 50) { hour_font = gdi.Font("Arial", 9, 0)};
    if (radius_h > 80) { hour_font = gdi.Font("Arial", 13, 0)};
    if (radius_h >= 50) {
        radius_h_dot = 5;
        radius_m_dot = 3;
        center_r = 10;
    } else {
        radius_h_dot = 4;
        radius_m_dot = 2;
        center_r = 9;
    };
    window.Repaint();
}

Добавлено спустя 1 час 43 минуты:
Не дает редактировать предыдущее сообщение. Пришлось делать новое.
Часы с использованием "цветовой схемы обложки".
Безымянный.jpg

Код: Выделить всё
// fooClock 1.0 // Coded by Hunter (modifed)
// ==PREPROCESSOR==
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Flags.txt"
// @import "%fb2k_path%\user-components\foo_uie_wsh_panel_mod\docs\Helpers.txt"     
// ==/PREPROCESSOR==

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

window.GetProperty("DC",true)
var clock_timer = window.CreateTimerInterval(1000);

var d = new Date();

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 color = RGB(0,157,255);
var color = RGB(140,164,179);

//color = RGB(gRed,gGreen,gBlue);

var radius_h = 65;
var radius_h_dot = 5;
var radius_h_numbers = radius_h - 12;
var radius_h_hand = radius_h - 22;
var h_hand_w = 4;

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

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

var center_r = 10;
var center_r2 = 4;

var x, y, ww, wh, w_h;

function on_paint(gr) {
   
    getColorSchemeFromImage(pic);
    color2 = RGBA(gRed,gGreen,gBlue,200);
//    gr.FillSolidRect(0, 0, ww, wh, RGB(0,40,80));   

    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);
   
    var radius = radius_h;
    gr.FillEllipse(x - radius/2, y - radius/2 , radius, radius, color2); //Center dot
   
    // ************* 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, color);
    }
    // ************* Hour Numbers
   
    for (var i = 0; i < steps; i++) {
        var radius =  radius_h_numbers;       
        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));

        gr.DrawString(hours, hour_font, color, x + xV - hour_r / 2, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
    // ************* 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, color);
    }
   
    // ************* 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, color);   
   
    // ************* 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, color);

    // ************* 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,50)); //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, color);

    // ************* 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, color);

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

    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, color); //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.DrawString(days[d.getDay()], datefont, color, 0, y + radius_h - 7, ww, 40, 0x11005000);
        gr.DrawString(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), datefont, color, 0, y + radius_h + 6, ww, 40, 0x11005000);           
//        gr.DrawString(d.toLocaleDateString(), datefont, color, 0, y + radius_h, ww, 40, 0x11005000);
    } else {
        gr.DrawString(d.toLocaleTimeString(), datefont, color, 0, y + radius_h, ww, 40, 0x11005000);
    }
}

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_timer(id) {
    d = new Date();
    window.Repaint();
}

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) {
 
    var _menu = window.CreatePopupMenu();
    var idx;

    _menu.AppendMenuItem(MF_STRING, 1, "Calendar");
    _menu.CheckMenuItem(1, window.GetProperty("DC"));
   
    if (ShiftDown) {
        _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        _menu.AppendMenuItem(MF_STRING, 20, "Properties");
        _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
    }
   
    idx = _menu.TrackPopupMenu(x, y);
   
    switch(idx) {
        case 1:
            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) {
    var step = step > 0 ? 1 : (radius_h > 35 ? -1 : 0);
    size(step);
}

function on_mouse_mbtn_up(x,y) {
    var delta = 65 - radius_h;
    step = delta;
    size(step);
}

function size(step) {
    radius_h = radius_h + step;
    radius_h_numbers = radius_h_numbers + step;
    radius_h_hand = radius_h_hand + step;
    radius_m = radius_m + step;
    radius_m_hand = radius_m_hand + step;
    radius_s_hand = radius_s_hand + step;
   
    if (radius_h <= 80 && radius_h >= 50) {hour_font = gdi.Font("Arial", 11, 0)};
    if (radius_h < 50) { hour_font = gdi.Font("Arial", 9, 0)};
    if (radius_h > 80) { hour_font = gdi.Font("Arial", 13, 0)};
    if (radius_h >= 50) {
        radius_h_dot = 5;
        radius_m_dot = 3;
        center_r = 10;
    } else {
        radius_h_dot = 4;
        radius_m_dot = 2;
        center_r = 9;
    };
    window.Repaint();
}


// ************* ColorSchemeFromImage

var g_metadb;
on_item_focus_change();

var album;


/*        var Y = 70;
        YR = gRed + (255 - gRed) * Y / 100;   
        YG = gGreen + (255 - gGreen) * Y / 100;
        YB = gBlue + (255 - gBlue) * Y / 100;
*/

function on_item_focus_change() {   
   metadb = fb.GetNowPlaying();   
    get_album_art(metadb);
}

function on_playback_new_track(metadb) {      
    on_item_focus_change();
}

function get_album_art(metadb) {
    if (metadb) {
        pic = utils.GetAlbumArtV2(metadb);
        album = fb.TitleFormat("%album%").EvalWithMetadb(metadb);
    }
}

function getAlpha(color) {
   return ((color >> 24) & 0xff);
}

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

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

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

function negative(colour) {
   var R = getRed(colour);
   var G = getGreen(colour);   
   var B = getBlue(colour);
   return RGB(Math.abs(R-255), Math.abs(G-255), Math.abs(B-255));
}

var gRed = 0, gGreen = 0, gBlue = 0;
var oldgRed = 0, oldgGreen = 0, oldgBlue = 0;

getColorSchemeFromImage = function(image) {   // @author "Br3tt aka Falstaff
      
    if(!image) {
        gRed = getRed(color);               
        gGreen = getGreen(color);               
        gBlue = getBlue(color);                  
    return;};                  
               
    var left_img = gdi.CreateImage(30, 50);               
    var gb = left_img.GetGraphics();               
    var colorScheme_array = Array();               
               
    gb.DrawImage(image, 0, 0, image.Width, image.Height, 7, 7, image.Width-14, image.Height-14, 0, 255);               
    left_img.ReleaseGraphics(gb);               
                       
//    var myVBArray = image.Resize(50,50,5).GetColorScheme(1);               
    var myVBArray = left_img.GetColorScheme(1);               
                       
    colorScheme_array.splice(0, colorScheme_array.length);               
    colorScheme_array = myVBArray.toArray();               
               
    gRed = getRed(colorScheme_array[0]);               
    gGreen = getGreen(colorScheme_array[0]);               
    gBlue = getBlue(colorScheme_array[0]);               
    gAlpha = getAlpha(colorScheme_array[0]);               
}               
               

Добавлено спустя 53 минуты 42 секунды:
Строку 253 исправить на var pic, album;
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #153 simmons » 27.09.2014, 17:06

Насчет дигитальных часов , выложил там файлы и конфиги /viewtopic.php?t=5261&p=52521#p52521
Вложения
digital clock.jpg
digital clock.jpg (58.58 КБ) Просмотров: 15045
simmons M
Аватара
Репутация: 128
С нами: 15 лет

Сообщение #154 AHAPXICT » 28.09.2014, 05:45

Нашёл таки ошибку! Вот так вот, учится в школе на одни двойки :oops:! Заметьте разницу: LevelGradient1 или levelGradient1 Теперь цвета пред установок переключаются отдельно для Peak и Level, Сhannel Font (L R) привязал к Level Color - теперь буквы всегда того же цвета что и Level.
Код: Выделить всё
// ==PREPROCESSOR==
// ======================== //
// @name "digital VU meter 2 (06.June.2012)"
// @author "jscript by Hunter >> http://extremehunter1972.deviantart.com /
// WSH Panel Mod component by Tianpeng Wang
// VU Meter component by DRON
// Modifed AHAPXICT for DarkOne v4.0 by tedGo
// ==/PREPROCESSOR==
// Requirements:
// foobar2000_v1.1 or better  >> http://foobar2000.org
// WSH panel Mod v1.5.3.1 or better  >> http://code.google.com/p/foo-wsh-panel-mod/downloads/list
// VU Meter 2012-06-05 or better >> http://foobar2000.org.ru/forum/
// Script with some examples here http://browse.deviantart.com/customization/skins/media/foobar2000/#/d51whqw
// ======================= //

function RGBA(r, g, b, a) {
    return ((a << 24) | (r << 16) | (g << 8) | (b));
}
function RGB(r, g, b) {
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}
function StringFormat() {
    var h_align = 0,
        v_align = 0,
        trimming = 0,
        flags = 0;
    switch (arguments.length) {
    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);
}

VK_UP = 0x26;
VK_DOWN = 0x28;
VK_CONTROL = 0x11;
DLGC_WANTARROWS = 0x0001;
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

window.DlgCode = DLGC_WANTARROWS;

VUMeter = new ActiveXObject("VUMeter");
VUMeter.RegisterWindow(window.ID);
// ======================= //
(function init() {
    VUMeter.Offset = window.GetProperty("Offset", -10);
})();
// ======================= //
function createImage() {

    if (ww <= 0 || wh <= 0) return;

    var minWidth = minHeight = 20;
    window.MinWidth = minWidth;

    orientation = "V";
    if (window.GetProperty("Orientation", "Vertical") == "Horizontal") orientation = "H";

    leftMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Left", 0) : window.GetProperty("Margin -> Horizontal Left", 11));
    topMargin = window.GetProperty("Margin -> Top ", 0);
    bottomMargin = (orientation == "V" ? window.GetProperty("Margin -> Vertical Bottom", 10) : window.GetProperty("Margin -> Horizontal Bottom", 0));
    rightMargin = window.GetProperty("Margin -> Right", 0);

    centerPadding = window.GetProperty("Padding -> Center", 4);
    peakLevelPadding = window.GetProperty("Padding -> Peak <-> Level ", 6);
    levelLineThickness = window.GetProperty("Thickness -> Level Line", 1);

    if (levelLineThickness < 1) {
        window.SetProperty("Thickness -> Level Line", 1);
        levelLineThickness = 1;
    }

    peakLineThickness = window.GetProperty("Thickness -> Peak Line", 3);
    peakHeight = peakLineThickness;

    if (orientation == "V") {

        leftPeakX = Math.floor(ww / 2) - peakLineThickness - centerPadding;
        rightPeakX = Math.floor(ww / 2) + centerPadding;
        leftPeakY = topMargin;
        rightPeakY = topMargin;

        leftLevelX = leftMargin;
        rightLevelX = rightPeakX + peakLineThickness + peakLevelPadding;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftMargin;
        rightLevelWidth = ww - rightLevelX - leftLevelX;

        leftLevelY = topMargin;
        rightLevelY = topMargin;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = ww - rightMargin - rightLevelX;

    } else if (orientation == "H") {

        leftPeakX = leftMargin;
        leftPeakY = Math.floor(wh / 2) - peakHeight - centerPadding;

        leftPeakHeight = window.GetProperty("Thickness -> Peak Line", 20);
        rightPeakHeight = leftPeakHeight;

        rightPeakX = leftMargin;
        rightPeakY = Math.floor(wh / 2) + centerPadding;

        leftLevelX = leftMargin;
        rightLevelX = leftMargin;
        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = ww - rightLevelX - leftLevelX;

        leftLevelX = leftMargin;
        rightLevelX = leftMargin;
        leftLevelY = topMargin;
        rightLevelY = rightPeakY + peakHeight + peakLevelPadding;

        leftLevelWidth = leftPeakX - peakLevelPadding - leftLevelX;
        rightLevelWidth = wh - rightLevelX - leftLevelX;

        leftLevelHeight = leftPeakY - peakLevelPadding - topMargin;
        rightLevelHeight = wh - bottomMargin - rightLevelY;

    }

    switch (window.GetProperty("Color -> Peak Preset", "Peak Default")) {

    case "Peak Default":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Default Gradient 1", "RGBA(95,114,127,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Default Gradient 2", "RGBA(191,228,255,255)"));
        id_p = 1;
        break;
    case "Peak Blue":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Blue Gradient 1", "RGBA(65,97,127,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Blue Gradient 2", "RGBA(128,192,255,255)"));
        id_p = 2;
        break;
    case "Peak Green":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Green Gradient 1", "RGBA(0,76,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Green Gradient 2", "RGB(0,255,0,255)"));
        id_p = 3;
        break;
    case "Peak Red":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Red Gradient 1", "RGBA(76,0,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Red Gradient 2", "RGBA(255,0,0,255)"));
        id_p = 4;
        break;
    case "Peak White":
        peakGradient1 = eval(window.GetProperty("Color -> Peak White Gradient 1", "RGBA(76,76,76,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak White Gradient 2", "RGBA(255,255,255,255)"));
        id_p = 5;
        break;   
    case "Peak Yellow":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Yellow Gradient 1", "RGBA(76,76,0,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Yellow Gradient 2", "RGBA(255,255,0,255)"));
        id_p = 6;
        break;   
    case "Custom Peak Color":
        peakGradient1 = eval(window.GetProperty("Color -> Peak Custom Gradient 1", "RGBA(20,32,40,255)"));
        peakGradient2 = eval(window.GetProperty("Color -> Peak Custom Gradient 2", "RGBA(63,100,127,255)"));
        id_p = 7;
        break;
   
    default:
        id_p = 1;

    }
   
    switch (window.GetProperty("Color -> Level Preset", "Level Default")){
    case "Level Default":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Default Gradient 1", "RGBA(95,114,127,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Default Gradient 2", "RGBA(191,228,255,255)"));
        id_l = 8;
        break;
    case "Level Blue":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Blue Gradient 1", "RGBA(65,97,127,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Blue Gradient 2", "RGBA(128,192,255,255)"));
        id_l = 9;
        break;
    case "Level Green":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Green Gradient 1", "RGBA(0,76,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Green Gradient 2", "RGB(0,255,0,255)"));
        id_l = 10;
        break;
    case "Level Red":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Red Gradient 1", "RGBA(76,0,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Red Gradient 2", "RGB(255,0,0,255)"));
        id_l = 11;
        break;
    case "Level White":
        LevelGradient1 = eval(window.GetProperty("Color -> Level White Gradient 1", "RGBA(76,76,76,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level White Gradient 2", "RGB(255,255,255,255)"));
        id_l = 12;
        break;   
    case "Level Yellow":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Yellow Gradient 1", "RGBA(76,76,0,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Yellow Gradient 2", "RGB(255,255,0,255)"));
        id_l = 13;
        break;   
    case "Custom Level Color":
        LevelGradient1 = eval(window.GetProperty("Color -> Level Custom Gradient 1", "RGBA(20,32,40,255)"));
        LevelGradient2 = eval(window.GetProperty("Color -> Level Custom Gradient 2", "RGBA(63,100,127,255)"));
        id_l = 14;
        break;
   
    default:
        id_l = 8;
    }
   
    backgroundColor = eval(window.GetProperty("Color -> Background", "RGB(19,30,38)"));

    //---> create image mask
    var mask = gdi.CreateImage(ww, wh);
    var _grMask = mask.GetGraphics();
    _grMask.FillSolidRect(0, 0, ww, wh, 0xFF000000);

    if (orientation == "V") {
        count = Math.floor((wh - topMargin - bottomMargin) / levelLineThickness);
    } else if (orientation == "H") {
        count = Math.floor((ww - leftMargin - rightMargin) / levelLineThickness);
    } else count = 0;

    peakWidth = peakLineThickness;
    peakHeight = peakLineThickness;

    var levelBackgroundGrad1 = eval(window.GetProperty("Color -> Level Background Gradient 1", "RGBA(22,34,42,255)"));
    var levelBackgroundGrad2 = eval(window.GetProperty("Color -> Level Background Gradient 2", "RGBA(40,52,63,255)"));

    var leftLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Left Gradient", "0.5"));
    var rightLevelBackgroundFocus = eval(window.GetProperty("Focus -> Level Background Right Gradient", "0.5"));

    var angle = orientation == "V" ? 0 : 90;

     levelLineBackgroundImg = gdi.CreateImage(ww, wh);
     _grLBI = levelLineBackgroundImg.GetGraphics();

    for (var i = 0; i < count; i++) {

        if (window.GetProperty("Solid Level", true) ? true : !(i % 2)) {

            if (orientation == "V") {
                _grMask.FillSolidRect(leftLevelX, levelLineThickness * i + leftLevelY, leftLevelWidth, levelLineThickness, 0xFFFFFFFF);
                _grMask.FillSolidRect(rightLevelX, levelLineThickness * i + leftLevelY, rightLevelWidth, levelLineThickness, 0xFFFFFFFF);

                _grLBI.FillGradRect(leftLevelX - 2, levelLineThickness * i + leftLevelY, leftLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, leftLevelBackgroundFocus);
                _grLBI.FillGradRect(rightLevelX - 2, levelLineThickness * i + leftLevelY, rightLevelWidth + 4, levelLineThickness, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);

                peakHeight = (i + 1) * levelLineThickness;

            }

            if (orientation == "H") {
                _grMask.FillSolidRect(levelLineThickness * i + leftLevelX, leftLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);
                _grMask.FillSolidRect(levelLineThickness * i + rightLevelX, rightLevelY, levelLineThickness, leftLevelHeight, 0xFFFFFFFF);

                _grLBI.FillGradRect(levelLineThickness * i + leftLevelX, leftLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);
                _grLBI.FillGradRect(levelLineThickness * i + rightLevelX, rightLevelY - 2, levelLineThickness, leftLevelHeight + 4, angle, levelBackgroundGrad1, levelBackgroundGrad2, rightLevelBackgroundFocus);

                peakWidth = (i + 1) * levelLineThickness;

            }

        }

    }

    _grMask.FillSolidRect(leftPeakX, leftPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
    _grMask.FillSolidRect(rightPeakX, rightPeakY, peakWidth, peakHeight, 0xFFFFFFFF);
   
    levelLineBackgroundImg.ReleaseGraphics(_grLBI);
    mask.ReleaseGraphics(_grMask)

    //---> create image
    img = gdi.CreateImage(ww, wh);
    _gr = img.GetGraphics();

    _gr.FillSolidRect(0, 0, ww, wh, backgroundColor);

    img.ReleaseGraphics(_gr);

    //---> apply mask to image
    var mask = mask.Resize(ww, wh);
    img.ApplyMask(mask);
    mask.Dispose();

    peakLineBackgroundImg = gdi.CreateImage(ww, wh);
    _gr = peakLineBackgroundImg.GetGraphics();

    var angle = 0;
    if (orientation == "H") {
        angle = window.GetProperty("Angle -> Peak Background Horizontal", 90);
    }
    if (orientation == "V") {
        angle = window.GetProperty("Angle -> Peak Background Vertical", angle);
    }

    var leftPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Left", "0.5"));
    var rightPeakBackgroundFocus = eval(window.GetProperty("Focus -> Peak Background Right", "0.5"));
    var grad1 = eval(window.GetProperty("Color -> Peak Background Gradient 1", "RGBA(20,32,40,255)"));
    var grad2 = eval(window.GetProperty("Color -> Peak Background Gradient 2", "RGBA(35,47,58,255)"));

    _gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, leftPeakBackgroundFocus);
    _gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, peakWidth + 4, peakHeight + 4, angle, grad1, grad2, rightPeakBackgroundFocus);
   
    peakLineBackgroundImg.ReleaseGraphics(_gr);

}
// ================= //
function on_paint(gr) {

       if (wh > minHeight) {

        gr.DrawImage(peakLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);
        gr.DrawImage(levelLineBackgroundImg, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);

        var swapLevelPeak = window.GetProperty("Swap -> Peak with Level");

       if (swapLevelPeak) {
            $leftPeak = VUMeter.LeftLevel;
            $rightPeak = VUMeter.RightLevel;
            $leftLevel = VUMeter.LeftPeak;
            $rightLevel = VUMeter.RightPeak;
        } else {
            $leftLevel = VUMeter.LeftLevel;
            $rightLevel = VUMeter.RightLevel;
            $leftPeak = VUMeter.LeftPeak;
            $rightPeak = VUMeter.RightPeak;
        }

        var flipLevel = window.GetProperty("Flip -> Level", false);
        var flipPeak = window.GetProperty("Flip -> Peak", false);

      if (orientation == "V") {

            var bottomM = (wh - bottomMargin);

            if (!flipPeak) {
                leftPeakY = bottomM - bottomM * $leftPeak + topMargin;
                rightPeakY = bottomM - bottomM * $rightPeak + topMargin;
            }

            leftPeakHeight = bottomM * $leftPeak - topMargin;
            rightPeakHeight = bottomM * $rightPeak - topMargin;
            leftPeakWidth = peakLineThickness;
            rightPeakWidth = peakLineThickness;

            if (!flipLevel) {
                leftLevelY = bottomM - bottomM * $leftLevel + topMargin;
                rightLevelY = bottomM - bottomM * $rightLevel + topMargin;
            }

            leftLevelHeight = bottomM * $leftLevel - topMargin;
            rightLevelHeight = bottomM * $rightLevel - topMargin;

        }

        if (orientation == "H") {

            var rightM = ww - rightMargin;

            leftPeakWidth = rightM * $leftPeak - leftMargin;
            rightPeakWidth = rightM * $rightPeak - leftMargin;
            leftPeakHeight = peakLineThickness;
            rightPeakHeight = peakLineThickness;
            leftLevelWidth = rightM * $leftLevel - leftMargin;
            rightLevelWidth = rightM * $rightLevel - leftMargin;

            if (flipPeak) {
                leftPeakX = rightM - rightM * $leftPeak + leftMargin;
                rightPeakX = rightM - rightM * $rightPeak + leftMargin;
            }

            if (flipLevel) {
                leftLevelX = rightM - rightM * $leftLevel + leftMargin;
                rightLevelX = rightM - rightM * $rightLevel + leftMargin;
            }

        }

        var angle = orientation == "V" ? 0 : 90;
        var leftPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Left Gradient", "0.5"));
        var rightPeakGradientFocus = eval(window.GetProperty("Focus -> Peak Right Gradient", "0.5"));
        var leftLevelGradientFocus = eval(window.GetProperty("Focus -> Level Left Gradient", "0.5"));
        var rightLevelGradientFocus = eval(window.GetProperty("Focus -> Level Right Gradient", "0.5"));

        gr.FillGradRect(leftPeakX - 2, leftPeakY - 2, leftPeakWidth + 4, leftPeakHeight + 4, angle, peakGradient1, peakGradient2, leftPeakGradientFocus);
        gr.FillGradRect(rightPeakX - 2, rightPeakY - 2, rightPeakWidth + 4, rightPeakHeight + 4, angle, peakGradient1, peakGradient2, rightPeakGradientFocus);

        gr.FillGradRect(leftLevelX - 2, leftLevelY - 2, leftLevelWidth + 4, leftLevelHeight + 4, angle, LevelGradient1, LevelGradient2, leftLevelGradientFocus);
        gr.FillGradRect(rightLevelX - 2, rightLevelY - 2, rightLevelWidth + 4, rightLevelHeight + 4, angle, LevelGradient1, LevelGradient2, rightLevelGradientFocus);

        gr.DrawImage(img, 0, 0, ww, wh, 0, 0, ww, wh, 0, 255);

        gr.SetTextRenderingHint(5);

        var levelFont = gdi.font("Small Fonts", 7, 0);
        var channelFont = gdi.font("Tahoma", 10, 1);
        var channelColor = LevelGradient2;
        var SF = StringFormat(1, 1);

        if (orientation == "V") {

            channelLWidth = gr.CalcTextWidth("O", channelFont);
            channelLX = (ww / 2) / 2 - channelLWidth;
            channelRX = ww - (ww / 4);
            channelLY = bottomM - 1;
            channelRY = bottomM - 1;
            channelRWidth = channelLWidth;
            channelLHeight = wh - bottomM;
            channelRHeight = wh - bottomM;

            offsetX = 0;
            offsetY = bottomM;
            offsetWidth = ww;
            offsetHeight = wh - bottomM - 1;

        }
        if (orientation == "H") {

            channelLHeight = gr.CalcTextHeight("O", channelFont);
            channelLX = 0;
            channelRX = 0;
            channelLY = (wh / 2) / 2 - channelLHeight / 2;
            channelRY = wh - (wh / 4) - channelLHeight / 2;
            channelLWidth = leftMargin;
            channelRWidth = leftMargin;
            channelRHeight = channelLHeight;

            offsetX = 0;
            offsetY = 1;
            offsetWidth = leftMargin - 0;
            offsetHeight = wh;

        }

        gr.DrawString(VUMeter.Offset,levelFont, eval(window.GetProperty("Color -> Text Offset", "RGBA(206,206,206,0)")), offsetX, offsetY, offsetWidth, offsetHeight, SF);
        if (ww > channelLWidth * 5 && wh > channelLHeight * 3) {
            gr.DrawString("L", channelFont, channelColor, channelLX, channelLY, channelLWidth, channelLHeight, SF);
            gr.DrawString("R", channelFont, channelColor, channelRX, channelRY, channelRWidth, channelRHeight, SF);
        }
    }
}
// ======================= //
function on_size() {
    ww = window.Width;
    wh = window.Height;
    createImage();
}
// ======================= //
function on_mouse_wheel(step) {
    if (utils.IsKeyPressed(VK_CONTROL)) window.SetProperty("Offset", VUMeter.Offset + step);
    init();
}
// ======================= //
function on_key_down(vkey) {
    if (vkey == VK_UP) on_mouse_wheel(1);
    if (vkey == VK_DOWN) on_mouse_wheel(-1);
}
// ======================= //
function on_mouse_rbtn_up(x, y) {

    var _menu = window.CreatePopupMenu();
   
    _menu.AppendMenuItem(MF_STRING, 1, "Peak Default");
    _menu.AppendMenuItem(MF_STRING, 2, "Peak Blue");
    _menu.AppendMenuItem(MF_STRING, 3, "Peak Green");
    _menu.AppendMenuItem(MF_STRING, 4, "Peak Red");
    _menu.AppendMenuItem(MF_STRING, 5, "Peak White");
    _menu.AppendMenuItem(MF_STRING, 6, "Peak Yellow")
    _menu.AppendMenuItem(MF_STRING, 7, "Peak Custom")
    _menu.CheckMenuRadioItem(1, 7, id_p);
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 8, "Level Default");
    _menu.AppendMenuItem(MF_STRING, 9, "Level Blue");
    _menu.AppendMenuItem(MF_STRING, 10, "Level Green");
    _menu.AppendMenuItem(MF_STRING, 11, "Level Red");
    _menu.AppendMenuItem(MF_STRING, 12, "Level White");
    _menu.AppendMenuItem(MF_STRING, 13, "Level Yellow")
    _menu.AppendMenuItem(MF_STRING, 14, "Level Custom")
    _menu.CheckMenuRadioItem(8, 14, id_l);
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 15, window.GetProperty("Orientation") == "Horizontal" ? "Vertical" : "Horizontal");
    _menu.AppendMenuItem(MF_STRING, 16, "Flip Peak");
    _menu.CheckMenuItem(16, window.GetProperty("Flip -> Peak", false));
    _menu.AppendMenuItem(MF_STRING, 17, "Flip Level");
    _menu.CheckMenuItem(17, window.GetProperty("Flip -> Level", false));
    _menu.AppendMenuItem(MF_STRING, 18, "Swap -> Peak with Level");
    _menu.CheckMenuItem(18, window.GetProperty("Swap -> Peak with Level", false));
    _menu.AppendMenuItem(MF_STRING, 19, "Solid Level");
    _menu.CheckMenuItem(19, window.GetProperty("Solid Level", false));
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 20, "Properties...");
    _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
   
    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {

    case 1:
        window.SetProperty("Color -> Peak Preset", "Peak Default");
        createImage();
        break;
    case 2:
        window.SetProperty("Color -> Peak Preset", "Peak Blue");
        createImage();
        break;
    case 3:
        window.SetProperty("Color -> Peak Preset", "Peak Green");
        createImage();
        break;
    case 4:
        window.SetProperty("Color -> Peak Preset", "Peak Red");
        createImage();
        break;
    case 5:
        window.SetProperty("Color -> Peak Preset", "Peak White");
        createImage();
        break;   
    case 6:
        window.SetProperty("Color -> Peak Preset", "Peak Yellow");
        createImage();
        break; 
    case 7:
        window.SetProperty("Color -> Peak Preset", "Custom Peak Color");
        createImage();
        break;
    case 8:
        window.SetProperty("Color -> Level Preset", "Level Default");
        createImage();
        break;
    case 9:
        window.SetProperty("Color -> Level Preset", "Level Blue");
        createImage();
        break;
    case 10:
        window.SetProperty("Color -> Level Preset", "Level Green");
        createImage();
        break;
    case 11:
        window.SetProperty("Color -> Level Preset", "Level Red");
        createImage();
        break;
    case 12:
        window.SetProperty("Color -> Level Preset", "Level White");
        createImage();
        break;   
    case 13:
        window.SetProperty("Color -> Level Preset", "Level Yellow");
        createImage();
        break; 
    case 14:
        window.SetProperty("Color -> Level Preset", "Custom Level Color");
        createImage();
        break;
    case 15:
        window.SetProperty("Orientation", window.GetProperty("Orientation") == "Vertical" ? "Horizontal" : "Vertical");
        createImage();
        break;
    case 16:
        window.SetProperty("Flip -> Peak", window.GetProperty("Flip -> Peak") ? false : true);
        createImage();
        break;
    case 17:
        window.SetProperty("Flip -> Level", window.GetProperty("Flip -> Level") ? false : true);
        createImage();
        break;
    case 18:
        window.SetProperty("Swap -> Peak with Level", window.GetProperty("Swap -> Peak with Level") ? false : true);
        createImage();
        break;
    case 19:
        window.SetProperty("Solid Level", window.GetProperty("Solid Level") ? false : true);
        createImage();
        break;
    case 20:
        window.ShowProperties();
        break; 
    case 21:
        window.ShowConfigure();
        break;
    }
    _menu.Dispose();
    return true
}
// ======================= //

Добавлено спустя 6 часов 28 минут:
Теперь - часы и снова те же грабли. Есть меню, есть пред установки, которые почему то не переключаются - требуют подтверждения из Properties... И если я хотя бы понимал что делаю, а так воду в ступе мешаю. Не задаю глупых вопросов, может кто то подскажет. На всякий случай шрифт tedGo's DarkOne с ним поярче будет.
Код: Выделить всё
// 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 for DarkOne v4.0 by tedGo

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


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

var language = 1
//####################################################################












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

MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

var DT_CENTER = 0x00000001;
var g_font1 = gdi.Font("DarkOne", 56, 0); //Time
var g_font2 = gdi.Font("DarkOne", 19, 0); // Day
var g_font3 = gdi.Font("DarkOne", 37, 0); // Date
var g_font4 = gdi.Font("DarkOne", 19, 0); // Month
//var font_rgb = window.GetProperty("Preset");

var currentTime = new Date();
var clock_time = window.CreateTimerInterval(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("", "", "", "", "", "", "", "", "", "", "", "");
}

switch (window.GetProperty("Preset", "Default")) {

    case "Default":
        font_rgb = eval(window.GetProperty("Default", "RGB(191,228,255)"));
        p = 1;
        break;
    case "Blue":
        font_rgb = eval(window.GetProperty("Blue", "RGB(128,192,255)"));
        p = 2;
        break;
    case "Green":
       font_rgb = eval(window.GetProperty("Green", "RGB(0,255,0)"));
        p = 3;
        break;
    case "Red":
        font_rgb = eval(window.GetProperty("Red", "RGB(255,0,0)"));
        p = 4;
        break;
    case "White":
        font_rgb = eval(window.GetProperty("White", "RGB(255,255,255)"));
        p = 5;
        break;   
    case "Yellow":
        font_rgb = eval(window.GetProperty("Yellow", "RGB(255,255,0)"));
        p = 6;
        break;   
   
    default:
        p = 1;

}
function on_paint(gr){
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;
 

  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
 
  gr.GdiDrawText( currentHours + ":" + currentMinutes + ":" + currentSeconds, g_font1, font_rgb, -15, -6-y, ww, 60, DT_CENTER);
  gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
  gr.GdiDrawText( "|" + currentDate + "|" , g_font3, font_rgb, -152, 5-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, -26-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, 12-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, 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, p);
    _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:
        window.SetProperty("Preset", "Default");
       break;
    case 2:
        window.SetProperty("Preset", "Blue");
        break;
    case 3:
        window.SetProperty("Preset", "Green");
        break;
    case 4:
        window.SetProperty("Preset", "Red");
        break;
    case 5:
        window.SetProperty("Preset", "White");
        break;   
    case 6:
        window.SetProperty("Preset", "Yellow");
        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
P.S. А дальше PSS :eek:
Вложения
Digital Clock3.png
WSH digital VU meter 2 FINAL.png
WSH digital VU meter 2 FINAL.png (6.61 КБ) Просмотров: 15023
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #155 kgena_ua » 28.09.2014, 12:50

AHAPXICT, попробуйте так:
Код: Выделить всё
// 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 for DarkOne v4.0 by tedGo

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


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

var language = 1
//####################################################################

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

MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

var DT_CENTER = 0x00000001;
var g_font1 = gdi.Font("DarkOne", 56, 0); //Time
var g_font2 = gdi.Font("DarkOne", 19, 0); // Day
var g_font3 = gdi.Font("DarkOne", 37, 0); // Date
var g_font4 = gdi.Font("DarkOne", 19, 0); // Month
//var font_rgb = window.GetProperty("Preset");

var currentTime = new Date();
var clock_time = window.CreateTimerInterval(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("", "", "", "", "", "", "", "", "", "", "", "");
}

/*switch (window.GetProperty("Preset", "Default")) {

    case "Default":
        font_rgb = eval(window.GetProperty("Default", "RGB(191,228,255)"));
        p = 1;
        break;
    case "Blue":
        font_rgb = eval(window.GetProperty("Blue", "RGB(128,192,255)"));
        p = 2;
        break;
    case "Green":
       font_rgb = eval(window.GetProperty("Green", "RGB(0,255,0)"));
        p = 3;
        break;
    case "Red":
        font_rgb = eval(window.GetProperty("Red", "RGB(255,0,0)"));
        p = 4;
        break;
    case "White":
        font_rgb = eval(window.GetProperty("White", "RGB(255,255,255)"));
        p = 5;
        break;   
    case "Yellow":
        font_rgb = eval(window.GetProperty("Yellow", "RGB(255,255,0)"));
        p = 6;
        break;   
   
    default:
        p = 1;

}
*/


function on_paint(gr){
   
if (window.GetProperty("Color") == 1) var font_rgb = RGB(191,228,255);  //Default   
if (window.GetProperty("Color") == 2) var font_rgb = RGB(128,192,255);  //Blue   
if (window.GetProperty("Color") == 3) var font_rgb = RGB(0,255,0);      //Green   
if (window.GetProperty("Color") == 4) var font_rgb = RGB(255,0,0);      //Red   
if (window.GetProperty("Color") == 5) var font_rgb = RGB(255,255,255);  //White   
if (window.GetProperty("Color") == 6) var font_rgb = RGB(255,255,0);    //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;
 

  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
 
  gr.GdiDrawText( currentHours + ":" + currentMinutes + ":" + currentSeconds, g_font1, font_rgb, -15, -6-y, ww, 60, DT_CENTER);
  gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
  gr.GdiDrawText( "|" + currentDate + "|" , g_font3, font_rgb, -152, 5-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, -26-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, 12-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, 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
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #156 AHAPXICT » 28.09.2014, 21:48

kgena_ua, При огромнейшее спасибо ! Только проснулся и сразу проверять что на форуме пишут. Как только я пытался, методом тыка как обычно, перенести за скобку on_paint(gr) и вставить var font_rgb = window.GetProperty("Preset", " "); сразу начиналась цветомузыка, даже в текстовом документе сохранил на всякий случай, для вечеринок например. Сам бы я не додумался, ну или через пару лет, а нужно сейчас))) Вы за одно избавили меня от ненужных строк в скрипте с переключателями за это с меня ещё :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 for DarkOne v4.0 by tedGo

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


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

var language = 1
//####################################################################

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

MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;

var DT_CENTER = 0x00000001;
var g_font1 = gdi.Font("DarkOne", 56, 0); //Time
var g_font2 = gdi.Font("DarkOne", 19, 0); // Day
var g_font3 = gdi.Font("DarkOne", 37, 0); // Date
var g_font4 = gdi.Font("DarkOne", 19, 0); // Month
//var font_rgb = window.GetProperty("Preset");

var currentTime = new Date();
var clock_time = window.CreateTimerInterval(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(191,228,255);  //Default   
if (window.GetProperty("Color") == 2) var font_rgb = RGB(128,192,255);  //Blue   
if (window.GetProperty("Color") == 3) var font_rgb = RGB(0,255,0);      //Green   
if (window.GetProperty("Color") == 4) var font_rgb = RGB(255,0,0);      //Red   
if (window.GetProperty("Color") == 5) var font_rgb = RGB(255,255,255);  //White   
if (window.GetProperty("Color") == 6) var font_rgb = RGB(255,255,0);    //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;
 

  currentMinutes = ( currentMinutes < 10 ? "0" : "" ) + currentMinutes;
  currentSeconds = ( currentSeconds < 10 ? "0" : "" ) + currentSeconds;
 
  gr.GdiDrawText( currentHours + ":" + currentMinutes + ":" + currentSeconds, g_font1, font_rgb, -15, -6-y, ww, 60, DT_CENTER);
  gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( days[currentDay] , g_font2, font_rgb, 136, 3-y, ww, 22, DT_CENTER);
  gr.GdiDrawText( currentDate , g_font3, font_rgb, -152, 5-y, ww, 46, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -182, 5-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "|" , g_font3, font_rgb, -122, 5-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, -26-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( "___" , g_font3, font_rgb, -150, 12-y, ww, 40, DT_CENTER);
  gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, DT_CENTER);
//--Duble Light--// gr.GdiDrawText( months[currentMonth] + " " , g_font4, font_rgb, 142, 24-y, ww, 22, 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 лет 4 месяца

На счет "научного метода тыка"

Сообщение #157 macarych » 28.09.2014, 22:59

Парни, в свое время, я нарыл несколько букварей по WSH, но ни один до конца так и не дочитал. Казалось, это долго - планомерное изучение, быстрее - потыкл туда, сюда, что-нибудь получится... Так и остался недоучкой.
https://www.dropbox.com/s/a5m2xrnflj99yit/WSH.zip?dl=0
Возможно пригодится тому у кого больше терпения и желания.
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #158 LUR » 28.09.2014, 23:14

macarych, в WSH там просто если ты в душе программист, то вобще всё просто, но если нет, то можно понять :smile:

Добавлено спустя 1 минуту 33 секунды:
P.S. За мануалы спасибо.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #159 macarych » 28.09.2014, 23:47

LUR:в WSH там просто если ты в душе программист, то вобще всё просто, но если нет, то можно понять
Совершенно верно, логика становится понятной после нескольких ошибок, настолько что даже можно чего-то такое, якобы свое, замутить (это я себя имею в виду)). Но все же, более продуктивно - учебники почитать, мне лень просто было :oops:
macarych M
Аватара
Репутация: 417
С нами: 15 лет 2 месяца

Сообщение #160 kgena_ua » 29.09.2014, 18:42

Опять часы :smile: .
Хотелось придать какой-то объем, при этом используя один цвет (выбранный цвет, если несколько).
Решил задачу изменением яркости для элементов: арче всего секундная стрелка, затем минутная, часовая и с самой низкой яркостью точки и цифры. Еще заменил метки минут и часов на прямоугольники. Убрал привязку к Flags.txt и Helpers.txt.
clock.png
clock.png (65.24 КБ) Просмотров: 14913

Код: Выделить всё
// 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 clock_timer = window.CreateTimerInterval(1000);

var d = new Date();

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, RGB(0,40,80));   

    if (window.GetProperty("Color") == 1) var color = RGB(0,157,255);
    if (window.GetProperty("Color") == 2) var color = RGB(140,164,179);
   
    var Y = 30;
    YR = getRed(color) + (255 - getRed(color)) * Y / 100;   
    YG = getGreen(color) + (255 - getGreen(color)) * Y / 100;
    YB = getBlue(color) + (255 - getBlue(color)) * Y / 100;
    var colorY = RGB(YR,YG,YB);

    var Y = 20;
    YR2 = getRed(color) + (255 - getRed(color)) * Y / 100;   
    YG2 = getGreen(color) + (255 - getGreen(color)) * Y / 100;
    YB2 = getBlue(color) + (255 - getBlue(color)) * Y / 100;
    var colorY2 = RGB(YR2,YG2,YB2);
   
    var Y = 10;
    YR3 = getRed(color) - (getRed(color)) * Y / 100;   
    YG3 = getGreen(color) - (getGreen(color)) * Y / 100;
    YB3 = getBlue(color) - (getBlue(color)) * Y / 100;
    var colorY3 = RGB(YR3,YG3,YB3);
   
    var Y = 20;
    YR4 = getRed(color) - (getRed(color)) * Y / 100;   
    YG4 = getGreen(color) - (getGreen(color)) * Y / 100;
    YB4 = getBlue(color) - (getBlue(color)) * Y / 100;
    var colorY4 = RGB(YR4,YG4,YB4);

//    gr.FillSolidRect(0, 0, ww, wh/2, colorY3);   

    gr.SetTextRenderingHint(5);
    gr.SetSmoothingMode(4);
   
    // ************* 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, 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, colorY4, x + xV - hour_r / 2 + shift, y + yV - hour_r / 2, hour_r, hour_r, 0x11005000); //
    }
   
    // ************* 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));

        gr.DrawLine(x + xV1, y + yV1, x + xV2, y + yV2, minute_r, colorY4);
    }
   
    // ************* 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, colorY);

    // ************* 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, colorY);

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

    gr.FillEllipse(x - center_r / 2, y - center_r / 2, center_r, center_r, colorY); //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.DrawString(days[d.getDay()], date_font, RGB(0,0,0), 1, y + radius_h - 6, ww, 40, 0x11005000);
        gr.DrawString(days[d.getDay()], date_font, colorY, 0, y + radius_h - 7, ww, 40, 0x11005000);
        gr.DrawString(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), date_font, RGB(0,0,0), 1, y + radius_h + 7, ww, 40, 0x11005000);           
        gr.DrawString(d.getDate() + " " + months[d.getMonth()] + ", " + d.getYear(), date_font, colorY, 0, y + radius_h + 6, ww, 40, 0x11005000);           
//        gr.DrawString(d.toLocaleDateString(), datefont, color, 0, y + radius_h, ww, 40, 0x11005000);
    } else {
        gr.DrawString(d.toLocaleTimeString(), date_font, RGB(0,0,0), 1, y + radius_h + 1, ww, 40, 0x11005000);
        gr.DrawString(d.toLocaleTimeString(), date_font, colorY, 0, y + radius_h, ww, 40, 0x11005000);
    }
}

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_timer(id) {
    d = new Date();
    window.Repaint();
}

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) {
    var step = step > 0 ? 1 : (radius_h > 35 ? -1 : 0);
    size(step);
}

function on_mouse_mbtn_up(x,y) {
    var delta = 68 - radius_h;
    step = delta;
    size(step);
}

function size(step) {
    radius_h = radius_h + step;
    radius_h_numbers = radius_h_numbers + step;
    radius_h_hand = radius_h_hand + step;
    radius_m = radius_m + step;
    radius_m_hand = radius_m_hand + step;
    radius_s_hand = radius_s_hand + step;
   
    if (radius_h <= 80 && radius_h >= 50) {hour_font = gdi.Font("Arial", 11, 0)};
    if (radius_h < 50) { hour_font = gdi.Font("Arial", 9, 0)};
    if (radius_h > 80) { hour_font = gdi.Font("Arial", 13, 0)};
    if (radius_h >= 50) {
        radius_h_dot = 3;
        radius_m_dot = 3;
        center_r = 10;
    } else {
        radius_h_dot = 2;
        radius_m_dot = 2;
        center_r = 9;
    };
    window.Repaint();
}

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

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

function getBlue(color) {
   return (color & 0xff);
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Пред.След.

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