Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #341 kgena_ua » 21.04.2015, 20:02

LUR, спасибо.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #342 bulletproof2k » 23.04.2015, 23:05

kgena_ua а можете написать скрипт для WSH с отображением иконки кодека? По примеру Track Info от Максима Терпиловского?
bulletproof2k M
Аватара
Откуда: Воронеж
Репутация: -19
С нами: 12 лет 2 месяца

Сообщение #343 Squirrel » 03.05.2015, 13:52

Нет ни у кого inputbox'a на wsh т. е. не vbs с окном, а такого чтобы в панели был?
Squirrel
Репутация: 0
С нами: 9 лет 7 месяцев

Сообщение #344 seriousstas » 04.05.2015, 14:53

kgena_ua
Хотел узнать , можно-ли при помощи wsh на кнопку повесить запуск
exe-шника , по типу рансервиса .
Проблема , в том , что foo_run не работает ,если плейлист пуст(после очистки) ,
а нужно(иногда) как-раз открыть менеджер для его загрузки - "TAB" в JSPlaylist.
Сбрка та-же : http://pccar.ru/showpost.php?p=327132&postcount=1322
Эмуляция "TAB" кнопкой с изображением радио
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 5 месяцев

Сообщение #345 kgena_ua » 04.05.2015, 18:47

seriousstas:можно-ли при помощи wsh на кнопку повесить запуск exe-шника
Запускаем foobar2000_v1.3.8.exe из папки D:
Код: Выделить всё
var WshShell = new ActiveXObject("WScript.Shell");

function on_mouse_lbtn_up(x,y){
    try {
        WshShell.Run("d:\\foobar2000_v1.3.8.exe");
    } catch(e) {};
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #346 Yurnikos » 04.05.2015, 19:36

kgena_ua - вопрос на засыпку :
возможно-ли "соединить" wch - панели сик и громкость, в одну общую, из этих:
сик:
Спойлер
/////////////////////// бегущая строка - сикбар v.10.12.2010 \\\\\\\\\\\
//San_dr http://forum.oszone.net && Zin-Uru http://foobar2000.ru/forum\\
//var font = gdi.Font("Tahoma", 12, 0);
var font = gdi.Font("AGOpus", 17, 0);
// Height=Высота
window.MinHeight = window.MaxHeight = 28;
var font = gdi.Font("AGOpus", 17, 0);
var align = 0x00000003 | 0x00000008, align_scroll = 0x00000009;
var tf_string = ('[Art: %artist% —] [%title% •] [%length%]/[%playback_time%]');
//*.$ext(%path%) •
var ww, pos_d = 3, q = 0, timer, g_drag = 0;
var start = true, stopped = false;
function RGBA(r, g, b, a) {return ((a << 24) | (r << 16) | (g << 6) | (b));
}
function on_timer(id) {
window.Repaint();
}
function on_playback_new_track(metadb) {
window.Repaint();
}
function on_playback_stop(){
window.Repaint();
}
function on_playback_seek(time){
window.Repaint();
}
function on_playback_time(time){
window.Repaint();
}
function on_playback_pause(state){
window.Repaint();
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
on_mouse_move(x,y);
}
function on_mouse_lbtn_up(x,y){
if(g_drag){
g_drag = 0;
g_drag_seek = x / window.Width;
g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ?

g_drag_seek : 1;
fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
g_drag = 0;
}
}
function on_mouse_move(x,y){
if(g_drag){
g_drag_seek = x / window.Width;
g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ?

g_drag_seek : 1;
window.Repaint();
}
}
function RGB(r, g, b) { return (0xff000000 | (r << 16) | (g << 8) | (b)); }
function on_paint(gr) {
var text = fb.IsPlaying ? fb.TitleFormat(tf_string).Eval() : (stopped ? "STOP" :

"----=== 1.3.6===----");// название сборки
var text_width_d = gr.CalcTextWidth(text, font);
ww = window.Width, wh = window.Height, pos = 0, length =

fb.PlaybackLength;
if(!timer) timer = window.CreateTimerInterval(70);
q = q + 50;
if(length > 0){
if(g_drag){
pos = window.Width * g_drag_seek;
}
else{
pos = window.Width * (fb.PlaybackTime /

[length]);
}
} else if (fb.PlaybackTime) {
}
gr.FillGradRect(0,0,ww,wh,-90,RGB(70,120,140), RGB(0,6,1));
gr.FillGradRect(0, 0, pos, wh,-90,RGB(0,6,1),

RGB(70,140,120));//фон прошло
gr.DrawRect(-1,-9, pos+1, 35, 2, RGB(199,0,190));//движок-разделитель
text_width_2 = gr.CalcTextWidth(text, font);
if(text_width_d>ww-15) {
text = text + " • " + text;
text_width_2 = gr.CalcTextWidth(text, font);
if(pos_d <= text_width_d - text_width_2) {
pos_d = 7 - (start ? 0 : 3);
start = false;
} else {
pos_d = pos_d - 1;
}
gr.GdiDrawText(text, font, RGB(180,196,200), pos_d + 1, 0, text_width_2,

18, align_scroll);
} else {
gr.GdiDrawText(text, font, RGB(180,196,200), 1, 0, ww, 90, align_scroll);
}
function on_size() {
if (g_timer) {window.KillTimer(g_timer); g_timer=false;}
}
function on_playback_pause(state) {
window.Repaint();
}
function on_playback_starting(cmd, is_paused) {}
}

волюме :
Спойлер
function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var g_font = gdi.Font("Tahoma", 12, 0);
var g_drag = 0;

function on_paint(gr){
gr.SetTextRenderingHint(5);
var ww = window.Width;
var wh = window.Height;
var volume = fb.Volume;
var pos = window.Width * ((100+volume)/100);
var txt = (Math.ceil(volume)) + "dB";
gr.FillGradRect( 0, 0, pos, wh, 90, RGB(240,240,240), RGB(100,230,100));
gr.FillGradRect(pos, 0, ww-pos, wh, 90, RGB(240,240,240), RGB(190,190,190));
gr.DrawString(txt, g_font, RGB(64,64,128), 0, 0, ww, wh, 0x11005000);
gr.DrawRect(0,0, ww-1, wh-1, 1.0, RGB(150,150,150));
}
function on_mouse_lbtn_down(x,y){
g_drag = 1;
}
function on_mouse_lbtn_up(x,y){
on_mouse_move(x,y);
g_drag = 0;
}
function on_mouse_move(x,y){
if(g_drag){
var v = x / window.Width;
v = (v<0) ? 0 : (v<1) ? v : 1;
v = -100 * (1-v);
if(fb.Volume != v)
fb.Volume = v;
}
}
function on_mouse_wheel(delta){
if(delta>0)
fb.VolumeDown();
else
fb.VolumeUp();
}
function on_volume_change(val){
window.Repaint();
}
//EOF

Добавлено спустя 1 минуту 33 секунды:
Yurnikos:вопрос на засыпку
У меня "толку не хватает" . . .
Yurnikos
Гость

Сообщение #347 seriousstas » 04.05.2015, 23:00

апускаем foobar2000_v1.3.8.exe из папки D:
Спасибо , понял , а как правильно связать с PSS и будет-ли работать из
электронного диска "b" ? :
путь : foobar2000\Emul\TAB.exe
строка наверное будет WshShell.Run("b:\\foobar2000\Emul\TAB.exe");
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 5 месяцев

Сообщение #348 kgena_ua » 05.05.2015, 17:29

seriousstas:связать с PSS
Тут уже обсуждалось.
Путь по идее должен быть: WshShell.Run(fb.ProfilePath + "\\Emul\\TAB.exe");
Я попробовал на отдельную панель WSH прикрутить:
запуск Shift.exe - открывается panel settings - как и должно быть,
а вот с TAB.exe что-то не выходит, не хочет открываться panel playlists.

Yurnikos, как должно получится. К примеру, в одну линию слева сик а справа громкость...
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #349 Yurnikos » 05.05.2015, 18:00

kgena_ua:в одну линию слева сик а справа громкость...
Именно так, для меня. Но не принципиально, кому-то "захочется" наоборот
у Lur есть видел похожее, но ... не совсем, или совсем не так
вместо тегов тырнет радио - "Stream",
у других и вовсе крах плагина
Привык, знаешь-ли, видеть то, что обозначил
ЗЫ.Ни San_dr Zin-Uru тут не видно - может тоже выходят под "Гость" как я стал Yurnikos
Yurnikos
Гость

Сообщение #350 seriousstas » 05.05.2015, 20:04

kgena_ua
запуск Shift.exe - открывается panel settings - как и должно быть,
а вот с TAB.exe что-то не выходит, не хочет открываться panel playlists.
Не получается только из WSH , а из сборки кнопкой работает ?
попробуйте простой вариант (без автозакрытия) :
http://rghost.ru/8mfJv2RbN
Если на "навести" фокус - не акривируется окно и не сработает Send
Код: Выделить всё
#NoTrayIcon
ControlFocus, uie_wsh_panel_mod_class6,, Analog VU Meter   
Send {TAB}
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 5 месяцев

Сообщение #351 kgena_ua » 28.05.2015, 23:19

На тестирование. WSH panel properties.
Скроллинг - колесо мыши или удерживая левую кнопку.
Два вида (пр.кн.м.) - развернутый или "не пустые значения."
Спойлер
Безымянный.png

Код: Выделить всё
// ==PREPROCESSOR==
// @name "properties"
// @author "kgena_ua"
// ==/PREPROCESSOR==

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

var tfarray = [];
var codes = new Array ();
var g_tooltip = window.CreateTooltip();
var ttText = "";
g_tooltip.SetMaxWidth(300);

var g_font = gdi.Font("Areal",12,0);
var g_font2 = gdi.Font("Tahoma",10,0);

DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_WORD_ELLIPSIS = 0x00040000;
DT_SINGLELINE = 0x00000020;

//var color1 = RGB(140,164,179);
var color1 = RGB(140,140,140);
var color2 = RGB(255,255,225);
var color3 = RGB(90,90,90);

var ww, wh;
window.GetProperty("skip",0);
var name, value, measure, t_height;
var path = "", title;
var g_drag = false;
var g_drag_y = 0;
var s = 0;
var col1 = 10;
var col2 = 110;
var col3;

var metadb;
on_item_focus_change();

function on_paint(gr) {
    gr.FillSolidRect (0, 0, ww, wh, RGB(30,30,30));
   
    tfarray = [];
    for (j = 0; j < tfname.length; j++) {
        group = false;
        if (tfname[j].search('group') >= 0 || tfname[j] == "\r\n" ) group = true;

        if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
            value = fb.TitleFormat("[" + tfname[j] + "]").Eval();
        } else {
            value = fb.TitleFormat("[" + tfname[j] + "]").EvalWithMetadb(metadb);
        }
       
        if ( window.GetProperty("skip") == 1) {
            if (value || group) tfarray.push(tfname[j]);
        } else {
            tfarray.push(tfname[j]);
        }
    }

    t_height = gr.CalcTextHeight("text", g_font) + 2;

    codes = [];

    for (i = 0; i < tfarray.length; i++) {
        group = false;
        measure = "";
        row =  i * t_height + s;
        if (tfarray[i].search('group') >= 0) group = true;

        name = tfarray[i].replace(/[%\$\(\)]|info|meta|group |lastfm/g,'').replace(/_/g,' ');

        if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
            value = fb.TitleFormat("[" + tfarray[i] + "]").Eval();
        } else {
            value = fb.TitleFormat("[" + tfarray[i] + "]").EvalWithMetadb(metadb);
        }
       
        if (name && value){
            if (tfarray[i] == "$info(bitrate)") measure = "kbps";
            if (tfarray[i] == "$info(samplerate)") measure = "Hz";
            if (tfarray[i] == "$info(bitspersample)") measure = "bps";
            if (tfarray[i] == "$info(channels)") measure = "ch";
            if (tfarray[i] == "$meta(rating)") measure = "(tag)";
        }

        line_row = row - t_height / 2;
        if (group) gr.DrawLine(col1, line_row, ww - col1, line_row, 1, color3);
        gr.GdiDrawText(name, group ? g_font2 : g_font, group ? color3 : color1, col1, row, ww - col1 * 2, wh, DT_LEFT | DT_WORD_ELLIPSIS);

//        t_width1 = gr.CalcTextWidth(name + "     ", g_font);
        t_width2 = gr.CalcTextWidth(value, g_font);
        col3 = col2 + t_width2 + 5;
       
        if (t_width2 > ww - col2 - col1) {   codes.push(row,'"' + tfarray[i] + '"')};

        gr.GdiDrawText(value, g_font, color2, col2, row, ww - col2 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_SINGLELINE);
        gr.GdiDrawText(measure, g_font, color1, col3, row, ww - col3 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS);
    }

    g_tooltip.Text = ttText;
    if (ttText) g_tooltip.Activate();
}

function on_mouse_lbtn_down(x, y) {
    g_drag = true;
    g_drag_y = (y - s);
}

function on_mouse_lbtn_up(x, y) {
    g_drag = false;
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
   
    ttText = "";

    for (i = 0; i < codes.length; i = i + 2) {
        if (y > codes[i] && y < codes[i] + t_height && x > col2) {
            if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
                ttText = fb.TitleFormat("[" + codes[i + 1] + "]").Eval();
            } else {
                ttText = fb.TitleFormat("[" + codes[i + 1] + "]").EvalWithMetadb(metadb);
            }
        }
    }

    if (g_drag) {
    if (s <= 0 && (tfarray.length * t_height) >= wh) {s = y - g_drag_y};
        applyDelta();
    }
}

function on_mouse_wheel(step) {
    if (s <= 0 && tfarray.length * t_height >= wh) {s = s + step * t_height};
    applyDelta();
}

function applyDelta() {
    s = s > 0 ? 0 : s;
    s = s < (wh - tfarray.length * t_height) && s < 0? (wh - tfarray.length * t_height) : s;
    window.Repaint();
}

function on_mouse_leave() {   
    window.SetCursor(32512);
    g_tooltip.Deactivate();
    window.Repaint();
}

function on_metadb_changed() {
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
    title = fb.Titleformat("%title%").EvalWithMetadb(metadb);
}

function on_item_focus_change() {
    metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem() ,true;
    if (metadb) on_metadb_changed();
    window.Repaint();
}

function on_playback_new_track(metadb) {     
    on_item_focus_change();

}

function on_playback_time(time){
    on_item_focus_change();
}

function on_selection_changed(metadb) {
    on_item_focus_change(); 
}

function on_playlist_switch() {
    on_item_focus_change(); 
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
    if (s < 0) s = 0;
}

function on_mouse_rbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;

    MF_ENABLED = 0x00000000;
    MF_GRAYED = 0x00000001;
   
    _menu.AppendMenuItem(MF_ENABLED, 1, "skip if empty");
    _menu.CheckMenuItem(1, window.GetProperty("skip"));

    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (ShiftDown) {
        _menu.AppendMenuItem(0x00000800, 0, 0);
        _menu.AppendMenuItem(0x00000000, 10, "Reload");
        _menu.AppendMenuItem(0x00000800, 0, 0);
        _menu.AppendMenuItem(0x00000000, 20, "Properties");
        _menu.AppendMenuItem(0x00000000, 30, "Configure ...");
    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:   
        window.SetProperty("skip", window.GetProperty("skip") == 0 ? 1 : 0);
        break;
    case 10:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();      
        break;
   }
    _menu.Dispose();
    return true;
}

var tfname = new Array(
"%artist%",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"%album artist%",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%comment%",
"%rating%",
"$meta(rating)",
"\r\n",
"group G E N E R A L",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"\r\n",
"group L O C A T I O N",
"%filename_ext%",
"%path%",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"\r\n",
"group P L A Y B A C K   S T A T I S T I C S",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"\r\n",
"group L a s t F M",
"%lastfm_bio%",
"%lastfm_similar_artist%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%"
);


kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #352 AHAPXICT » 29.05.2015, 03:51

kgena_ua, очень удобна функция "skip if empty", не надо просматривать километры пустых строк. Я так понимаю это уже делается под тачскрин(прокрутка по ЛКМ), в этом плане не хватает стандартной возможности копирования нужной инфы. В общем полностью заменяет Item properties!
P.S. Попытался сделать сравнительную картинку, но мозгов не хватило правильно перенести линии)))
Спойлер
WSH panel properties.jpg
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 8 месяцев

Сообщение #353 AHAPXICT » 29.05.2015, 12:48

Как всегда вся ночь пролетела.... Читал последние темы на "гидрогене" и зацепился за HDCD Decoder, тут меня и понесло. Перерыл среди ночи ящик с CD дисками, а потом и до библиотеки дорвался, и как выяснилось у меня в таком формате больше всего чем я знал и мог себе представить. Никогда раньше и подумать не мог что foo_hdcd может как то себя проявлять при определении HDCD, а оказывается да! Уже понастроил у себя все панели CUI и WSH)))
Вот пару команд: "$if(%__hdcd%,HDCD ,)" or "HDCD: [%__hdcd%]" or "HDCD: $if2($info(hdcd),no)" etc.
P.S. kgena_ua, по моему уже спрашивал по "бегущей строке", там никак нельзя избавится от нижнего подчёркивания заменяющего символ & в названиях треков?
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 8 месяцев

Сообщение #354 seriousstas » 29.05.2015, 13:51

kgena_ua
С возвращением !
Ваши таймеры удачно пристроились в автосборку
http://pccar.ru/showthread.php?p=329332#post329332
теперь не нужно отвлекаться на закрытие панелей (удаления , тулбара и Менеджера плейлистов)
WSH Менеджер создает в settings файлы его состояния
plmanager_0
и
plmanager_1
Код: Выделить всё
// plmanager status
var fso = new ActiveXObject("Scripting.FileSystemObject");
if(!fso.FolderExists( fb.ProfilePath + "settings")) {fso.CreateFolder( fb.ProfilePath + "settings" )};
var set_path = fb.ProfilePath + "\\settings\\";
var is_plmanager = 0;
if(fso.FileExists( set_path + "plmanager_1")) {
    fso.deleteFile( set_path + "plmanager_" + "*" );
    fso.CreateTextFile( set_path + "plmanager_0" )
}
AHK отслеживает эти состояния (и открываемые окна)
:
Код: Выделить всё
#NoTrayIcon
#SingleInstance force
SetWorkingDir %A_ScriptDir%
IfExist, %A_WorkingDir%\plmanager_0
{
ControlFocus, uie_wsh_panel_mod_class7, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Send {TAB}
Sleep, 1000
}
IfExist, %A_WorkingDir%\plmanager_1
{
WinWait, Load Playlist:,, 12
WinWaitClose
WinWait, Rename playlist,, 1
WinWaitClose
}
IfNotExist, %A_WorkingDir%\plmanager_0
{
WinWait, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
WinActivate
ControlFocus, uie_wsh_panel_mod_class7, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}
Send {TAB}
}
Else
ExitApp


Осталось то-же неудобство с рансервисом .
Как только плеер натыкается на пустой плейлист , не рабочую радиостанцию (отсутствие интернета)
- Менеджер не открыть и часть кнопок становится не доступна :(
Может есть способ открывать эти exe в обход рансервиса ?

связать с PSS
Тут уже обсуждалось.
Поиск не дал результатов , направте пожалуйста
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 5 месяцев

Сообщение #355 vladj » 29.05.2015, 16:13

Если речь о работе рансервисов при включении или выходе из сна...(мне трудно ориентироватся, ибо икаром и сном не пользуюсь),
я просто поставил галочку на записи состоянии перед отключением и стартом воспроизводимого при последующей загрузке (в Playback).
Таким образом при запуске винды запускается фубар, поверх его панель приборки от Валентина (они в папке автозагрузка винды).
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 5 месяцев

Сообщение #356 seriousstas » 29.05.2015, 18:08

vladj
Спасибо, нет пока без сни и Икара ...
Проблема та-же , что была ранее у Вас :
vladj писал(а):
И второе то, что Панель напрочь отказывается запускатся, когда фубар ничего не играет, т.е. находится в режиме Стоп.
marc2003 подсказал решение:
Splitter settings -> закладка "Script" -> Titleformat mode on startup -> поменять now playing на follow cursor
Но follow cursor не решает проблему , тк плейлист очищается, либо есть ситуация, когда радиостанция не ловил поток -
рансервисы отключаются и кнопки созданные через них не работают , пока не запустишь трек ...

Нужна кнопочка WSH или PSS , которая-бы запускала *.exe ,без рансервиса , вот выше kgena_ua предложил
Код: Выделить всё
[code]var WshShell = new ActiveXObject("WScript.Shell");

function on_mouse_lbtn_up(x,y){
    try {
        WshShell.Run(fb.ProfilePath + "\\Emul\\TAB.exe");
    } catch(e) {};
}[/code]
А как из этого сделать кнопку ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 5 месяцев

Сообщение #357 kgena_ua » 29.05.2015, 21:11

seriousstas:как из этого сделать кнопку ?
Мы уже делали кнопку, а Вы ее доработали до этого (что значит как :smile:) :
Спойлер
Безымянный.png
Безымянный.png (10.77 КБ) Просмотров: 2462

Вот набросал в текстовом редакторе, не тестировал.
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Arial",11,1);
var ww,wh;
var on_mouse = false;    // если нужно изменять изображение кнопки при наведении мышкой

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

var WshShell = new ActiveXObject("WScript.Shell");         // это обязательно

function on_paint(gr){
       тут рисуем кнопку
}

function on_mouse_lbtn_up (x, y){
// это обязательно
    try {                                                                                       
        WshShell.Run(fb.ProfilePath + "\\Emul\\TAB.exe");
    } catch(e) {};
}

 // если нужно изменять изображение кнопки при наведении мышкой

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

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

Добавлено спустя 23 минуты 31 секунду:
AHAPXICT,добрый вечер.
1. По поводу скрипта "свойства". Дома на 7 появился баг: при выводе g_tooltip (если строка не помещается из-за большой ширины) g_tooltip отображался с неким мерцанием. Попробовал исправить, посмотрите (и еще некоторые исправления)
Код: Выделить всё
// ==PREPROCESSOR==
// @name "properties"
// @author "kgena_ua"
// ==/PREPROCESSOR==

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

var g_font = gdi.Font("Areal",12,0);
var g_font2 = gdi.Font("Tahoma",10,0);

DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_RIGHT = 0x00000002;
DT_WORD_ELLIPSIS = 0x00040000;
DT_SINGLELINE = 0x00000020;
var ww, wh;

//var color1 = RGB(140,164,179);
var color1 = RGB(140,140,140);
var color2 = RGB(255,255,225);
var color3 = RGB(90,90,90);

var tfarray = [];
var widestring = [];

var g_tooltip = window.CreateTooltip();
var ttText = "";
g_tooltip.SetMaxWidth(300);

window.GetProperty("skip",0);
var name, value, measure, t_height;
var path = "", title;
var g_drag = false;
var g_drag_y = 0;
var s = 0;
var col1 = 10;
var col2 = 110;
var col3;

var metadb;
on_item_focus_change();

var ttt = 0;

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

    tfarray = [];
   
    for (j = 0; j < tfname.length; j++) {

        group = false;
//        if (tfname[j].search('group') >= 0 || tfname[j] == "\r\n" ) group = true;
        if (tfname[j].search('group') >= 0 || tfname[j] == "line" ) group = true;

        if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
            value = fb.TitleFormat("[" + tfname[j] + "]").Eval();
        } else {
            if (metadb) value = fb.TitleFormat("[" + tfname[j] + "]").EvalWithMetadb(metadb);
        }
       
        if ( window.GetProperty("skip") == 1) {
            if (value || group) tfarray.push(tfname[j]);
        } else {
            tfarray.push(tfname[j]);
        }
    }

    t_height = gr.CalcTextHeight("text", g_font) + 2;

    widestring = [];

    for (i = 0; i < tfarray.length; i++) {
        line = false;
        group = false;
        measure = "";
       
        row =  i * t_height + s;
       
        if (tfarray[i].search('line') >= 0) line = true;
        if (tfarray[i].search('group') >= 0) group = true;

        name = tfarray[i].replace(/[%\$\(\)]|info|meta|group |line|lastfm/g,'').replace(/_/g,' ');

        if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
            value = fb.TitleFormat("[" + tfarray[i] + "]").Eval();
        } else {
            if (metadb) value = fb.TitleFormat("[" + tfarray[i] + "]").EvalWithMetadb(metadb);
        }
       
        if (name && value){
            if (tfarray[i] == "$info(bitrate)") measure = "  kbps";
            if (tfarray[i] == "$info(samplerate)") measure = "  Hz";
            if (tfarray[i] == "$info(bitspersample)") measure = "  bps";
            if (tfarray[i] == "$info(channels)") measure = "  ch";
            if (tfarray[i] == "$meta(rating)") measure = "  (tag)";
        }

        line_row = row + t_height / 2;
        if (line) gr.DrawLine(col1, line_row, ww - col1, line_row, 1, color3);
        gr.GdiDrawText(name, group ? g_font2 : g_font, group ? color3 : color1, col1, row, ww - col1 * 2, wh, DT_LEFT | DT_WORD_ELLIPSIS);

        t_width2 = gr.CalcTextWidth(value, g_font);
        col3 = col2 + t_width2;
       
        if (t_width2 > ww - col2 - col1) {   widestring.push(row,'"' + tfarray[i] + '"')};

        gr.GdiDrawText(value, g_font, color2, col2, row, ww - col2 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_SINGLELINE);
        gr.GdiDrawText(measure, g_font, color1, col3, row, ww - col3 - col1, wh, DT_LEFT | DT_WORD_ELLIPSIS);
    }

    g_tooltip.Text = ttText;
    if (ttText) g_tooltip.Activate();
   

    gr.GdiDrawText("", g_font, color2, 0, 140, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);
    gr.GdiDrawText("", g_font, color2, 0, 160, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);     
   
}

function on_mouse_lbtn_down(x, y) {
    g_drag = true;
    g_drag_y = (y - s);
}

function on_mouse_lbtn_up(x, y) {
    g_drag = false;
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
   
    ttText = "";

     for (i = 0; i < widestring.length; i = i + 2) {

        if (y > widestring[i] && y < widestring[i] + t_height && x > col2) {
            if (path.substr(0,4) == "http" || path.substr(0,4) == "mms:") {
                ttText = fb.TitleFormat("[" + widestring[i + 1] + "]").Eval();
            } else {
                if (metadb) ttText = fb.TitleFormat("[" + widestring[i + 1] + "]").EvalWithMetadb(metadb);
            }
           
            if (ttText) return;
        }
    }

    if (g_drag) {
        if (s <= 0 && (tfarray.length * t_height) >= wh) {s = y - g_drag_y};
        applyDelta();
    }
   
    if (s == 0 || s == wh - tfarray.length * t_height) g_drag_y = (y - s);
        window.Repaint();
}

function on_mouse_wheel(step) {
    if (s <= 0 && tfarray.length * t_height >= wh) {s = s + step * t_height};
    applyDelta();
}

function applyDelta() {
    s = s > 0 ? 0 : s;
    s = s < (wh - tfarray.length * t_height) && s < 0 ? (wh - tfarray.length * t_height) : s;
    window.Repaint();
}

function on_mouse_leave() {   
    window.SetCursor(32512);
    g_tooltip.Deactivate();
    window.Repaint();
}

function on_metadb_changed() {
    path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
    title = fb.Titleformat("%title%").EvalWithMetadb(metadb);
        artist = fb.Titleformat("%artist%").EvalWithMetadb(metadb);
}

function on_item_focus_change() {
    metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem() ,true;
    if (metadb) on_metadb_changed();
    window.Repaint();
}

function on_playback_new_track(metadb) {     
    on_item_focus_change();
}

function on_playback_time(time){
    on_item_focus_change();
}

function on_selection_changed(metadb) {
    on_item_focus_change(); 
}

function on_playlist_switch() {
    on_item_focus_change(); 
}

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

function on_size() {
    ww = window.Width;
    wh = window.Height;
    if (s < 0) s = 0;
}

function on_mouse_rbtn_up (x, y){     
    var _menu = window.CreatePopupMenu();
    var i = 1;

    MF_ENABLED = 0x00000000;
    MF_GRAYED = 0x00000001;
   
    _menu.AppendMenuItem(MF_ENABLED, 1, "skip if empty");
    _menu.CheckMenuItem(1, window.GetProperty("skip"));

    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
//    if (ShiftDown) {
        _menu.AppendMenuItem(0x00000800, 0, 0);
        _menu.AppendMenuItem(0x00000000, 10, "Reload");
        _menu.AppendMenuItem(0x00000800, 0, 0);
        _menu.AppendMenuItem(0x00000000, 20, "Properties");
        _menu.AppendMenuItem(0x00000000, 30, "Configure ...");
//    }

    ret = _menu.TrackPopupMenu(x,y);

    switch (ret) {
    case 1:   
        window.SetProperty("skip", window.GetProperty("skip") == 0 ? 1 : 0);
        if (s < 0) s = 0;
        break;
    case 10:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();      
        break;
   }
    _menu.Dispose();
    return true;
}

var tfname = new Array(
"%artist%",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"%album artist%",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%comment%",
"%rating%",
"$meta(rating)",
"line",
//"\r\n",
"group G E N E R A L",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"line",
//"\r\n",
"group L O C A T I O N",
"%filename_ext%",
"%path%",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"line",
//"\r\n",
"group P L A Y B A C K   S T A T I S T I C S",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"line",
//"\r\n",
"group L A  S T F M",
"%lastfm_bio%",
"%lastfm_similar_artist%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%"
);

2. Недавно сделал скрипт для формирования файла txt или xls из тегов (через меню со скроллингом выбираем нужные теги для вывода). Есть ли смысл прикрутить его в этот скрипт.
3.
AHAPXICT:там никак нельзя избавится от нижнего подчёркивания заменяющего символ & в названиях треков
Нет, вроде не писали. Выложите этот трек. И что это за символ &.
4. Было сообщение в теме Модификация темы DarkOne v4 от 13.04.2015, 07:50 . Ваше мнение.

seriousstas
для Shift.exe
WshShell.Run(fb.ProfilePath + "\\Emul\\Shift.exe ");
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #358 AHAPXICT » 30.05.2015, 07:14

kgena_ua, начну с последнего. Дико извиняюсь, вот жеж я дятел :oops: У меня тогда инета не было, поэтому лазил на форум когда в гостях у корешей был, ну и "флешечка" при мне всегда. Когда домой скрипт принёс, я потом целую неделю цвета переключал, игрался аки ребёнок. Учитывая мою любовь ко всяким ностальгическим штучкам как VU и матричные дисплеи и т.д. скажу что думаю по этому поводу. Это охринительно, вот что я думаю! Эта тема по матричным дисплеям у меня давно в голове в качестве отдельного проекта, по типу скриптов от Br3tt, где готовый матричный дисплей "со всеми делами" вставил в любую сборку и забыл! С такой регулировкой цвета и прочими автономными настройками. Короче говоря в двух словах не опишешь, и пока это всего лишь мечты.
Раз уж начал с конца то так дальше и пойду. В этой теме, не помню когда, уже задавал этот вопрос, в то время как раз полностью переделывал шрифт(раз в десятый, а это работа не из лёгких) поэтому сам и не возвращался к данной проблеме. В общем дело в следующем. Ели в метаданных есть символ & который по сути заменяет AND то возникает следующая проблема не зависимо от использованного шрифта:
scrolltext.png
scrolltext.png (8.37 КБ) Просмотров: 2427
На картинке сверху вниз: Бегущая строка, Лирика, простой шрифт для примера.
По второму вопросу, пока не знаю что посоветовать, никогда не собирал данные из свойств файла. Обычно при прослушивании "стрим" потоков или радио удобно копировать ссылку(Ctrl + C) и пулить её по скайпу приятелю)))
Добрался до начала. Уже тестирую, g_tooltip у меня на ХР работает нормально. Пока ещё нечего не заметил. Единственное, как по мне, это всё таки добавить сверху колонку "group M E T A D A T A", так красивее))))
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 8 месяцев

Сообщение #359 kgena_ua » 30.05.2015, 09:02

AHAPXICT.
По поводу & (в этом шрифте как-то криво рисуется :smile: сразу не понял что это такое).
Мне пока кажется что это глюк gr.GdiDrawText (может кто сталкивался, то исправит меня).
Вот пример вывода через gr.GdiDrawText и gr.DrawString
Безымянный.png

Только есть одна проблема с gr.CalcTextWidth. Может попробовать скомпенсировать это, методом тыка:

d = gr.CalcTextWidth("00", font);
gr.DrawString( text1, font, RGB(200,200,200), step1, txt_row, t_width1 + d, wh);
gr.DrawString( text2, font, RGB(200,200,200), step2, txt_row, t_width2 + d, wh);

По поводу добавления в "скрипт свойства". Постарался сделать как можно удобнее для изменения:
- нужно добавить наименование группы - вставляем строчку "group M E T A D A T A", (как Вы сделали):
- нужно добавит разделительную линию- вставляем строчку "line", .
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 3 месяца

Сообщение #360 AHAPXICT » 30.05.2015, 11:07

kgena_ua, или мне надо идти спать или у меня скрипт бракованный))) По ходу всё работает, символ отображается. А зачем калькулятор d = gr.CalcTextWidth("00", font);? Поэкспериментировал с разными значениями - эффекта ноль, закоментил строку. Во всех режимах, включая LR на hight speed работает нормально! Спасибо.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 8 месяцев

Пред.След.

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