Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #181 macarych » 10.01.2015, 18:33

kgena_ua, у меня к Вам просьба.
Вот тут http://pccar.ru/showpost.php?p=316728&postcount=744 парни просят меня замутить поиск трека в библиотеке. В случае стандартного использования плеера нет никаких проблем, имеет место быть по умолчанию. Тут же, речь идет о тачскрине и управлении пальцами, как я понимаю, это можно на WSH организовать, но мне уровень знаний не позволяет сделать это самому.
Может, поможете?
Просьба так же адресована ко всем, кто может помочь. Куча автопользователей будет благодарна за такую возможность.
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #182 kgena_ua » 11.01.2015, 14:00

macarych, когда-то хотел создать поиск трека на WSH через набор символов на клавиатуре - забросил.
Здесь похожая задача, я так понимаю. С тачскрином я совершенно не знаком. Как я это понимаю: на экране я попробовал вывести алфавит и ,выбирая мышкой символы, создаю текст, по которому затем (или в процессе набора динамически, я пока не знаю как) произведу поиск в плейлисте.
Вот создал скрипт, где переменная string содержит последовательность символов, которые я выбрал мышкой. Теперь нужно думать как перейти к треку в плейлисте где title содержит значение переменной string.
macarych писал(а):Просьба так же адресована ко всем, кто может помочь
Безымянный.png
Безымянный.png (8.94 КБ) Просмотров: 3576

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

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

var txt_row = 3;
var string = "";
DT_CENTER = 0x00000001;

function on_paint(gr) { 
   
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));

    gr.GdiDrawText(string, font, RGB(255,255,200), 10, txt_row, ww , wh, 0);
   
    for (var i = 0; i <= it; i = i + 1) {
        gr.GdiDrawText(ab[i], font, RGB(255,255,200), co[i], txt_row + 20, ww/it , wh,DT_CENTER);                  
    }
}

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

function on_mouse_lbtn_down (x, y){
    for (var i = 0; i < it; i = i + 1) {
        if (x > co[i] && x < co[i+1]) {string = string + ab[i]}               
    }   
    if (x > co[27] && x < ww) {string = ""}
    window.Repaint();

}
var it = 28;
var co = Array(
    ww / it * 0,
    ww / it * 1,
    ww / it * 2,
    ww / it * 3,
    ww / it * 4,
    ww / it * 5,
    ww / it * 6,
    ww / it * 7,
    ww / it * 8,
    ww / it * 9, 
    ww / it * 10,
    ww / it * 11,
    ww / it * 12,
    ww / it * 13,
    ww / it * 14, 
    ww / it * 15,
    ww / it * 16,
    ww / it * 17,
    ww / it * 18,
    ww / it * 19,
    ww / it * 20,
    ww / it * 21,
    ww / it * 22, 
    ww / it * 23,
    ww / it * 24,
    ww / it * 25,
    ww / it * 26,
    ww / it * 27     
)

var ab = Array(
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
"..."
)
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #183 macarych » 11.01.2015, 14:52

kgena_ua, спасибо. Вы натолкнули меня на мысль поковырять скрипты Фальстафа, кажется в "ковер флоу" у него был поиск.

Забил в поиск и куда-бы Вы думали он меня привел?!... Сюда.
А потом сюда
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #184 kgena_ua » 14.01.2015, 15:54

macarych, новый скрипт:
ищет в базе при каждом выборе символа;
если находит совпадение (хоть первый символ) - создается и активируется плейлист search;
продолжая вводить символы содержимое плейлиста изменяется (если последовательность символов находится);
если последовательность символов не находится переключается на предшествующий плейлист.
Безымянный.png

Символы:
_ пробел;
< стереть предыдущий;
... очистить.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

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

var txt_row = 3;
var string = "";
var it = 29;
DT_CENTER = 0x00000001;
var on_mouse = false;
var ab = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","<","...")

function on_paint(gr) { 
   
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
    if(on_mouse) gr.FillSolidRect (x_col, txt_row + 20, ww / it, 20, RGB(80,80,80));

    gr.GdiDrawText(string, font, RGB(200,200,200), 10, txt_row, ww , wh, 0);
   
    for (var i = 0; i <= it; i = i + 1) {
        oolor = x_color > ww / it * i && x_color < ww / it * (i + 1) && on_mouse ? RGB(255,255,230) : RGB(180,180,180);
        gr.GdiDrawText(ab[i], font, oolor, ww / it * i, txt_row + 20, ww / it , wh, DT_CENTER);   
        if (i == 26) gr.GdiDrawText("_", font, oolor, ww / it * i, txt_row + 20, ww / it , wh, DT_CENTER);            
    }

    gr.GdiDrawText(search, font, RGB(180,180,180), 10, txt_row + 33, ww , wh, 0);
}

var search = false;
var count;
var previous_pll;

function on_mouse_lbtn_down (x, y){
    if (!search) previous_pll = plman.ActivePlaylist;
   
    for (var i = 0; i <= 26; i = i + 1) {
        if (x > ww / it * i && x < ww / it * (i + 1)) {string = string + ab[i]}   
    }
    if (x > ww / it * 27 && x < ww / it * 28) {string = string.substring(0,string.length - 1)}   
    if (x > ww / it * 28 && x < ww) {string = ""}
    string = string.replace("  "," ");
    pll_search();
}

function pll_search() {
    remove_pll("search");
    var sort = "%artist% - %date% - %album% - %discnumber% - %tracknumber% - %title%";
    idx = plman.PlaylistCount;
    fb.CreateAutoPlaylist(idx, "search", "%title% HAS " + string, sort, 0);
    count = fb.PlaylistItemCount(idx)
    if (count > 0) {fb.ActivePlaylist = idx; search = true} else {fb.ActivePlaylist = previous_pll; search = false};
}

function on_mouse_mbtn_up(x,y) {
    if (string.length >0) pll_search();
//    str = str.substring(0,str.length-1);
}
/*
function search(str, string){
    str = str.toLowerCase();
    if (str.search(string) != -1) {
         return true;
      } else {
         return false;
      }
}
*/
function remove_pll(pll_name){
    remove_idx = fb.PlaylistCount;
    for (var i = 1; i < remove_idx; i++) {
       if (fb.GetPlaylistName(i) == pll_name) {fb.RemovePlaylist(i)}
    }
}

function on_playback_starting(cmd, is_paused) {
    string = "";
    if (fb.GetPlaylistName(fb.ActivePlaylist) != "search") {remove_pll("search");}
}

// *******************************************************************************

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

var x_col;
var x_color;
function on_mouse_move(x,y) {
    x_color = x;
    on_mouse = true;
    for (var i = 0; i < it; i = i + 1) {
        if (x > ww / it * i) {x_col = ww / it * i}             
    }
    window.Repaint();
}

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

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #185 AHAPXICT » 16.01.2015, 18:39

kgena_ua,
а есть-ли смысл добавить в "бегущую строку" вывод info : encoding, codec, codec_profile и т.д.
Замечательная идея!!! Можно добавить и больше, что бы пользователь по ЛКМ сам выбирал какую информацию видеть на экране! Я как всегда чуть переделал под себя ваш скрипт, добавил переключение цветов, ставил блоки для шрифта. С v4.0 получилось всё просто и быстро, а вот с v3.1 замучился, установка градиента на градиент выглядела примерно так - WSH, скриншот, пайт.нет, инструмент пипетка - и так до бесконечности :smile: Но вроде бы получилось, уже сделал пару .FCL файлов для своей модификации. Если вас не затруднит, проверите мои кривые переделки)))
v4.0
Код: Выделить всё
// Scroll Text
// author kgena_ua
// version 1.0
// WSH Panel Mod component by Tianpeng Wang

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;
var font = gdi.Font("DarkOne",29,0);
var ww,wh;

var txt_row = 4;
var s = 10, step = window.Width, step2 = window.Width;
var t, t_width, dir, mode, sw = 1;
var t1 = "", t2 = "", t3 = "";
var show1, show2, show3;

function on_paint(gr) {

//    gr.FillSolidRect (0, 0, ww, wh, RGB(19,30,38));
 
if (window.GetProperty("Color") == 1) var font_rgb = RGB(190,227,254), block_rgb = RGB(24,37,46);   //Default   
if (window.GetProperty("Color") == 2) var font_rgb = RGB(127,191,254), block_rgb = RGB(22,36,46);   //Blue   
if (window.GetProperty("Color") == 3) var font_rgb = RGB(0,255,0), block_rgb = RGB(18,38,38);       //Green   
if (window.GetProperty("Color") == 4) var font_rgb = RGB(255,0,0), block_rgb = RGB(38,26,34);       //Red   
if (window.GetProperty("Color") == 5) var font_rgb = RGB(253,253,254), block_rgb = RGB(26,38,46);   //White   
if (window.GetProperty("Color") == 6) var font_rgb = RGB(253,254,1), block_rgb = RGB(26,38,38);     //Yellow 
   
    show1 = window.GetProperty("show1",1);
    show2 = window.GetProperty("show2",1);
    show3 = window.GetProperty("show3",1);
    mode = window.GetProperty("mode",1);
   
    if (show1 == 1) {t1 = fb.TitleFormat("$upper([%title%])").Eval();
    } else {t1 = "";}

    if (show2 == 1) {t2 = fb.TitleFormat("$upper([%artist%])").Eval();
    } else {t2 = "";}

    if (show3 == 1) {t3 = fb.TitleFormat("$upper([%album%])[ - %date%]").Eval();
    } else {t3 = "";}
   
    t = t1 + (show1 > 0 && t2 != "" ? " - " : "") + t2 + ((show1 > 0 || show2 > 0) && t3 != "" ? " - " : "") + t3;
    t_width = gr.CalcTextWidth(t, font);
   
    if (mode == 1) {
        stp = sw == 1 ? step : step2;
        if (sw == 1) {step2 = ww};
        if (sw == 2) {step = ww};
        if (t_width < ww - s * 2) {
            if (stp >= ww) {dir = "left"; stp = ww };
            if (stp + t_width >= ww - s) {dir = "left"};
            if (stp <= 0 + s) {dir = "right"};
        } else {
            if (stp + t_width <= ww - s) {dir = "right"};
            if (stp >= 0 + s) {dir = "left"};
        }
    }
    if (mode == 0) { dir = "left";
        if (sw == 1) {
            if (step + t_width > ww/2) {step2 = ww};
            if (step + t_width <= 0) {step = ww; sw = 2};

        } else {
            if (step2 + t_width > ww/2) {step = ww};
            if (step2 + t_width <= 0) {step2 = ww; sw = 1};
        }
    }

    gr.GdiDrawText( "\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598", font, block_rgb, 0, txt_row, ww, wh);
    gr.GdiDrawText( t, font, font_rgb, step, txt_row, t_width, wh);
    gr.GdiDrawText( t, font, font_rgb, step2, txt_row, t_width, wh);
//    gr.GdiDrawText(step + "   " + dir + "   " + sw + "   " + step2 + "  " + mode, font, RGB(255,255,200), 100, txt_row + 4, ww , wh, 0);   
}

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

var seek_timer;
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
        if (dir == "right") {step = step + 1};
        if (dir == "right") {step2 = step2 + 1};
        if (dir == "left") {step = step - 1};
        if (dir == "left") {step2 = step2 - 1};
    window.Repaint();

    }, 50 );
}

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

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
}

function on_mouse_lbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;
   
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.CheckMenuItem(i-1, show1);   
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.CheckMenuItem(i-1, show2);   
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.CheckMenuItem(i-1, show3);
    _menu.AppendMenuItem(0x00000000, i++, "mode: " + (mode == 0 ? "L-R" : "L"));

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
        window.SetProperty("show1", show1 == 0 ? 1 : 0);
        break;
    case 2:
        window.SetProperty("show2", show2 == 0 ? 1 : 0);
        break;
    case 3:
        window.SetProperty("show3", show3 == 0 ? 1 : 0);
        break;
    case 4:
        window.SetProperty("mode", mode == 0 ? 1 : 0);
        break;
    }
    _menu.Dispose();
    return true;
}
// ========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
}
v3.1 градиент
Код: Выделить всё
// Scroll Text
// author kgena_ua
// version 1.0
// WSH Panel Mod component by Tianpeng Wang

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;
var font = gdi.Font("DarkOne",57,0);  //FONT
var ww,wh;

var txt_row = 4;
var s = 10, step = window.Width, step2 = window.Width;
var t, t_width, dir, mode, sw = 1;
var t1 = "", t2 = "", t3 = "";
var show1, show2, show3;

function on_paint(gr) {
   
if (window.GetProperty("Color") == 1) var font_rgb = RGB(191,228,255), block_rgb = RGB(24,37,46);   //Default   
if (window.GetProperty("Color") == 2) var font_rgb = RGB(128,192,255), block_rgb = RGB(22,36,46);   //Blue   
if (window.GetProperty("Color") == 3) var font_rgb = RGB(0,255,0), block_rgb = RGB(18,38,38);       //Green   
if (window.GetProperty("Color") == 4) var font_rgb = RGB(255,0,0), block_rgb = RGB(38,26,34);       //Red   
if (window.GetProperty("Color") == 5) var font_rgb = RGB(255,255,255), block_rgb = RGB(26,38,46);   //White   
if (window.GetProperty("Color") == 6) var font_rgb = RGB(255,255,0), block_rgb = RGB(26,38,38);     //Yellow
   
    show1 = window.GetProperty("show1",1);
    show2 = window.GetProperty("show2",1);
    show3 = window.GetProperty("show3",1);
    mode = window.GetProperty("mode",1);
   
    if (show1 == 1) {t1 = fb.TitleFormat("$upper([%title%])").Eval();
    } else {t1 = "";}

    if (show2 == 1) {t2 = fb.TitleFormat("$upper([%artist%])").Eval();
    } else {t2 = "";}

    if (show3 == 1) {t3 = fb.TitleFormat("$upper([%album%])[ - %date%]").Eval();
    } else {t3 = "";}
   
    t = t1 + (show1 > 0 && t2 != "" ? " - " : "") + t2 + ((show1 > 0 || show2 > 0) && t3 != "" ? " - " : "") + t3;
    t_width = gr.CalcTextWidth(t, font);
   
    if (mode == 1) {
        stp = sw == 1 ? step : step2;
        if (sw == 1) {step2 = ww};
        if (sw == 2) {step = ww};
        if (t_width < ww - s * 2) {
            if (stp >= ww) {dir = "left"; stp = ww };
            if (stp + t_width >= ww - s) {dir = "left"};
            if (stp <= 0 + s) {dir = "right"};
        } else {
            if (stp + t_width <= ww - s) {dir = "right"};
            if (stp >= 0 + s) {dir = "left"};
        }
    }
    if (mode == 0) { dir = "left";
        if (sw == 1) {
            if (step + t_width > ww/2) {step2 = ww};
            if (step + t_width <= 0) {step = ww; sw = 2};

        } else {
            if (step2 + t_width > ww/2) {step = ww};
            if (step2 + t_width <= 0) {step2 = ww; sw = 1};
        }
    }
// ========BACKGROUND & BLOCKS======== //
    gr.FillSolidRect (0, 0, ww, wh, RGBA(19,30,38,255));
    gr.GdiDrawText( "\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598", font, block_rgb, 0, txt_row, ww, wh);
// ========TEXT======== //
    gr.GdiDrawText( t, font, font_rgb, step, txt_row, t_width, wh);
    gr.GdiDrawText( t, font, font_rgb, step2, txt_row, t_width, wh);
// ========GRADIENT======== //
    gr.FillGradRect(0, -12, ww, 93, 90, RGBA(151,180,202,128), 0);
}

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

var seek_timer;
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
        if (dir == "right") {step = step + 1};
        if (dir == "right") {step2 = step2 + 1};
        if (dir == "left") {step = step - 1};
        if (dir == "left") {step2 = step2 - 1};
    window.Repaint();

    }, 50 );
}

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

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
}

function on_mouse_lbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;
   
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.CheckMenuItem(i-1, show1);   
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.CheckMenuItem(i-1, show2);   
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.CheckMenuItem(i-1, show3);
    _menu.AppendMenuItem(0x00000000, i++, "mode: " + (mode == 0 ? "L-R" : "L"));

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
        window.SetProperty("show1", show1 == 0 ? 1 : 0);
        break;
    case 2:
        window.SetProperty("show2", show2 == 0 ? 1 : 0);
        break;
    case 3:
        window.SetProperty("show3", show3 == 0 ? 1 : 0);
        break;
    case 4:
        window.SetProperty("mode", mode == 0 ? 1 : 0);
        break;
    }
    _menu.Dispose();
    return true;
}
// ========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
}

В своей теме выложил тестовые .FCL
Вложения
Scrolltxt3.png
Scrolltxt3.png (3.74 КБ) Просмотров: 3447
Media Library it's bad - explorer it's good!
AHAPXICT M
Гуру
Аватара
Возраст: 48
Откуда: Киев
Репутация: 176
С нами: 5 лет 10 месяцев

Сообщение #186 kgena_ua » 16.01.2015, 18:56

AHAPXICT, я так понял интернет не работал.
Скрипты работают.
А вот gr.GdiDrawText( "\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598\u2598" ...
выводит какие-то непонятные значки.

А почему во втором скрипте градиент после вывода текста:
// ========TEXT======== //
gr.GdiDrawText( t, font, font_rgb, step, txt_row, t_width, wh);
gr.GdiDrawText( t, font, font_rgb, step2, txt_row, t_width, wh);
// ========GRADIENT======== //
gr.FillGradRect(0, -12, ww, 93, 90, RGBA(151,180,202,128), 0);
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #187 AHAPXICT » 16.01.2015, 19:03

kgena_ua, \u2598 это блоки для шрифта DarkOne, их можно закоментить, он есть в моей теме в моём сообщении(старом)можно скачать))) Меня уже прогоняют, убегаю.Спасибо!
Media Library it's bad - explorer it's good!
AHAPXICT M
Гуру
Аватара
Возраст: 48
Откуда: Киев
Репутация: 176
С нами: 5 лет 10 месяцев

Сообщение #188 kgena_ua » 16.01.2015, 23:10

Бегущая строка с инфо:
Тут немного другая схема. Больше вариантов для вывода, выбирая режимы L-R или L.

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

var font = gdi.Font("arial",11,1);
var ww,wh;

var txt_row = 3;
var s = 10, step, step1 = window.Width, step2 = window.Width;
var text1, text2, t_width, t_width1, t_width2, dir, mode, sw = 1;
var t1 = "", t2 = "", t3 = "", ti = "";
var show1, show2, show3, showi, showr;

function on_paint(gr) { 
   
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
   
    show1 = window.GetProperty("show1",1);
    show2 = window.GetProperty("show2",1);
    show3 = window.GetProperty("show3",1);
    mode = window.GetProperty("mode",1);
    showi = window.GetProperty("showi",1);
   
    if (show1 == 1) {t1 = fb.TitleFormat("$upper([%title%])").Eval();
    } else {t1 = "";}

    if (show2 == 1) {t2 = fb.TitleFormat("$upper([%artist%])").Eval();
    } else {t2 = "";}

    if (show3 == 1) {t3 = fb.TitleFormat("$upper([%album%])[ ▪ %date%]").Eval();
    } else {t3 = "";}
   
    if (showi == 1) {ti = fb.TitleFormat("[$info(encoding)][ ▪ $info(codec)][ $info(codec_profile)][ ▪ $info(bitrate) kbps][ ▪ $info(samplerate) Hz][ ▪ $info(bitspersample) bps][ ▪ $channels()]$if($stricmp($ext(%filename_ext%),cue),  '['cue']',[ ▪ %filesize_natural%])$if($strcmp($info(cue_embedded),yes),' ['embedded cue']',)").Eval();
    } else {ti = "";}
 
    text1 = t1 + (show1 > 0 && t2 != "" ? "  ▪  " : "") + t2 + ((show1 > 0 || show2 > 0) && t3 != "" ? "  ▪  " : "") + t3;
    text2 = showi == 1 ? ti : text1;
    text1 = showi == 1 && text1 == "" ? text2 : text1;
    t_width2 = gr.CalcTextWidth(text2, font);
    t_width1 = gr.CalcTextWidth(text1, font);
   
    if (mode == 1) {
        step = sw == 1 ? step1 : step2;
        t_width = sw == 1 ? t_width1 : t_width2;
        if (sw == 1) {step2 = ww};
        if (sw == 2) {step1 = ww};
        if (t_width < ww - s * 2) {
            if (step >= ww) {dir = "left"; step = ww };
            if (step + t_width >= ww - s) {dir = "left"};
            if (step <= 0 + s) {dir = "right"};
        } else {
            if (step + t_width <= ww - s) {dir = "right"};
            if (step >= 0 + s) {dir = "left"};
        }
    }
    if (mode == 0) { dir = "left";
        if (sw == 1) {
            if (step1 + t_width1 > ww/2) {step2 = ww};
            if (step1 + t_width1 <= 0) {step1 = ww; sw = 2};

        } else {
            if (step2 + t_width2 > ww/2) {step1 = ww};
            if (step2 + t_width2 <= 0) {step2 = ww; sw = 1};
        }
    }
   
    gr.GdiDrawText( text1, font, RGB(200,200,200), step1, txt_row, t_width1, wh);
    gr.GdiDrawText( text2, font, RGB(200,200,200), step2, txt_row, t_width2, wh);
}

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

var seek_timer;
function on_playback_new_track(info) {
    seek_timer && window.ClearInterval(seek_timer);
    seek_timer = window.SetInterval(function() {
        if (dir == "right") {step1 = step1 + 1};
        if (dir == "right") {step2 = step2 + 1};
        if (dir == "left") {step1 = step1 - 1};
        if (dir == "left") {step2 = step2 - 1};
    window.Repaint();
    }, 50 );
}

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

function on_playback_time(){
    if(!seek_timer) on_playback_new_track();
}

function on_mouse_lbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;
   
    _menu.AppendMenuItem(0x00000000, i++, "title");
    _menu.CheckMenuItem(i-1, show1);   
    _menu.AppendMenuItem(0x00000000, i++, "artist");
    _menu.CheckMenuItem(i-1, show2);   
    _menu.AppendMenuItem(0x00000000, i++, "album");
    _menu.CheckMenuItem(i-1, show3);
    _menu.AppendMenuItem(0x00000000, i++, "info");
    _menu.CheckMenuItem(i-1, showi);
    _menu.AppendMenuItem(0x00000000, i++, "scrolling mode: " + (mode == 0 ? "L-R" : "L"));

    ret = _menu.TrackPopupMenu(x, y);
    if (ret == 0) return;

    switch (ret) {
    case 1:
        window.SetProperty("show1", show1 == 0 ? 1 : 0);
        break;
    case 2:
        window.SetProperty("show2", show2 == 0 ? 1 : 0);
        break;
    case 3:
        window.SetProperty("show3", show3 == 0 ? 1 : 0);
        break;
    case 4:
        window.SetProperty("showi", showi == 0 ? 1 : 0);
        break;
    case 5:
        window.SetProperty("mode", mode == 0 ? 1 : 0);
        break;
    }
    _menu.Dispose();
    return true;
}
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #189 macarych » 17.01.2015, 11:13

kgena_ua, спасибо за помощь.
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #190 kgena_ua » 17.01.2015, 11:40

macarych, меня интересует, работает ли это на тачскрине. Если да, то у меня есть идеи для продолжения этой темы.
Из последних сообщений на форуме открыл для себя Dockable Panels, при помощи которой удобно тестировать скрипты. Только жаль, что созданное окно не сохраняется после закрытия Фубара.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #191 macarych » 17.01.2015, 13:12

kgena_ua, честно говоря, я еще не попробовал, времени не хватило, но обязательно попробую. На обычном мониторе, в виду отсутствия сенсорного.
Я там, у автомобилистов, уже 4-й или 5- конфиг переделываю - тестирование сборки для фронт-енда. Вот немного уляжется все и мы обязательно продолжим, если у Вас есть интерес к этому. Пока для поиска использовал готовые решения, foo_dbsearch - вызывается в отдельном окне и foo_quicksearch - этот можно встроить в CUI и он побогаче функционалом.
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #192 vladj » 17.01.2015, 15:12

Что-то плохо представляю...сел в машину запустил фубар и начинаю искать в строке поиска. На маленьком экранчике и там ещё
клаву запустить нужно (это-ж не Андроид, где клава автоматом выскакивает нужно или не нужно), вывел клаву, есть строка поиска,
начинаю буковки жмакать на миниатюрной по сути клаве, да ещё и читать варианты предлагаемые...вы о чём вообще..?
Там у автомобилистов самый писк загрузка Оси сек за 7-8, завели машину, Ось загрузилась, Икар запустился, фубар в нём заиграл.
И вот едем и решили типа...а не поискать-ли нам что-то в строке поиска...на ходу...как вы себе это представляете ?
Для фубара уйма фишек есть, которыми и дома-то никто не пользуется, лично мне например первым делом приходится выпиливать этот поиск.
Думаю у большинства библиотека находится в состоянии более-менее что-бы помнить где что лежит. имхо.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 374
С нами: 9 лет 7 месяцев

Сообщение #193 macarych » 17.01.2015, 16:34

vladj писал(а):.вы о чём вообще..?
А ты спроси на pccar.ru у тамошних чуваков, зачем им поиск ))
Здесь-то че ) ... в таком исполнении и в такой сборке поиск, здесь, нужен только нам двоим с kgena_ua, мне потому что меня о нем на pccar.ru попросили, а kgena_ua - лишний раз в написании скриптов потренироваться )
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #194 vladj » 17.01.2015, 19:42

А что там спрашивать...просил вроде как только один, для чего ...ему видней. По опыту пользования фубаром в машине я давно понял
что нужно обычному пользователю. Двухпанельная сборка, в которой плейлист всегда слева и пристутствует всегда, справа остальное.
Это для обычного пользования. Для встраиваемого в Икар естественно предпочтительней твоя сборка, однопанельная, ибо в Икаре по
периметру немало чего нагорожено...лишнего. Что-бы продавать программу за пару тыр нужно что-бы она выглядела солидно, монструозно.
macarych писал(а):kgena_ua - лишний раз в написании скриптов потренироваться
А это конечно хорошо, мне очень нравится то, что он делает, в чём совершенствуется, прогресс на лицо виден.
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 374
С нами: 9 лет 7 месяцев

Сообщение #195 kgena_ua » 17.01.2015, 22:23

Я не знаю, какая ширина тачскрина, наверное небольшая. В этом случае при выводе алфавита в одну строку будет затруднительно попасть пальцем в нужный символ. Вывод в две строки будет более правильным. В новом скрипте вывод строк и высота строки привязаны к размеру шрифта var font . Цель создания скрипта - реализовать возможность выбора последовательности символов, а дальнейшая обработка может быть различной.
Безымянный.png

Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

var font = gdi.Font("arial",20,1);
var font2 = gdi.Font("arial",11,1);
var ww = window.Width, wh;

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

var t_row = 2, t_row1, t_row2;
var string = "";

var sort = "%artist% - %date% - %album% - %discnumber% - %tracknumber% - %title%";
var on_mouse = false;
var ab, ab1, ab2;
var ab_I, ab_C, ab_F;
var it, it1, it2;
var line1, line2;
var lang = 1;

function on_paint(gr) {
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));   
   
    t_height = gr.CalcTextheight("abc", font) + 4;
    t_row1 = t_row + 15;
    t_row2 = t_row1 + t_height + 5;

    ab_I = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","<","...","az","ая","09")
    ab_F = Array("0","1","2","3","4","5","6","7","8","9"," ","<","...","az","ая","09")
    ab_C = Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я"," ","<","...","az","ая","09")   
       
    if (lang == 1) ab = ab_I;
    if (lang == 2) ab = ab_C;

    it = ab.length;

    it1 = Math.round(it/2);
    it2 = it - it1;
    ab1 = ab.splice(0,it1);
    ab2 = ab.splice(0,it2);

    if(on_mouse && line1) gr.FillSolidRect (x_col1, t_row1, ww / it1, t_height, RGB(100,100,100));
    if(on_mouse && line2) gr.FillSolidRect (x_col2, t_row2, ww / it2, t_height, RGB(100,100,100));

    gr.GdiDrawText(string, font2, search ? RGB(255,255,220) : RGB(180,180,180), 5, t_row, ww , wh, 0);

    for (var i = 0; i < it1; i = i + 1) {
        color = x_color > ww / it1 * i && x_color < ww / it1 * (i + 1) && on_mouse && line1 ? RGB(255,255,220) : RGB(180,180,180);
        gr.GdiDrawText(ab1[i], font, color, ww / it1 * i, t_row1, ww / it1 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
//        if (i == it - 3) gr.GdiDrawText("_", font, color, ww / it * i, t_row2, ww / it , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);
    }
   
    for (var i = 0; i < it2; i = i + 1) {
        color = x_color > ww / it2 * i && x_color < ww / it2 * (i + 1) && on_mouse && line2 ? RGB(255,255,220) : RGB(180,180,180);
        gr.GdiDrawText(ab2[i], font, color, ww / it2 * i, t_row2, ww / it2 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
        if (i == it2 - 6) gr.GdiDrawText("_", font, color, ww / it2 * i, t_row2, ww / it2 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);
    }
   
//    gr.GdiDrawText(lang, font2, RGB(200,200,200), 10, 47, wh  , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);
}

var search = false;
var count;
var previous_pll;

function on_mouse_lbtn_up (x, y){
    if (!search) previous_pll = plman.ActivePlaylist;
    chr = it2 - 6;
    back = it2 - 5;
    del = it2 - 4;
    az = it2 - 3;
    ая = it2 - 2;
    f = it2 - 1;     

    for (var i = 0; i <= it1; i = i + 1) {
        if (x > ww / it1 * i && x < ww / it1 * (i + 1) && line1) {string = string + ab1[i]}
    }
    for (var i = 0; i <= chr; i = i + 1) {
        if (x > ww / it2 * i && x < ww / it2 * (i + 1) && line2) {string = string + ab2[i]}
    }

    string = string.charAt(0) == " " ? "" : string;
    string = string.replace("  "," ");   
    if (x > ww / it2 * back && x < ww / it2 * del && line2) {string = string.substring(0,string.length - 1)}   
    if (x > ww / it2 * del && x < ww / it2 * az && line2) {string = "";}
    if (x > ww / it2 * az && x < ww / it2 * ая && line2) {lang = 1; return}
    if (x > ww / it2 * ая && x < ww / it2 * f && line2) {lang = 2; return}
    if (x > ww / it2 * f && x < ww && line2) {return}
    pll_search();
   
}

var x_col1, x_col2;
var y_row;
var x_color;

function on_mouse_move(x,y) {
    on_mouse = true;
    line1 = y_row < t_row1 + t_height ? true : false;
    line2 = y_row > t_row2 ? true : false;
    y_row = y;
    x_color = x;

    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i) {x_col1 = ww / it1 * i}             
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i) {x_col2 = ww / it2 * i}             
    }
    window.Repaint();
}

function pll_search() {
    remove_pll("search");

    idx = plman.PlaylistCount;
    if (string != " ") fb.CreateAutoPlaylist(idx, "search", "%title% HAS " + string, sort, 0);
    count = fb.PlaylistItemCount(idx)
    if (count > 0) {fb.ActivePlaylist = idx; search = true
    } else {
        fb.ActivePlaylist = previous_pll; remove_pll("search"); search = false
    }
}

function remove_pll(pll_name){
    remove_idx = fb.PlaylistCount;
    for (var i = 1; i < remove_idx; i++) {
       if (fb.GetPlaylistName(i) == pll_name) {fb.RemovePlaylist(i)}
    }
}

function on_playback_starting(cmd, is_paused) {
    string = "";
    if (fb.GetPlaylistName(fb.ActivePlaylist) != "search") {remove_pll("search");}
}

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

function on_mouse_leave() {
    on_mouse = false;
    window.Repaint();
}
P.S.vladj, спасибо :oops:
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #196 macarych » 18.01.2015, 14:16

Последний раз редактировалось macarych 18.01.2015, 16:35, всего редактировалось 1 раз.
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #197 kgena_ua » 18.01.2015, 15:59

Немного оптимизировал скрипт, переключение раскладки более наглядней. Попробовал сделать поиск по ; или title или artist или album содержит.... - вроде работает.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

var font = gdi.Font("arial",15,1);
var font2 = gdi.Font("arial",11,1);
var ww = window.Width, wh;

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

var t_row = 2, t_row1, t_row2;
var string = "";

var sort = "%artist% - %date% - %album% - %discnumber% - %tracknumber% - %title%";
var on_mouse = false;
var ab, ab1, ab2;
var ab_I, ab_C, ab_F;
var it, it1, it2;
var line1, line2;
var lang = 1;

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

    ab_I = Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","<","...")
    ab_F = Array("1","2","3","4","5","6","7","8","9","0",".",",","-",":"," ","<","...")
    ab_C = Array("А","Б","В","Г","Д","Е","Ё","Ж","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ч","Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я"," ","<","...")   

    if (lang == 1) ab = ab_I.concat("ая","09");
    if (lang == 2) ab = ab_C.concat("az","09");
    if (lang == 3) ab = ab_F.concat("az","ая");
       
    it = ab.length;

    it1 = Math.round(it/2);
    it2 = it - it1;
    ab1 = ab.splice(0,it1);
    ab2 = ab.splice(0,it2);

    if(on_mouse && line1) gr.FillSolidRect (x_col1, t_row1, ww / it1, t_height, RGB(100,100,100));
    if(on_mouse && line2) gr.FillSolidRect (x_col2, t_row2, ww / it2, t_height, RGB(100,100,100));

    gr.GdiDrawText(string, font, search ? RGB(255,255,220) : RGB(180,180,180), 10, t_row, ww , t_height, DT_SINGLELINE | DT_VCENTER);

    for (var i = 0; i < it1; i = i + 1) {
        color = x_color > ww / it1 * i && x_color < ww / it1 * (i + 1) && on_mouse && line1 ? RGB(255,255,220) : RGB(180,180,180);
        gr.GdiDrawText(ab1[i] == " " ? "_" : ab1[i], font, color, ww / it1 * i, t_row1, ww / it1 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
    for (var i = 0; i < it2; i = i + 1) {
        color = x_color > ww / it2 * i && x_color < ww / it2 * (i + 1) && on_mouse && line2 ? RGB(255,255,220) : RGB(180,180,180);
        gr.GdiDrawText(ab2[i] == " " ? "_" : ab2[i], font, color, ww / it2 * i, t_row2, ww / it2 , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);   
    }
   
//    gr.GdiDrawText(ch, font2, RGB(200,200,200), 10, 47, wh  , t_height, DT_CENTER |DT_SINGLELINE | DT_VCENTER);

}

var search = false;
var count;
var previous_pll;
var ch;

function on_mouse_lbtn_up (x, y){
    if (!line1 && !line2) return;
    if (!search) previous_pll = plman.ActivePlaylist;

    for (var i = 0; i <= it1; i = i + 1) {
        if (x > ww / it1 * i && x < ww / it1 * (i + 1) && line1) {ch = ab1[i]}
    }
    for (var i = 0; i <= it2; i = i + 1) {
        if (x > ww / it2 * i && x < ww / it2 * (i + 1) && line2) {ch = ab2[i]}
    }

    if (ch == "az") {ch = ""; lang = 1; return}
    if (ch == "ая") {ch = ""; lang = 2; return}
    if (ch == "09") {ch = ""; lang = 3; return}
    if (ch == "<")  {ch = ""; string = string.substring(0,string.length - 1)};   
    if (ch == "..."){ch = ""; string = ""};

    string = string + ch;   
    string = string.charAt(0) == " " ? "" : string;
    string = string.replace("  "," ");

    pll_search();
}

var x_col1, x_col2;
var y_row;
var x_color;

function on_mouse_move(x,y) {
    on_mouse = true;
    line1 = y_row > t_row1 && y_row < t_row1 + t_height ? true : false;
    line2 = y_row > t_row2 ? true : false;
    y_row = y;
    x_color = x;

    for (var i = 0; i < it1; i = i + 1) {
        if (x > ww / it1 * i) {x_col1 = ww / it1 * i}             
    }
    for (var i = 0; i < it2; i = i + 1) {
        if (x > ww / it2 * i) {x_col2 = ww / it2 * i}             
    }
    window.Repaint();
}

function pll_search() {
    remove_pll("search");
    idx = plman.PlaylistCount;
    if (string != " ") fb.CreateAutoPlaylist(idx, "search", "%title% HAS " + string + " OR " + "%artist% HAS " + string + " OR " + "%album% HAS " + string, sort, 0);
    count = fb.PlaylistItemCount(idx)
    if (count > 0) {fb.ActivePlaylist = idx; search = true
    } else {
        fb.ActivePlaylist = previous_pll; remove_pll("search"); search = false
    }
}

function remove_pll(pll_name){
    remove_idx = fb.PlaylistCount;
    for (var i = 1; i < remove_idx; i++) {
       if (fb.GetPlaylistName(i) == pll_name) {fb.RemovePlaylist(i)}
    }
}

function on_playback_starting(cmd, is_paused) {
    string = "";
    if (fb.GetPlaylistName(fb.ActivePlaylist) != "search") {remove_pll("search");}
}

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

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


I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Сообщение #198 macarych » 18.01.2015, 20:05

kgena_ua, здорово! работает!
Большущее спасибо.
macarych M
Гуру
Аватара
Репутация: 360
С нами: 10 лет 8 месяцев

Сообщение #199 AHAPXICT » 19.01.2015, 15:08

kgena_ua, спасибо за новую версию "бегущей строки"! Дополнительная информация о треке отображается корректно. Уже переделал под свои нужды))). У меня пару вопросов: Можно ли заставить WSH панель понимать( то есть выводить на экран), я так понял что это служебный символ "&" (заменяет на нижнее подчёркивание)? Где в скрипте задаются параметры регулировки расстояния между text1 и text2?
А почему во втором скрипте градиент после вывода текста:
Изначально он и был только для "бэкграунда" и блоков, потом перенёс за текст, что бы глаза не резало(размер шрифта 57). Поэтому решил проблему таким кривым способом))))
P.S. Было ещё пару вопросов, но пока сидел дома и делал наброски на черновике, сам не понимаю как с ними разобрался. Первый был о том как добавить скорость прокрутки в меню свойства. А второй по часам, которые как в сказке про золушку после полуночи превращались в тыкву, то есть центрировались совсем не на матрице))). Сам до сих пор не понимаю как решил задачу:
var x = 0;
if(currentHours < 10){x = 4;}
gr.GdiDrawText( currentHours + ":" + currentMinutes + ":" + currentSeconds, g_font1, font_rgb, -3+x, 1-y, ww, 86, DT_CENTER);
Есть ещё один вопрос. Как добавить математическую функцию в строки с блоками?
gr.GdiDrawText( "\u2589\u2589\u2589\u2589\u2589\u2589\u2589\u2589\u2589", g_font4, block_rgb, -232, 12-y, ww, 24, DT_CENTER);
Хотелось бы так:
gr.GdiDrawText( "\u2589" * 9, g_font4, block_rgb, -232, 12-y, ww, 24, DT_CENTER); Пока все мои поползновения в этом направлении не работают))))
Ещё раз спасибо :beer:
P.P.S. Извиняюсь!
он есть в моей теме в моём сообщении(старом)
Там старая тестовая версия без блоков и не полностью русифицированная. Приложил последнюю версию к своему последнему сообщению.
Media Library it's bad - explorer it's good!
AHAPXICT M
Гуру
Аватара
Возраст: 48
Откуда: Киев
Репутация: 176
С нами: 5 лет 10 месяцев

Сообщение #200 kgena_ua » 20.01.2015, 00:17

AHAPXICT писал(а):Как добавить математическую функцию в строки с блоками?
Не смог найти что-то типа string.repeat, хотя наверное должно быть.
Можно попробовать через массив:
var a=[];
while(a.length <= 10){a.push("\u2589")};
a = a.join("");
gr.GdiDrawText( a, font, ....

AHAPXICT писал(а):Где в скрипте задаются параметры регулировки расстояния между text1 и text2?
Расстояние привязано к ширине панели и рано ww/2 - это минимальное расстояние при выводе двумя "строками" text1 и text2.
Т.о. когда координата конца строки text1 меньшем чем ww/2 появляется строка text2.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 55
Откуда: Украина, Днепр
Репутация: 450
С нами: 6 лет 5 месяцев

Пред.След.

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