Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #2601 kgena_ua » 07.07.2019, 18:24

seriousstas , приветствую.

Добавлено спустя 2 часа 35 минут:
Я думаю на Last.fm будут еще изменения - там какая-то каша.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #2602 robertospeed » 07.07.2019, 23:15

kgena_ua,
на моем ПК это работает очень хорошо, вместо этого это произошло на компьютере моего друга, который разбился, но теперь это работает хорошо.
robertospeed M
Аватара
Откуда: Italia
Репутация: 1
С нами: 7 лет 3 месяца

Сообщение #2603 ssbest777 » 09.07.2019, 08:56

Слетел русский текст и фото артиста,при выборе ru txt -текст остается на английском
ssbest777
Репутация: 0
С нами: 15 лет

Сообщение #2604 MC Web » 09.07.2019, 15:43

ssbest777:Слетел русский текст и фото артиста
Нет таких проблем.
ssbest777:при выборе ru txt -текст остается на английском
А он есть на сайте Last.fm на русском?
Когда в скрипте выбран русский язык (ru txt), через контекстное меню скрипта открываем страницу last.fm/ru "проблемного" исполнителя и смотрим (сравниваем) там наличие фото, язык текста и т.д.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #2605 SergPuh.68 » 09.07.2019, 23:15

У меня всё работает нормально.
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 143
С нами: 5 лет 10 месяцев

Сообщение #2606 ssbest777 » 10.07.2019, 08:31

Текст сам по себе изменился повторно на русский(но фото не загружается(думаю проблема в моем подключении через VPN)
ssbest777
Репутация: 0
С нами: 15 лет

Сообщение #2607 kgena_ua » 13.07.2019, 18:11

"Biography, albums, title, similar artist info.www.last.fm."
@version "13072019"


Мелкие исправления.
"Внешние ссылки" работают.

Добавлена возможность просматривать текст, используя клавиши - UP, DOWN, PAGE_UP, PAGE_DOWN, HOME, END.
Клавиши LEFT и RIGHT для смены изображения.
Соответственно панель должна быть активна (выбрана, левый клик по панели, например).

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

Сообщение #2608 MC Web » 13.07.2019, 18:41

kgena_ua, привет.

Хотел узнать, планируется ли добавление очистки Истории (history.txt), хоть файл небольшой, но со временем разрастается.
И народ интересуется пропажей возможности выборочного сохранения понравившегося фото в папке исполнителя.
Не хотелось бы зря тратить время на адаптацию скрипта под себя, если данные изменения будут в ближайшее время...
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #2609 Mr.Merak » 14.07.2019, 17:16

kgena_ua, вылетает при первом обращении к панели. Если сделать reload то потом норм

JScript Panel v2.2.2.1 (Get Covers (Artwork) radio logos v12072018 by kgena_ua)
Ошибка выполнения Microsoft JScript:
Переполнение
File: <main>
Line: 573, Col: 9
Mr.Merak M
Откуда: Украина
Репутация: 27
С нами: 18 лет 3 месяца

Сообщение #2610 kgena_ua » 18.07.2019, 17:07

MC Web:Хотел узнать, планируется ли добавление очистки Истории .....
MC Web, будет удаление элемента списка "История" и очистка всего списка.
"Сохранения фото в папке исполнителя" планирую давить в группу "Изображение".
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #2611 MC Web » 19.07.2019, 13:57

kgena_ua, зафиксировал у себя...
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #2612 kgena_ua » 21.07.2019, 17:02

"Get Covers (Artwork) radio logos"
"21072019"


Исправления.

Get Covers (Artwork) && radio logos 21072019.rar
(12.04 КБ) Скачиваний: 419
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #2613 kutuzof » 22.07.2019, 09:57

kgena_ua:"Get Covers (Artwork) radio logos"
"21072019"
kgena_ua, приветствую!
1. Режим "Border" отключен. Включаем плеер и если включить режим "Border "через контекстное меню, то он отображается как то неправильно. Через "Properties" всё нормально.
2. Если в окне переименования файлов нажать отмена панель падает.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #2614 kgena_ua » 22.07.2019, 12:55

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

Сообщение #2615 SergPuh.68 » 24.07.2019, 22:49

Имеется скрипт "бегущая строка", использую для foo_jscript_panel.Очень часто он почему то вылетает.Это причина в скрипте или в панели?Как исправить?
И ещё как сделать что бы "бегущая строка" позиционировалась строго по середине панели по вертикали?
Код: Выделить всё
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }

var font = gdi.Font("Segoe UI 10pt",13,32);
var ww,wh;

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

function on_paint(gr) { 
   
    gr.FillSolidRect (0, 0, ww, wh, RGB(0,0,0));
   
    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(221,221,221), step1, txt_row, t_width1, wh);
    gr.GdiDrawText( text2, font, RGB(221,221,221), 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;
}
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 143
С нами: 5 лет 10 месяцев

Сообщение #2616 AHAPXICT » 25.07.2019, 00:52

SergPuh.68:gdi.Font("Segoe UI 10pt",13,32)
А что за стиль у шрифта 32? (первое что в сообщении в глаза бросилось). Ну а если по теме, у меня есть адаптированный из сборки, но по моему никто не загонялся раньше с центрированием, это можно сделать по типу у= столько-то. Я сейчас заремил кое что на скорую руку, кое чего добавил. И да, я уже не помню причину, но сейчас вместо gr.GdiDrawText использую gr.DrawString. там по моему были какие-то косяки с отображением.
Подредактируете под себя: txt_row = 0; (+- от центра), gr.SetTextRenderingHint(4); от 1 до 5 антиализинг(разберётесь)
Пункт меню Configure.. доступен при нажатой клавише Shift
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Scroll Text"
// @author "kgena_ua"
// @version "2.2"
// @feature "v1.4"
// @feature "watch-metadb"
// @feature "dragdrop"
// @import "%fb2k_component_path%docs\flags.txt"
// @import "%fb2k_component_path%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));}
MF_SEPARATOR = 0x00000800;
MF_STRING = 0x00000000;
var font = gdi.Font("Segoe UI 10pt",13,0);  //FONT
var block_rgb, font_rgb = window.GetProperty("|6| Color", 1);
var ww,wh;
var txt_row = 0;
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;
get_color();

function on_paint(gr) {
   
    show1 = window.GetProperty("|1| Title",1);
    show2 = window.GetProperty("|2| Artist",1);
    show3 = window.GetProperty("|3| Album",1);
    mode = window.GetProperty("|5| Mode",0);
    showi = window.GetProperty("|4| Info",0);
   
    if (show1 == 1) {t1 = fb.TitleFormat("$upper([[%tracknumber%. ]%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)]$if(%__hdcd%, | HDCD,)[ | $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;
    text1 = fb.IsPaused ? "- PAUSE -" : text1;
    text2 = fb.IsPaused ? "- PAUSE -" : text2;
    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};
        }
    }
 String.prototype.repeat = function(n) {
return new Array(n + 1).join(this);
}   
// ========BACKGROUND & BLOCKS======== //
  gr.FillSolidRect (0, 0, ww, wh, RGB(0,0,0));
//    gr.FillGradRect(0, 0, ww, 85, 90, RGBA(18, 29, 37, 255), RGBA(26, 47, 66, 195));
//    gr.GdiDrawText( "\u2598".repeat(18), font, block_rgb, 0, txt_row, ww, wh);
// ========TEXT======== //   
    d = gr.CalcTextWidth("0000", font);
    gr.SetTextRenderingHint(4);
    gr.DrawString( text1, font, font_rgb, step1, txt_row, t_width1 + d, wh, StringFormat(1, 1, 0, 0x00001000 | 0x00004000));
    gr.DrawString( text2, font, font_rgb, step2, txt_row, t_width2 + d, wh, StringFormat(1, 1, 0, 0x00001000 | 0x00004000));
}

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

var seek_timer;
var speed = window.GetProperty("|7| Speed Scroll", 50);
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();
    }, speed );
}

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("|1| Title", show1 == 0 ? 1 : 0);
        break;
    case 2:
        window.SetProperty("|2| Artist", show2 == 0 ? 1 : 0);
        break;
    case 3:
        window.SetProperty("|3| Album", show3 == 0 ? 1 : 0);
        break;
    case 4:
        window.SetProperty("|4| Info", showi == 0 ? 1 : 0);
        break;
    case 5:
        window.SetProperty("|5| Mode", mode == 0 ? 1 : 0);
        break;
    }
    _menu.Dispose();
    return true;
}
// ========Menu======== //
var rbtnDown, ShiftDown;
function on_mouse_rbtn_down(x, y, vkey){
    rbtnDown = true;
    ShiftDown = vkey==6 ? true : false;
}

function on_mouse_rbtn_up(x, y, vkey){
    if (!rbtnDown) return true;
    rbtnDown = false;
    if (ShiftDown)
    return;
}

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.AppendMenuItem(MF_STRING, 7, "Grey")
    _menu.CheckMenuRadioItem(1, 7, window.GetProperty("|6| Color", 1));   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0)
    _menu.AppendMenuItem(MF_STRING, 8, "Properties...");
    if (ShiftDown){
    _menu.AppendMenuItem(MF_STRING, 9, "Configure...");
}
    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
       
        ch_color(idx);
   
        break;   
    case 8:
        window.ShowProperties();
        break;
    case 9:
        window.ShowConfigure();
        break;
}
    _menu.Dispose();
    return true
}

var block_rgb, font_rgb;

function get_color() {
    if (window.GetProperty("|6| Color") == 1)  font_rgb = RGB(191,228,255), block_rgb = RGB(24,37,46);   //Default   
    if (window.GetProperty("|6| Color") == 2)  font_rgb = RGB(128,192,255), block_rgb = RGB(22,36,46);   //Blue   
    if (window.GetProperty("|6| Color") == 3)  font_rgb = RGB(0,255,0), block_rgb = RGB(18,38,38);       //Green   
    if (window.GetProperty("|6| Color") == 4)  font_rgb = RGB(255,0,0), block_rgb = RGB(38,26,34);       //Red   
    if (window.GetProperty("|6| Color") == 5)  font_rgb = RGB(255,255,255), block_rgb = RGB(26,38,46);   //White   
    if (window.GetProperty("|6| Color") == 6)  font_rgb = RGB(255,255,0), block_rgb = RGB(26,38,38);     //Yellow
    if (window.GetProperty("|6| Color") == 7)  font_rgb = RGB(85,136,171), block_rgb = RGB(22,36,45);    //Grey
}

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

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

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

var g_timer;

function ch_color(idx) {
    get_color();
    old_R = getRed(font_rgb);   
    old_G = getGreen(font_rgb);   
    old_B = getBlue(font_rgb);

    window.SetProperty("|6| Color", idx);   
   
    get_color();

    new_R = getRed(font_rgb);   
    new_G = getGreen(font_rgb);   
    new_B = getBlue(font_rgb);

    step_R = (new_R - old_R)/255; step_G = (new_G - old_G)/255; step_B = (new_B - old_B)/255;

    g_timer = window.SetInterval(function() {
        old_R = old_R + step_R; old_G = old_G + step_G; old_B = old_B + step_B;
        R = old_R; G = old_G; B = old_B;
        font_rgb = RGB(R,G,B)
        window.Repaint();
       
        if (
            step_R < 0 && R <= new_R || step_G < 0 && G <= new_G || step_B < 0 && B <= new_B ||
            step_R > 0 && R >= new_R || step_G > 0 && G >= new_G || step_B > 0 && B >= new_B
        ) {window.ClearInterval(g_timer); R = new_R; G = new_G; B = new_B; font_rgb = RGB(R,G,B)};
    }, 5);
}

//--END

P.S. Не проверял на JS, но по идее должно работать
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #2617 LUR » 25.07.2019, 01:31

SergPuh.68:И ещё как сделать что бы "бегущая строка" позиционировалась строго по середине панели по вертикали?
Пример из моего скрипта:
Код: Выделить всё
var DT_VCENTER = 0x00000004;
var DT_SINGLELINE = 0x00000020;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
gr.GdiDrawText(_text, g_font, g_textcolor, _textPos, 0, textWidth, _wh, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT | DT_NOPREFIX);
Другие флаги можно посмотреть в Flags.txt из документации к панели
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 390
С нами: 11 лет 11 месяцев

Сообщение #2618 AHAPXICT » 25.07.2019, 03:02

AHAPXICT:вместо gr.GdiDrawText использую gr.DrawString
Вспомнил, в этой теме как раз обсуждали. gr.GdiDrawText не справлялся с некоторыми символами по типу "крючка" &
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #2619 SergPuh.68 » 25.07.2019, 13:37

AHAPXICT, они соеденились :eek: скрипт остался старый а свойства ваши :wink:
LUR, ещё бы знать что такое флаги :smile:
SergPuh.68 M
Аватара
Откуда: Украина
Репутация: 143
С нами: 5 лет 10 месяцев

Сообщение #2620 AHAPXICT » 25.07.2019, 14:52

SergPuh.68:они соеденились :eek: скрипт остался старый а свойства ваши :wink:
У меня после таких сообщений начинаются мозговые бури.
SergPuh.68:ещё бы знать что такое флаги :smile:
А это контрольный в голову. Пошёл я, куда нибудь, выпущу пар.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Пред.След.

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