вопрос такой как сделать текстуру бегущей строки прозрачной ? или хотябы чтоб по тону не отличалась от бэкграунда?Как-как.. Создается в фотошопе новый пустой документ по размерам бегущей строки, сохраняется, загружается в редакторе. Обязательно нужно будет снять галочку "Использовать хит-тест маску".
Портировал свою обложку с AIMP2 на AIMP3, т.к. захотелось растягивания по ширине... но так и не смог это реализовать. У главного окна поставил AllowResizeByWidth=true и вообще визуально сравнил некоторые параметры у стандартного All-in-One и у моего, в целом сходятся.
Может есть какая-то тонкость в расположении контейнеров или в задании доп. параметров? :-\
Всем привет! У меня возник вопрос, как сделать так что бы фрэйм не реагировал на изменение цвета в настройках проигрывателя???Никак.
А если мне нужжно чтоб определенные элементы не реагировали на изменение цвета?? есть же такие скины где только кнопки изменяют цвет!
%E%IF(%E,; %H; %B; %C; %S,%H; %B; %C %IF(%E,; ,)%Replace(%S,0 B,))
Шаблон "Длительность трека" (03:00)%Replace(%L,00:00,--:--)
(--:-- можно заменить, например, на надпись Radio)
У меня простой вопрос. Как на бегущей строке выставить "затухание" текста по бокам?Текстура должна быть двух-кадровой (второй рисуется поверх текста). Сделать второй кадр можно из первого, пример, с помощью маски и градиента.
Разве не появилась возможность задавать отступ между вкладками плейлистов?Такая возможность есть в редакторе, начиная со сборки 305, параметр "IndentBetweenTabs"
Помогите,такая проблема эквалайзер выходит не до конца как это исправить?.Вот скрин
Подскажите пожалуйста как реализовать вертикальные вкладки плейлистов?Контейнер: Вкладки плейлистов
Контейнер: Вкладки плейлистов
TabsVerticalLayout=True
Пробовал, контейнер со списком треков становится очень узкимразмеры контейнера задаются текстурами и цифрами
Товарищи, не совсем ясно как сделать, чтобы по полосе прокрутки трека перемещалась вертикальная риска, сама полоса при этом должна быть видна (типа по линейке перемещается вертикальная полоска) Раньше риска находилась в skintumb, теперь этого пункта в свойствах нет.Контейнер: Плейлист >> SсrollSkinThumb
Не понял, как изменить размер цифрового табло. Где в свойствах меняется размер?Размер задаётся исключительно текстурой. Рисуйте новые цифры большего/меньшего размера
Делаю скин, который будет полностью располагаться в окне плейлиста (т.е. без основного окна - все кнопки на плейлисте) Не могу приклеить эквалайзер , чтобы он не смещался при перетаскивании плеера по экрану. Пробовал сымитировать основное окно тонкой прозрачной полосой, но, плейлист перемещается и без него, а экв. приклеивается к основному.Только если делать скин АИО. Эквалайзер пока жёстко привязан к главному окну.
Есть возможность как-то обойти это дело?
Можно ли сделать скрывающийся контейнер (при изменении размера окна) в обычном скине (не AIO)?Теоретически можно. Правда на практике нет времени проверять.
1) Все дочерние контейнеры должны иметь AllowResizeByWidth=true (см. https://www.aimp.ru/forum/index.php?topic=27852.0)соблюдены (только в моем случае не AllowResizeByWidth, а AllowResizeByHeight равен True), но скин все равно не растягивается. Курсор возле края скина меняется, пробуешь растянуть - рамка растягивания показывает, что скин растягивается, но когда отпускаешь кнопку - скин внешне не меняется. Только уже при пристыковывании к краю стола скин пристыковывается неправильно из-за его измененных границ. Что не так?
2) Среди дочерних должен быть обязательно элемент с Align=Client
удалил Main DockСоздайте текстуру. Обзовите её MainDock
собрал ГЛ окно а как вернуть этот док?
или по новому все собирать?
Можно ли повесить на кнопку на скине сочетание клавиш?Нет, все хоткеи только в настройках плеера задаются
И есть ли возможность изменять контекстное меню плейлиста?В SE v3.50 можно будет.
сохранил в 32-битном bmpЭто и была ошибка. Сохраняйте в PNG
Спасибо за советы, но еще вопрос, как в самом фотошопе правильно нарисовать полупрозрачность, чтобы в SE текстура действительно была полупрозрачной. Т.е. просто нужно прозрачность слоя с рамкой умешьить или что?
т.е. примерно вот так должно выглядеть?
6. Вопросы по работе в графических редакторах задаются тут (https://www.aimp.ru/forum/index.php?topic=2202.0).
Блин а что делать, если я эту текстуру удалил? :(Создать новый подпункт текстуры в контейнере Main и назвать ее MainDock.
Выбираешь, открываешь и корректируешьК сожалению нет такого пункта ???
К сожалению нет такого пункта ???Не там ищешь, тебе нужен Фрейм Главное окно, в самом верху дерева элементов.
Не там ищешь, тебе нужен Фрейм Главное окно, в самом верху дерева элементов.Спасибо, вот я невнимательный :-\
НетА можно ли это будет реализовать в следующих версиях SE? А-то из-за этого скин немного теряет свой вид с прикрепленным плейлистом, особенно если по краю есть тень.
А можно в главное окно добавить регулятор басса?
Возможно ли в редакторе сделать так, чтобы Эквалайзер не выезжал, а просто появлялся?Не в редакторе, а в настройках плеера, в разделе Интерфейс.
А для конкретного скина никак? А то хочу создать в своем - EQ выше главного окна.Это совсем другое! Кстати, в данной теме упоминалось о том, как сделать так, чтобы EQ появлялся выше главного окна.
Можно ли сделать вот так (http://rghost.ru/16967001/image.png) (http://rghost.ru/16967001.view) чтобы показывало сколько времени прошло и сколько всего трек идет?Делаете два таймера. Одному из них устанавливаете параметр Static = True. Это будет статичный таймер, который будет отображать общее время трека.
Делаете два таймера. Одному из них устанавливаете параметр Static = True. Это будет статичный таймер, который будет отображать общее время трека.Спасибо :)
Имеется ввиду всплывающее окошко с бегущей строкой?Что то вроде того
Что то вроде тогоНа данный момент нельзя.
Вот как в ТС наводишь на плеер и появляется TCINFO
(http://rghost.ru/17209551/image.png) (http://rghost.ru/17209551.view)
Возможно ли уменьшить количество полос в эквалайзере?Полос 18. Если их "проредить" - то невидимые полосы просто не будут регулироваться
Если да, то как перераспределятся частоты на оставшиеся ползунки?
Tarik спасибо.Нет, нельзя
Еще вопрос можно ли сделать coverArt Display с небольшим наклоном как на этом скине
(http://rghost.ru/17264641/thumb.png) (http://rghost.ru/17264641.view)
От чего зависит будет ли растягиваться по вертикали плейлист, прикрепленный к главному окну?По вертикали? В PlaylistFrame параметр AllowResizeByHeight должен быть True, так же как и у всех дочерних элементов.
Как сделать, чтобы нижняя текстура/контейнер Главного Окна исчезали/появлялись при прикреплении/откреплении плейлиста (аналогично контейнеру PlsTopDock для плейлиста) ?Нужно делать либо прозрачный кадр, либо вырезать кусок от плейлиста.
Нужно делать либо прозрачный кадр, либо вырезать кусок от плейлиста.Нет, не катит. Нужно именно исчезание, а не наложение прозрачной текстуры =(
Как сделать, чтобы нижняя текстура/контейнер Главного Окна исчезали/появлялись при прикреплении/откреплении плейлиста (аналогично контейнеру PlsTopDock для плейлиста) ?как понять появлялась/исчезала?
как понять появлялась/исчезала?PlsTopDock просто исчезает при прикреплении плейлиста.
она ведь и так изменяется на тот кадр или другой при расположении плейлиста
PlsTopDock просто исчезает при прикреплении плейлиста.вроде так нельзя, там ведь 1й кадр для главного с отцеплённым ПЛ, а в 2й с прикреплённым
Как это пофиксить?Эквалайзер нарисован полностью с закруглениями снизу?
Эквалайзер нарисован полностью с закруглениями снизу?Если в SE отображается корректно, то должно быть у меня все в порядке с прозрачностями
Главное окно в местах искривления с прозрачностью?
Если в SE отображается корректно, то должно быть у меня все в порядке с прозрачностямиПомучил, помучил... Наверное, это баг
ОбъяснитеА вы попробуйте обе кнопки и увидите разницу =)тупому:-X чем отличается "Кнопка: Список плейлистов" от "Выпадающий список: Список плейлистов"?
Net, nikak ne vozmojno.хм. а куда бы тогда обратиться с этим предложением? ведь это же делает почти все скины одинаковыми.. :-X
...Потому что они выполняют разные функции!
Кстати, а почему обычные кнопки Prev Playlist и Next Playlist не могут становиться не доступными???
Объясните в чем смысл кнопки "ОК" в окне DropWheel, кроме как для красоты? Ведь она выполняет ту же функцию, что и "Добавить в текущую позицию"... И все скинмейкеры ее лепят, а кнопку отмена забывают добавить))Во-первых, не нужно всех под одну гребёнку
как сделать выдвижной Equalizer в AIO?Такое сделать нельзя, на то он и AIO, чтоб было все в одном.
Я так понимаю к шрифтам применяется какой-то не качественный метод сглаживания, либо вообще никакой...На собственном опыте могу сказать. Метод сглаживания используется системный
Здравствуйте у меня такой вопрос сколько кадров можно поставить в строку seekbar, это хорошо бы подошло для круглых частей чтобы они вращалисьВы о чем? Почитайте в справке о круглых регуляторах.
Подскажите как можно выровнять текст в бегущей строке по ценру (по вертикали) текстуры. СЕ v. 3.0 А то у менят текст прилипает к верхнему краю .Никак
НикакАааа.. Я понял.. Долго думал сачала о каком месте речь.. :) Теперь понял..
Вырезайте текстуру в нужном месте
Надоела эта недоделанность! Перехожу обратно на винамп! >:( >:( >:(
Появится ли возможность замены шрифтов в созданных скинах,если есть acs3,но без наличия файла проэкта proj?Спасибо.
В скине, который я сейчас делаю есть два элемента Time - один показывает сколько времени прошло, другой - сколько осталось. Мне нужно сделать так, чтоб они не реагировали на нажатие. Это возможно?Можно попробовать поверх таймера расположить другой элемент с прозрачной текстурой, например Player State (обязательно нужно будет снять галочку Использовать хит тест маску).
Точно, спасибо. А можно поставить аниматор с одним кадром?Если один кадр, то только за $5
Нет, я в том смысле, не сильно ли это нагрузит движок?Пробуйте, не бойтесь.
Интересно что когда изображение больше 607 пикс. то и все остальное под него тянется, а меньше нет.Все верно. Размер контейнера не может быть меньше, чем размер назначенной текстуры.
Сделал себе скин, но от плейлиста осталась такая шнягаНет, нельзя.
(http://rghost.ru/29483531/thumb.png) (http://rghost.ru/29483531.view)
Ее не видать, но все таки можно ее как-то убрать?
Нет, нельзя.Ну да и фиг с ним. Спасибо :)
А зачем было так делать? Можно же просто закрыть плейлист и все =)
Проверьте, для всех пунктов назначен этот шрифт (для проигрываемого трека, для выделенного и т.п.), и также размер и начертание шрифта. Может где-то остался старый шрифт или размер больше...
Эх, в том то и дело что везде всё одинаково... И точки самое интересное местами,а где то нормально..
На текущий момент такого сделать нельзяЖаль. Пробовал поставить ограничение макс. размеров у контейнера с эквалайзером 200x94, и в той же группе создал второй контейнер без ограничений. Но чтобы оба контейнера растягивались нужно поставить "Alignment: Client" у обоих. А так они корежат скин - и AlignmentLevel не помогает.
Подскажите как убрать рамку вокруг ковер-арта? Где-то это уже кажись спрашивали, только я не могу найти.1. Убирается рамка, при использовании более 1-го кадра ковер-арта
И ещё: мне нужно сделать, чтобы ковер-арт с краю плавно переходил в прозрачность. Это вообще возможно?
Подскажите пожалуйста, можно ли с того же фотошопа копировать в буфер обмена полупрозрачные картинки, а потом вставлять в SkinEditor, не сохраняя в PNG (в целях экономии времени)? Я когда пытаюсь так сделать, вся прозрачность заменяется на белый цвет, не знаю как у других, наверное также... ???у меня так же
А есть ли в планах добавить поддержку прозрачности для буфера?Это проблемы фотошопа. Он вообще иногда странно себя с буфером ведет ::)
Это проблемы фотошопа. Он вообще иногда странно себя с буфером ведет ::)Да ну? Например?
Можете ли прикрутить ее "компрессор" к СкинЕдитору?Вы видели сколько она обрабатывает одну картинку? А если картинок 50? Боюсь, мало кому понравится тормоз-SE
Есть такая полезная прога - Color quantizer > http://x128.ho.ua/color-quantizer.html (http://Color quantizer > http://x128.ho.ua/color-quantizer.html)
Замечательно жмет пнг, степень сжатия зависит от настроек и от картинки.
Я перед сборкой скина все запчасти через нее пропускаю.
Можете ли прикрутить ее "компрессор" к СкинЕдитору?
в скине картинки хранятся НЕ в пнг.
Хотите сказать, что СкинЕдит хранит неужатую битмапину
и любые манипуляции со сжатиями картинок бессмысленны?
И почему тогда при сохранении картинки ИЗ редактора,
он предлагает только пнг, хотя В редактор она пришла как жпег?
Дорбого всем! Может быть, кто-нибудь сможет описать криворукому, как сделать полосочки уровней левого и правого каналов инструментом "Level Gauge"? Честно прочитал всю справку, но так и не смог понять.а вы вставьте этот элемент в скин и изучите его структуру
В скинэдиторе 3 версии есть руководство... Или оно Вам тоже не помогло?
В данной теме Вы можете найти ответ на интересующий вопрос или же задать свой, если такого еще не было.
Большая просьба всем присутствующим!!
Я неплохо рисую в фотошоп, и хочу и могу делать интересные скины. Даже скачал оба скин эдитора. Проблемма в том что нет нормального мануала для работы с программой. Очень хотелось бы описание программы по пунктам (где что нажимать) или видео мануал.
Например я уже три дня бьюсь над тем как добавить обычную кнопку плей\пауза, и как добавить туда больше одного кадра. Форум на официальном сайте не помогает, потому что тут в основном общаются уже более или менее опытные пользователи.
Если бы кто-то из мастеров не поленился просто записать видео во время сборки скина - это решило бы массу проблемм.
Спасибо за внимание.
P.S. Если подобное есть - дайте ссылку.
гугл, яндекс, ютуб и faq на сайте не помогли.
Скажу как я изучал СкинЭдитор
Открываете SE >> Новый проект >> и изучаете его!
даблклик по кнопке и вы увидите её внутренности
Обычная кнопка состоит из 4-х кадров (фреймов) (обычное состояние, наведена мышь, нажата кнопка, нажатие недоступно) (обычно 1-й кадр = 4-му кадру)
То есть рисуем текстуру где идут в ряд 4 вида кнопки, находим в дереве нужную кнопку (например "закрыть"), даблклик, назначаем текстуру и выставляем 4 фрейма, расположение фреймов (по вертикали/горизонтали) и вуа-ля получаем рабочую кнопку.
У СкинЭдитора много нюансов. Видеоруководство можно снимать неделю. А обычная Справка всё очень подробно описывает.
Нужно лишь начать ЧИТАТЬ!
И по поводу видео : эта программа намного проще того же фотошопа,Правильно, проще, поэтому нет смысла делать видео.
Чем можно открыть ACS3 (чтобы вынуть некоторые элементы из скина)? я знаю что винамповские обложки открываются винраром, есть ли способ сделать то же с аимповскими?Нет, невозможно! Читайте справку Скин Эдитора.
Други, подскажите, почему две нижних строки (делаю таймер) прекрасно работают с скине, верхний не хочет, белиберда какая-то вместо цифр :(У тебя немного неверно подсчитано расстояние между цифрами...
то есть, все цифры дожны быть одинаковы по ширине и расстояние между цифрами тоже должно быть одинаковым?все 13 блоков цифра-промежуток должны быть одинаковыми по ширине
что-то никак, даже с матрицей... остается выдрать таймер из какого-нибудь скина, ну не знаю, что делать. Эти циферки мне нужны 12x18 пикселй (одна цифра), голубыерасположение фреймов какое? нужно "по гризонтали" и "13"
13у вас ширина текстуры на 13 делится без остатка?
а если текстуру вставлять без изменения размера, косяки проявляются?нет. Файл "time.png" отлично работает, хоть изменяй размеры, хоть нет. Время трека отображается корректно. Я его уменьшил в Photoshop до нужного мне размера и инструментом Hue/Saturation сделал нужный мне цвет - голубой. Но я не могу понять, почему я сам не могу сделать подобное. А так скин почти готов ;)
с остатком, 164/13=12,615. это имеет значение? Матрица ZeoN7 также не делится без остатка и в мануале об этом ни слова. Файлик "time.png" от того же ZeoN7 работает, но сильно большой и его тоже на 13 нельзя делить без остатка.да, это имеет значение! и чем меньше горизонтальный размер - тем более сильной будет ошибка. В вашем случае каждые 2 фрейма вы теряете 1 пиксель. В конце концов вы теряете от 6 до 13 пикселей во всей текстуре. Сделайте текстуру 169 пикс в ширину и у вас всё корректно отобразится
с остатком, 164/13=12,615. это имеет значение? Матрица ZeoN7 также не делится без остатка и в мануале об этом ни слова. Файлик "time.png" от того же ZeoN7 работает, но сильно большой и его тоже на 13 нельзя делить без остатка.Текстуры, которые я постил, делятся на 13...
Текстуры, которые я постил, делятся на 13...все-таки надо делать все в Photoshop.. при экспорте PNG в Corel размеры другие, потому и делилось с остатком, так что прошу прощения за поспешные выводы. Кстати, почему разрешение PNG установлено 96 dpi, если стандартное разрешение рабочего стола 72 dpi? Может, в этом дело.. На скринах один и тот же файл, открытый в CorelDRAW X5 и в Photoshop CS5, отсюда путаница с делением на 13 :)
Tarikне видел пока скинов с таким расположением плейлиста ;D
всю голову обломал над этим вопросом:или 2 или 4 - для методов Kind=Vertical, Kind=Horizontal
сколько кадров должно быть у злемента "Регулятор Баланса"?
всю голову обломал над этим вопросом:Два кадра:
сколько кадров должно быть у злемента "Регулятор Баланса"?
Справка >> пункт 5.12 (правда там про 4 кадра не расписано)
сейчас открыл проект, покопался в нем на свежую голову, и понял где собака зарыта, оказывается дело не в текстуре, а в режиме наложения, вместо Replace отображалось Overlay. Хорошо бы для баланса выставить это значение по умолчанию.
Всем спасибо за ответы, движемся дальше
интересно, как же тогда должна выглядеть текстура баланса при Overlay-наложении?Для всех слайдеров свойства "по умолчанию" одинаковые. Незачем баланс или другие регуляторы выделять как-то особо
Но может быть, есть варианты?боюсь, что нет
боюсь, что нетжаль, конечно... спасибо за ответ
У меня вопросик.. А как сделать чтоб анимация работала только во время проигрывания??Пока нормальным способом никак. Если фон не прозрачный, то поверх анимации можно разместить элемент Player Source: тогда при воспроизведении сквозь прозрачный кадр этого элемента будет отображаться анимация, а если воспроизведение будет остановлено - то непрозрачный кадр Player Source перекроет анимацию. Но если фон полупрозрачный - ничего не получится...
Пока нормальным способом никак. Если фон не прозрачный, то поверх анимации можно разместить элемент Player Source: тогда при воспроизведении сквозь прозрачный кадр этого элемента будет отображаться анимация, а если воспроизведение будет остановлено - то непрозрачный кадр Player Source перекроет анимацию. Но если фон полупрозрачный - ничего не получится...Спасибо! Я понял... А то видел на чужих скинах, а как сделать не догонял... Буду пробовать =)
Как организовать хит-тест маску у полосы прокрутки плейлиста?а зачем она? не могу представить ситуацию...
У элементов ScrollSkinBackground и ScrollSkinThumb она не работает.
Во вложении пример. Если оранжевую зону еще можно обойти, обрезав область ползунка и поставив отдельную текстуру справа от неё, то красную - никак.да лааадно, вам жалко, что список можно будет прокручивать за зону чуть пошире видимой?
У элементов ScrollSkinBackground и ScrollSkinThumb она не работает.У текстур (Main например) тоже есть возможность хит-тест маски, но она не работает, и не должна была работать, так как это фоновые текстуры, так же как и бекграунд полосы прокрутки.
да лааадно, вам жалко, что список можно будет прокручивать за зону чуть пошире видимой?Просто выглядит не очень, когда мышка не над элементом, а он уже подсвечивается :)
Заранее извиняюсь если такой вопрос уже был, поиск ничего не нашел.нельзя
Можно ли восстановить удаленную кнопку или придется заново скин пересобирать?
теоретически можно попробовать сделать так, чтобы плейлист прикреплялся сбоку или даже сверху (решается перемещением текстур MainDock и PlsTopDock).У меня не получилось на версии 3.10. Получается никак нельзя сделать плейлист прикрепляемым сверху?
У меня не получилось на версии 3.10. Получается никак нельзя сделать плейлист прикрепляемым сверху?Не знаю можно ли разместить сверху (теоретически - возможно), но я сделал так, чтобы скин прикреплялся справа.
Ребят, объясните мне пожалуйста что обозначает каждый кадр в Marks у плэйлиста (звездочки, по которым оценивать трэк можно), в справке не нашел :-\1 - Обычное состояние, оценка не выставлена.
1 - Обычное состояние, оценка не выставлена.Спасибо, + ;)
2. - Активное состояние, оценка выставлена.
3. - Этот кадр раньше использовался для отображения при наведении мышки, сейчас не используется. Можно делать, как и второй кадр.
4. - Оценка не доступна (тоже сейчас не используется, я например обычно копирую первый кадр и устанавливаю 50% прозрачности)
Сломал мозг в честь текстовых меток:Так должно быть (в целях совместимости) - если в метке назначен некий шаблон, то при остановке воспроизведения метки исчезнут. Если написать вместо шаблона любой текст - он будет отображаться всегда. Ну а с помощью
%IF(%B,%B (%E),not play)
Хочу, чтобы во время воспроизведения отображались битрейд и расширение, а при "стопе" - надпись "not play". Сейчас при "стопе" просто пустая строка. Помогите, пожалуйста ))
Если не удаётся попасть мышкой в текстуру (слишком мелкая или прозрачная), то можно выделить в дереве, затем переключить фокус на рабочую область (Tab) и двигать курсорными клавишами.
Тут надо подбирать MagnetRectOffset и SizingHitTestAreaSize.
Как сохранить полностью прозрачную картинку?никак
никакМда.. Я думал где-то ошибаюсь, а оказывается это нельзя сделать в принципе :o
делайте 1 прозрачный на 99% пискель и будет окНу остается только так. Спасибо за ответ :)
делайте 1 прозрачный на 99% пискель и будет окМожно попробовать создать один пиксель полупрозрачным
Можно попробовать создать один пиксель полупрозрачнымНу полупрозрачный заметно будет в моем случае, сделал прозрачным на 1 из 255.
В этом году вышла новая версия скинэдитора, но там по-прежнему нет возможности клонирования бегущей строки, а вроде Артём обещал добавить эту возможность, или мне померещилось? Поиск по форуму ничего не дал.Скоро выходить новая версия...
В этом году вышла новая версия скинэдитора, но там по-прежнему нет возможности клонирования бегущей строки, а вроде Артём обещал добавить эту возможность, или мне померещилось? Поиск по форуму ничего не дал.Зачем? Она еще и подтормаживает на больших скинах.
не работает руководство AIMP3SE-ru что делать?Да, иногда появляется такое окно.
Только с этим файлом справки? Переоткрытие справки помогает?С справкой плеера тоже такая история. Английский нормально, с русским такой баг.
понял! Спасибо!!! у тя скинул работает!!! :) буду умничать!Какая версия ОС? В семерке должен стоять патч или обновление (не помню что именно), который должен открывать данный файл.
Какая версия ОС? В семерке должен стоять патч или обновление (не помню что именно), который должен открывать данный файл.
Can someone show me testure and seeting in old pandemic scin for balance slider ? i want to have i like that left/right filling , but all I try i get something more like a volume slider :/To do this, make first frame is not filled, and the second filling and with thee will.
Как добавить/создать кнопку Закрыть?Слов много, а что надо я так и не понял...в главном окне продублируйте кнопку "закрыть" и отправьте в трей, для этого выделите кнопку, затем даблклик по значению свойства Parent и в выпадающем списке выберите в какой контейнер отправить
AIMP SkinEditor v3, открыл готовый скин, чтобы добавить кнопку закрыть для режима Tray Control.
Но не могу понять логику по которой добавляются новые кнопки в скины.
Так как в других скинах кнопка Закрыть есть, попробовал еще скопировать из другого скина: в моем скине создал клон кнопки "Поверх окон" и вставил параметры из кнопки Закрыть другого скина. Не помогло. Я в >:(
Слов много, а что надо я так и не понял...в главном окне продублируйте кнопку "закрыть" и отправьте в трей, для этого выделите кнопку, затем даблклик по значению свойства Parent и в выпадающем списке выберите в какой контейнер отправитьспасибо, помогло. Вопрос был только в первом предложение, поэтому все правильно поняли :).
Все возможные для скинов кнопки доступны в Дереве элементов на закладке Main Window?Все то, что есть в дереве элементов - все будет доступным. Новый элемент можно создать либо склонировав существующий, либо с помощью панели инструментов вверху. Дерево элементов единое для всех закладок.
Для меня это не очевидно, может в FAQ/хелпе об этом написать?
To do this, make first frame is not filled, and the second filling and with thee will.Still didnt work.
xyrax, look this project (http://dl.dropbox.com/u/34209357/AIMP3_SkinProj/Experience_AIO_v1.8.2.acs3proj.7z)
я тупею или SE глючит...Не, не у тебя одного так =)
у меня одного так
я тупею или SE глючит...
иконка режима визуализации постоянно отображается белым квадратом, у меня одного так
я тупею или SE глючит...Не только...
иконка режима визуализации постоянно отображается белым квадратом, у меня одного так
Как я правильно понял, в редакторе сделать не 3 (как сейчас для примера), а больше вкладок, было бы полезно для тестирования скина.
Как я правильно понял...дада, именно...
А если кому-то будет нужно 7 или 10? Тут как бы простая математика - взял ширину ТабКонтрола и поделил на ширину одной вкладкии как добиться, можно ли, а то я никак не врубаюсь?
и как добиться, можно ли, а то я никак не врубаюсь?Никак, так запрограммировано в самом редакторе.
Подскажите, как изменит цвет бегущей строки?Текстуру бегущей строки или цвет текста? Если текстуру, то она рисуется в графическом редакторе, если текста, то открываете SE, нажимаете на бегущую строку, слева, в свойстве Font дабл клик по значению (TFont) и выбираете.
Большущая просьба (Tarik, к тебе, наверное) дополнить старттопик изменениями в редакторе, коих накопилось уже не мало, хотя бы расписать количество кадров для тех текстур, у которых оно изменилось с мелкими пояснениями. Понятно, что всё это где-то есть на форуме, но всё разбросано и найти непросто. Заранее спасибо.имхо, составлять детальный чейнжлог сейчас уже не имеет смысла, да и вспомнить, что было добавлено - проблематично. Поправлять хелп тоже не имеет смысла, так как при выходе нового СЭ придется опять его править. Уж лучше потратить силы на справку к новой версии.
Здравствуйте, не обделите вниманием. У меня два вопроса - 1) Можно сделать так, чтобы окно "tray info" появлялось справа от "tray control"?1. нет
2) Как сделать круглый регулятор баланса? (Какой должен быть градиент и как распологать кадры?)
2) Как сделать круглый регулятор баланса? (Какой должен быть градиент и как распологать кадры?)Делается обычный круглый регулятор, кадров столько, сколько нарисуете, при балансе L=R (50%) будет отображаться кадр, который находится как раз на половине текстуры. В общем, пробуйте и творите.
1. нетЯ курил справку в CE. Сюда люди поэтому и заходят, потому что им может быть что-то не понятно. Спасибо за помощь.
2. курите справку в СЕ
Подскажите пожалуйста у меня сейчас когда жму на плейлист, плейлисты все показывают в верху как на рисунке
как сделать что бы они отображались в нижней части?
Никак, это делается автоматом движком плеера - если список не влезает снизу - он показывается сверхуНе может быть??? только что было наоборот...да у меня и всего то три плейлиста???
Не может быть??? только что было наоборот...да у меня и всего то три плейлиста???Плеер выше поднимите
Плеер выше поднимитеАга, и обновите.
Столько вкусного и всё сразу! Спасибо разработчикам за такой подарок! Будем ждать конца года, вот только пугают, что конец света наступит раньше...Тем кто живет в России он не страшен ;D
А как будет реализовано, это: https://www.aimp.ru/forum/index.php?topic=34718.0
Если раньше каждый элемент, будь то кнопка или текстовая метка, представлял собой конкретную функцию / возможность программы, то теперь любой элемент — это визуализатор данных с обратной связью.В моем представление, это делает тоже самое, что и подразумевали скрипты, может конечно не столько, сколько бы дали скрипты, но все равно предостаточно. Лично для меня достаточно будет анонсированного метода, вместо скриптов.
А скрипты вообще будут? Или анонсированный метод есть альтернатива скриптам?
Теперь возможно будет реализовать регулировку громкости кнопками "Up" "Down"?
Скажите, а в текущей бэте были какие-то изменения скин-движка?были изменения внутренней структуры
Еще вопрос, а нельзя ли будет задавать прозрачность плейлисту?
НетА текстуры для выделенного, не выделенного трека?
текстур в плейлисте пока не будет - слишком тормознуто будет работать, проверялБудем надеяться, что рано или поздно появятся)
скинэдитор 2 уже наверное не в модеэтих точек нет в СЭ2
юзаю 3, но скин от 2-го acs2 и эдитор 2-йв общем, я понял
ну а победить возможно?откройте скин в Редакторе 3-й версии и поправьте цвет
FocusColor
Ну а вообще скрыть эти точки или например сделать их прозрачными - как я понял невозможно, т.е. скинэдитор такой функцией не обладает?так точно
ещё вот что: значёк в трее можно редактировать скинэдитором? 2-м редактором насколько я помню это сделать было невозможно, может в 3-й версии появилась такая возможность? что-то я пока-что не могу найтиоткройте настройки CTRL+P - поищите там
Ну а вообще скрыть эти точки или например сделать их прозрачными - как я понял невозможно, т.е. скинэдитор такой функцией не обладает?Пока нельзя. Для рамки можно установить цвет фона, таким образом ее "скрыв".
как мне сделать горизонтальный спектрум?Спектрум может быть только вертикальный.
Спектрум может быть только вертикальный.:'(
а просто анимированую гифку можно поверх положить?читайте справку, там написано как делать анимацию
Как в ТК поместить элементы Название трека и Исполнитель?Щелкаешь по элементу Text Lbel сверху, размещаешь в ТК, задаешь шаблон (Template) текста %A и %T
Щелкаешь по элементу Text Lbel сверху, размещаешь в ТК, задаешь шаблон (Template) текста %A и %TЗаработало!
http://rghost.ru/42905971.viewнастройки >> Плейлист (настройки отображения) >> разбивать плейлист на группы - уберите галку
как убрать эту штуку?
Можно ли как нибудь разделить текст? Желательно в се. http://rghost.ru/42937618.viewМожно сделать простыми текстовыми метками, но текст будет статичным (не будет "бежать")
То есть,отдельно имя исполнителя,отдельно название песни,время и тд...
объясни,как?пожалуйстаСправка - Свойства элементов - Cвойства элементов управления.
Сейчас вроде как такое не сделать. Возможно ли это будет реализовать в SE 3.50?У контейнеров есть свойство IsActive, которое равно true при наведении мышки на этот контейнер. С этим свойством можно связать Visibility элемента.
Почему у слайдеров в режиме Masked нету зоны растягивания?потому что если слайдер не линейный - его красиво не растянешь
потому что если слайдер не линейный - его красиво не растянешьНу вдруг скинмейкер захочет сделать хитрый овальный слайдер с растягиванием - и никак)
В идеале хотелось бы, чтобы можно было сделать подсвечивающуюся "кнопку"(не меняя курсор), но не нажимающуюся.И добавлю, на всякий случай, еще - чтобы можно было как обычно перемещать за этот "элемент" окно плеера. Ну и зоны растягивания, конечно)
Ну вдруг скинмейкер захочет сделать хитрый овальный слайдер с растягиванием - и никак)не представляю такой слайдер
И добавлю, на всякий случай, еще - чтобы можно было как обычно перемещать за этот "элемент" окно плеера. Ну и зоны растягивания, конечно)всё, что взаимодействует с пользователем, не может быть использовано для таскания окна
У слайдера в режиме Masked нету кадров подсвеченного состояния?нет
Как сделать так, чтобы при развернутом на весь экран режиме кадр текстуры контейнера переключался на другой?всё верно сделал
Пробовал соединять сервис Maximize провайдера AIMPMainForm с точкой доступа State контейнера. Без результатов.
Как разобрать с текстурой Sources? Сколько кадров нужно? Что -то у меня не получается...Справка \ Структура скина \ Элементы управления \ Цифровое табло \ Пример: Источник
Справка \ Структура скина \ Элементы управления \ Цифровое табло \ Пример: ИсточникСпасибо! Вот почему у меня не получилось. Я думал что текстуру для СД уже убрали...
Спасибо! Вот почему у меня не получилось. Я думал что текстуру для СД уже убрали...она не будет отображаться, поэтому её можно не рисовать, но место для неё должно быть
Плейлист растягивается в высоту только если у области растягивания плейлиста стоит значение laClient в Alingment?В твоем вопросе уже есть ответ ;)
В твоем вопросе уже есть ответ ;)А всё, вроде понял, надо контейнеры по группам раскидать, потом попробую.
А всё, вроде понял, надо контейнеры по группам раскидать, потом попробую.Начал пробовать, и не могу понять, как создать группу? В справке не нашел.
Начал пробовать, и не могу понять, как создать группу? В справке не нашел.
Чтобы создать новый элемент фона, необходимо выбрать в контекстном меню родительского фонового элемента "Новый пункт: контейнер/текстура" или "Новый подпункт: контейнер/текстура/многостраничная группа". В первом случае будет создана группа с родительским и новосозданным элементом, которые будут располагаться на одном уровне относительно друг друга. Во втором случае – будет создан дочерний элемент.В последствии можно удалить новосозданный элемент (группа останется).
Почему нет возможность дублирование конт. плейлиста?100 раз спрашивалось
100 раз спрашивалось
Технические ограничения
И это не контейнер, это элемент "плейлист"
Почему невозможно перетащить контейнеры из одного окна в другой?можно
можно
но нужно тащить контейнер не в окно
нужно тащить контейнер в другой контейнер
Почему так? Это заставляет заблуждаться.
Откуда брать состояние дисплея визуализации?нет таких данных
Нужно чтобы кнопка показывалась тогда, когда визуализация включена.
в СЭ изменено настройки конт. меню. Теперь можно ли увеличить размер пунктов/шрифтов?
как сделать что бы у полосы времени впереди шел ползунок?А вы задавали текстуру для SkinThumb?
http://s59.radikal.ru/i166/1303/61/0f4416f9162f.png примерно так
Народ,а как в скине A-Graph (ver 1.0) в Tray Control сделано что под музыку мигает область отображающая длительность трэка ? я думал там просто анимация,оказалось что мигает только под музыку...есть мысль,что это как то сделали из спектрума,но все равно сомневаюсь...
Скорее в виде LevelGauge-а, а не спектрума, спектрум для этого тяжеловатLevelGauge-а а это что???первый раз такое вижу((((
LevelGauge-а а это что???первый раз такое вижу((((Это обычный индикатор уровня сигнала (обычно в трей-контролах это те полосочки, которые, эм, туда-сюда прыгают =) )
Это скорее всего заглючившееся поле быстрого поиска (судя по свойствам).Оно даже не заглючило. Просто вышло за пределы окон и контейнеров
Оно даже не заглючило. Просто вышло за пределы окон и контейнеровв общем да, при удалении всех контейнеров и окон у плейлиста и быстрого поиска просто иконка элемента в дереве меняется.
Это скорее всего заглючившееся поле быстрого поиска (судя по свойствам).Ага, оно. Если в SE 3.00.330 RC1 у элемента Editor: Quick Search нет текстуры, то при открытии скина в SE 3.50 появляется неудаляемая многостраничная группа PlaylistSearch.
Почему в SE 3.50 нельзя его удалить?Потому что быстрый поиск и элемент плейлиста неудаляемы.
P.S. Ещё заметил - надписи "Элементы Фона" и "Элементы управления".Это не в эту тему.
Как сделать зеркальный регулятор баланса? Вертикальный для левый канал, ре-вертикальный для правый...это не верно!
это не верно!Оу! Извините... Не так объяснил.
вниз должен идти левый канал, а вверх правый
наклон всегда идёт против часовой стрелки
По идее, должно было бы работать выражение 100-Value, но оно не работает. Да оно и не нужно, причины выше
если изменить баланс на Right 100, ползунок баланса для правого канала будет верху, а ползунок для левого канала будет внизу... Вот теперь вродепонятно объяснил (у меня два регулятора, для левый и правый)Решил с Masked-регулятором.
Решил с Masked-регулятором.блин, точно, простое решение
блин, точно, простое решениея сам тоже восторге ;D
Помогите разобраться с обложкой , Denon Classic Style , а именно с тем сендвичем который находится под крышкой подкассетника. пока рассматриваю перемещение плёнки SeekBar. PopupMenu - pmJump , Skin задал, SeeBar-Action-Action-prvPlayerState , делал (круглый) покадрово как горизонтально, так и вертикально (20 кадров без последнего градиента) указывал коллтчество кадров. Может ошибка в связях, или необходимо создать дополнительные? Белиберда получается, перемещение по теку происходит, визуально нетЧитайте справку. Там есть примеры связей для прогресс-бара
Нет уверенности в правильном направлении иду я, всмысле там ищу ошибку? Изменение размера катушки-покадровое и в связях не уверен SeeBar-Action-Action-prvPlayerState или что-то ещё нужно добавлять, или перенаправлять ?скиньте проект
В смысле, градиентно заполненная, в конце ?да
А переход тогда от краёв (темнее) к центру (светлее) ?смотря как вы собираетесь регулировать: по кругу или от центра к краю
Да не просто регулировать , а будет отображение заполнения кассеты с возможностью перемещения по треку (как в оригинале)Написал в личку, продублирую здесь
Помогите разобраться с обложкой , Denon Classic Style , а именно с тем сендвичем который находится под крышкой подкассетникаНикакого сэндвича там нет. В сикбаре Denon’a фактически перемещается зазор между рулонами, т.е. один кадр соответствует изображению окна кассеты. Маска же представляет линейный градиент от белого к чёрному слева направо. Связи у Вас указаны верно.
Никакого сэндвича там нет. В сикбаре Denon’a фактически перемещается зазор между рулонами, т.е. один кадр соответствует изображению окна кассеты. Маска же представляет линейный градиент от белого к чёрному слева направо. Связи у Вас указаны верно.
Так понял, просто работал не с тем элементом, надо было TASESliderMaskedДа, это для сикбара. А вращающиеся бобышки - аниматоры TASEAnimator. А сам корпус кассеты - TASEDigitsDisplay. Вот из этих трёх составляющих точно сэндвич получается...
А что именно изменилось в СЭ? В плеере нововведений много, а в СЭ?
AIMP3: Skin Editor v3.55 Build 587 (12.09.2013)
===============================================
* Редактор: Удалены провайдеры для Каталога Интернет радиостанций
Как вывести в Hint кнопки произвольный текст?https://www.aimp.ru/forum/index.php?topic=28070.0
Подскажите как правильно в биндинге связать кнопку acPlayerStop и acMainOpenFiles?нужно 2 кнопки одна поверх другой
так чтобы после остановки кнопку можно было использовать как открытие файлов
первая - отвечает за стоп и скрывается, если плеер остановленА как это сделать? уже всё перепробовал
А как это сделать? уже всё перепробовалКнопка Экшен связывается с acPlayerStop
Можно ли окуда-нибудь снять сигнал длительного нажатия кнопки перемотки?Что-то не понял вопроса ::) Что нужно сделать?
Можно ли окуда-нибудь снять сигнал длительного нажатия кнопки перемотки?actiononhold
Что-то не понял вопроса ::) Что нужно сделать?Функция ускоренной перемотки реализована связью между ActionOnHold соответствующей кнопки и Action acPlayerSeek..... Но. Хотелось бы реализовать "индикацию" режима. Например, ускоренным вращением бобин катушечника, или бобышек - кассетника (да просто светодиодом). Однако ни на связке ActionOnHold & Action, ни на State Action acPlayerSeek... данные не меняются. Пробовал снимать и в TextDisplay, и DigitsDisplay.
Функция ускоренной перемотки реализована связью между ActionOnHold соответствующей кнопки и Action acPlayerSeek..... Но. Хотелось бы реализовать "индикацию" режима. Например, ускоренным вращением бобин катушечника, или бобышек - кассетника (да просто светодиодом). Однако ни на связке ActionOnHold & Action, ни на State Action acPlayerSeek... данные не меняются. Пробовал снимать и в TextDisplay, и DigitsDisplay.сейчас такое невозможно
сейчас такое невозможноНо State на acPlayerSeek... свободен, почему он не меняет своё состояние?
кнопка не может передавать своё состояние двум провайдерам
Но State на acPlayerSeek... свободен, почему он не меняет своё состояние?у acPlayerSeek нет State, т.к.
у acPlayerSeek нет State, т.к.
State имеют провайдеры, меняющие своё состояние на долгое время, сохраняющееся даже при отпускании кнопки
например, вкл/выкл шаффла и т.п.
Я в курсе, что формально State есть везде, но не везде он работает. Выше я описал ситуации, когда State работаетНо почему бы не задействовать State для PlayerSeek...? Никаких особых противоречий я здесь не вижу. Длительное нажатие - чем не длительное действие (правда, только при нажатии)? А так получается State-обманка...
Но почему бы не задействовать State для PlayerSeek...? Никаких особых противоречий я здесь не вижу. Длительное нажатие - чем не длительное действие (правда, только при нажатии)? А так получается State-обманка...А что State должен в этом случае возвращать?
Но почему бы не задействовать State для PlayerSeek...? Никаких особых противоречий я здесь не вижу. Длительное нажатие - чем не длительное действие (правда, только при нажатии)? А так получается State-обманка...потому что за передачу и обработку нажатия отвечает не State, а Action
А что State должен в этом случае возвращать?видимо, Hi-z =) ( не путать с хз )))
К чему привязывать "MainDock"?О какой статье в справке идёт речь?
В справке показано, что к точке доступа Docked провайдера PlaylistFrame, но тогда если плейлист склеен с главным окном и скрыт, MainDock остаётся скрытым (Параметры связи - NOT Value). Это правильно, ведь Docked возвращает 1, потому что плейлист хоть и скрыт, но склеен с главным окном.
Открыл старый скин, созданный в SE 3.00 - там автоконвертированием связь устанавливается с точкой доступа Visibility провайдера PlaylistFrameSite. И работает правильно.
Так получается в справке в примере показано неправильно?
О какой статье в справке идёт речь?Да, и способ 1 тоже.
"Управление видимостью элементов фона (Способ 2)" ?
Можно-ли как-нибудь вытащить это меню целиком? чтобы выскакивало ПКМ по кнопкеНет, это меню отображается только для дисплея визуализации.
оно вылазит целиком у дисплея визуализацииУже глядел и делал, вылезают только обложки
вот и глянь какие там связи и PopupMenu - так же делай у кнопки
Нет, это меню отображается только для дисплея визуализации.Спасибо, жаль
Другой вопрос: Можно-ли сделать чтобы кнопка показывалась при наведении в область визуализации?При наведении на всю область дисплея визуализации? Тогда нужно добавить контейнер, вложить в него дисплей визуализации и кнопки, а кнопки уже связывать с IsActive контейнера. Контейнеру достаточно будет настроить Margin-ы под размеры того контейнера.
Пробовал кидать TASEButton-Visibility нa prvVisual-DisplayValue неработает и NOT Value тоже, что я не так делаю?
При наведении на всю область дисплея визуализации? Тогда нужно добавить контейнер, вложить в него дисплей визуализации и кнопки, а кнопки уже связывать с IsActive контейнера.Tarik Спасибо, попробую.
Уже глядел и делал, вылезают только обложкиСпасибо, жаль
Для чего вы хотите показать целиком меню?Хотел сделать две кнопки VisualPrev и VisualNext, с прозрачным 1 слоем, полностью закрывающим дисплей визуализации и при этом оставить доступ к этому меню.
Подскажите пожалуйста: Как сделать кнопку, сброса настроек эквалайзера? - что-то я такой провайдер не найду...нет такой
Помогите новичку уменьшить размер скина "denon_classic_style" ,но он для Full HD. Скачал последний редактор но он не видит сам скин чтобы закинуть и попробовать что-то с ним сделать.У меня небольшое разрешение монитора 1024х768 и скин на работает но так что больше самого экрана.Помогите разобраться!Редактор не редактирует готовые скины
Если переделать нельзя-может возможно в редакторе создать по новому такой же?Как бы, автор скина смог, значит это возможно ;) Зависит от желания и умений
Помогите новичку уменьшить размер скина "denon_classic_style" ,но он для Full HD. Скачал последний редактор но он не видит сам скин чтобы закинуть и попробовать что-то с ним сделать.У меня небольшое разрешение монитора 1024х768 и скин на работает но так что больше самого экрана.Помогите разобраться!Скины от АИМП3 нельзя редактировать, для этого нужен файл проекта.
Если переделать нельзя-может возможно в редакторе создать по новому такой же?Рисуйте все заново, затем собирайте в редакторе...
Товарищи, а можно как нибудь привязать какое нибудь действие на средний клик мыши?Нет.
В свойствах DigitsDisplay декларируется возможность вывода значения в виде текста в текстовых метках, однако нет примера, и мне с наскока впихнуть текст туда не удалось. Можно пример?не текста, а цифровых значений
не текста, а цифровых значенийЦитирую:
открой Справку \ Цифровое табло (не примеры, а общее описание)
Цитирую:Там общие слова, относящиеся не к TASEDigitDisplay или TASETimeDisplay как элементу управления, а к DisplayValue, как к точке доступа
Принимает данные для отображения значения. Позволяет выводить числовые значения на элементы TASEDigitDisplay (целые значения, такие как битрейт, кол-во треков в плейлисте и т.п.) и TASETimeDisplay (значения времени, например, продолжительность трека, продолжительность плейлиста, время планировщика, системное время и т.п.); значения в виде текста в текстовых метках, выводить обложку альбома в ковер-артах, визуализировать данные с помощью спектрумов/дисплеев визуализаций/индикаторов уровней.
Или я чего-то недопонимаю, либо в справке ошибка...
Принимает данные для отображения значения. Позволяет выводить числовые значения на элементы TASEDigitDisplay (целые значения, такие как битрейт, кол-во треков в плейлисте и т.п.) и TASETimeDisplay (значения времени, например, продолжительность трека, продолжительность плейлиста, время планировщика, системное время и т.п.)
Там общие слова, относящиеся не к TASEDigitDisplay или TASETimeDisplay как элементу управления, а к DisplayValue, как к точке доступаСпасибо. Понятно. И всё же, для избежания недоразумений, можно было бы и подкорректировать описание точек доступа в соответствии с конкретными провайдерами...
Вопрос ... Можно ли в SkinEditor сделать спектрум зеркальным то есть чтоб он был не слева направо как на снимке моего экрана, а наоборот справа налево?Спектрум можно сделать зеркальным только по вертикали.
Ребята помогите не могу задать значение плавного перехода на кнопку, только выдает dsp менеджера как называется а мне нужен плавный переход микширование перехода???
Ребята помогите не могу задать значение плавного перехода на кнопку, только выдает dsp менеджера как называется а мне нужен плавный переход микширование перехода???Возможность включать переходы и т.д. отсутствует
Простите, что ?Простите очень хочется кнопку плавного перехода на плеер поставить. а таких значений нет есть только менеджер эффектов а мне нужна кнопка которая оперативно отключает и включает этот режим...задал определенные настройки и все остается кнопку поставить автоматического плавного перехода...
Возможность включать переходы и т.д. отсутствуеточень жаль :'( :'( :'(
Можно сделать лишь кнопку открытия менеджера эффектов на вкладке параметров сведения
Народ! можно-ли откуда-нибудь снять информацию о файле, выделенного в плейлисте трека (во время остановки)?F4
F4Soolo Я про скин едитор ;) какой провайдер?
Soolo Я про скин едитор ;) какой провайдер?QTE набери в поиске
QTE набери в поискеУже набирал нашёл acPlaylistFocusedItemShowQTE но ничего не получается
Хочу чтобы моё QFI отображало информацию о выделенном треки во время остановки трекасобственно, с этого и нужно было начинать
собственно, с этого и нужно было начинатьПрости, думал что всё понятно описал.
насколько знаю, такой возможности нет, да и незачем она по большому счёту
Есть ли возможность вывести информацию по выделенному файлу в плейлисте? Именно по выделенному, по аналогии, так же как и по проигрываемому в данный момент треку.К сожалению, такого нет
То есть меня интересует, есть ли функция аналогичная prQFI для выделенного трека.
К сожалению, такого нетСпасибо за ответ.
Помогите пожалуйста решить проблему.причина может быть в чем угодно
Когда я прикрепляю блок плейлиста к плееру, то у плейлиста теряется возможность увеличения размера по вертикали. На схеме все показано.
причина может быть в чем угодноСкинул вам в личку
скидывайте проект скина
Скинул вам в личку_pyalistframe (место прикрепления плейлиста) в главном окне должно иметь возможность расширяться, для этого его привязка должна быть laClient
У меня возникло два вопроса:
1) Я так понимаю, длина контекстного меню зависти от вышины основной текстуры конт.меню и вышины разделителя, но по какой формуле происходит расчёт, я не смог понять. Подскажите, какая точная зависимость.
3) Можно ли где-нибудь посмотреть "легенду"/описание всех иконок контекстного меню?
1) Определитесь, что вы имеете в виду - длину/ширину/высоту ::)
Ширина конт. меню зависит от длины текста самого длинного пункта меню в плеере.
3) В этом разделе есть прикреплена тема (https://www.aimp.ru/forum/index.php?topic=34198.0)
подскажите пожалуста как сделать такой переключатель,напишите конкретнее, что именно нужно: какие операции вы планируете на положение 1 и на положение 2
чтоб в положении 1 выполнялась одна команда
в положении 2 - вторая
а в положении 0 выключалась любая
какой элемент можно использовать?
подскажите пожалуста как сделать такой переключатель,Если коротко - то нужно использовать пользовательский провайдер LogicalOperatorCounter.
чтоб в положении 1 выполнялась одна команда
в положении 2 - вторая
а в положении 0 выключалась любая
какой элемент можно использовать?
Ребят, может, кто разбирается в новом редакторе скинов, видео запилит по нему. Че да как, структура скина, связи и т.д. Желательно создание с нуля с подробным объяснением шагов, созданием основних элекментов и общей идеологией создания скинов в нем вообще.Возможностей слишком много, чтобы видео про это снимать, да и не каждый на это способен даже при идеальном знании скинэдитора. Да и сама работа в скинэдиторе - это тыкать мышью в нужные кнопки и делать правильные связи - а это необходимо пояснение на словах, либо текст.
Справку читать больно уж утомительно, да и порой больше возникает вопросов, чем ответов.
А то решил тут небольшой проектик попробовать, а тут сразу вникнуть во весь этот функционал не получается.
да и порой больше возникает вопросов, чем ответов.
В каких случаях? Можете привести примеры? Я доделаю справку.
В каких случаях? Можете привести примеры? Я доделаю справку.Да уверен некоторые вопросы становятся ясными при дальнейшем чтении, просто я тока начал ее изучать и сразу вникнуть сложно. Ну и потихоньку грызу сам скинэдитор со скинами, становится потихоньку ясно.
И есть не большой вопрос про самоскрывающиеся панели.Сложно понять на словах, о чем речь. Вообще, можно делать несколько client-контейнеров, по бокам от центрального, и они будут тоже растягиваться.
Сейчас они обязательно должны быть "не клиентом", тогда как только клиент тянется. То есть отсутствует возможность центрировать скрывающуюся панель. Нельзя ли тут что-то усовершенствовать? Например сделать так, чтобы и боковые панели можно было тянуть, и к ним уже делать привязку центральной скрывающейся панели. Или это можно реализовать как-то через счётчики, т.е. когда величина какой-то панели станет такой-то будут произведены определённые действия.
И есть не большой вопрос про самоскрывающиеся панели.Пока что я ничего не понял с ваших слов.
Сейчас они обязательно должны быть "не клиентом", тогда как только клиент тянется. То есть отсутствует возможность центрировать скрывающуюся панель. Нельзя ли тут что-то усовершенствовать? Например сделать так, чтобы и боковые панели можно было тянуть, и к ним уже делать привязку центральной скрывающейся панели. Или это можно реализовать как-то через счётчики, т.е. когда величина какой-то панели станет такой-то будут произведены определённые действия.
Сложно понять на словах, о чем речь. Вообще, можно делать несколько client-контейнеров, по бокам от центрального, и они будут тоже растягиваться.
Дело в том, что такой контейнер не будет работать с функцией Autohide.это и сейчас возможно, нужно лишь промоделировать ситуацию в соответствии с правилами Autohide
То есть нет, по крайней мере прямой возможности, сделать, чтобы 2 контейнера равномерно растягивались, а при достижении их предком указанных размеров, между этими контейнерами точно по центру появился ещё один контейнер, и оставался посредине, как бы мы дальше не растягивали первые два контейнера.
Пока что я ничего не понял с ваших слов.
Но
Если что-то не понятно: создаёте тему в этом разделе с описанием того, что не ясно, и я понимаю, что пора сделать новый пример в справке.
Таким образом уже несколько раз справка дополнялась новыми примерами, которых не было изначально.
это и сейчас возможно, нужно лишь промоделировать ситуацию в соответствии с правилами AutohideНу, возможно я чего не допетрил, но в последнем своей обложке пришлось использовать 2 контейнера вместо запланированного одного, поскольку функция Autohide требует расположение "верх, низ, право, лево", но никак не "клиент".
Вот для этого хотя бы один пример не помешал бы, мне так кажется.в справке есть пример
в справке есть примерПардон! Точно про кнопку-переключатель. Я такую делал, но тупо всё переписал из справки, а принцип работы не понял. Вот оно теперь ко мне и привязалось.
справка \ структура скина \ редактор пользовательских провайдеров
Ну, возможно я чего не допетрил, но в последнем своей обложке пришлось использовать 2 контейнера вместо запланированного одного, поскольку функция Autohide требует расположение "верх, низ, право, лево", но никак не "клиент".нужно использовать промежуточный пустой контейнер (или несколько контейнеров) для этих целей
нужно использовать промежуточный пустой контейнер (или несколько контейнеров) для этих целейСпасибо сейчас гляну.
пример https://www.aimp.ru/index.php?do=catalog&rec_id=384 (трей контрол)
Спасибо сейчас гляну.невидимый нулевой контейнор ничего не раздваигает
Я и использовал промежуточный пустой контейнер, но он в любом случае при растягивании будет раздвигать центр.
невидимый нулевой контейнор ничего не раздваигаетВ таком случае за счёт чего будет тянуться предок, ведь от него зависит Порог Скрытия?
В таком случае за счёт чего будет тянуться предок, ведь от него зависит Порог Скрытия?1. Проект ВКонтекте в теме со скином (кнопка "обсудить")А в этом скине, что появляется? Он у меня только вниз тянется.Вижу. Но здесь тянется только правая часть, левая часть имеет положение laLeft и не может тянуться. А здесь это просто. А вот как сделать, чтобы и слева, и справа растягивалось, а контейнер появлялся точно в середине и там оставался, никуда не уползая? ???
Посмотреть бы проект, как там что и куда привязано - действительно здорово сделано.
1. Проект ВКонтекте в теме со скином (кнопка "обсудить")Спасибо! Буду изучать.
2. Изучите прикреплённый проект (TC)
3. В справку я этого добавлять не буду: не считаю часто используемой фичей
Как сделать шестикадровые кнопки "Пауза", "Пуск", "Стоп"? В State надо что-то прописать?некорректный вопрос
некорректный вопросМне нужны обычные кнопки Пауза (acPlayerPause), Пуск (acPlayerPlay), Стоп (acPlayerStop) с набором из шести кадров, работающими по принципу Stay On Top например. Не знаю сколько там может быть функций (да и нужны ли они) у этих кнопок кроме тех, для которых они предназначены. Связь State<>State не работает для этих кнопок как у той же Stay On Top, работают как 4-ех кадровые при заданной текстуре в 6 кадров.
6 кадров на одну функцию? или 6 кадров на 3 функции в одной кнопке?
Есть возможность сделать 6 кадров кнопки "пуск/пауза": делается точно так же как и 8-и кадровая (пример в справке, так же можно посмотреть связи этой кнопки в скине по умолчанию).
Попробуй текстуру сделать из 8 кадров. Состояние передавай от prvPlayerState.Спасибо) +1
P.S. Сделал пример.
Попробуй текстуру сделать из 8 кадров. Состояние передавай от prvPlayerState.Шесть кадров тоже работают. Все дело в связях.
Можно вывести информацию "Source" через текстовую метку? Шаблон для этого есть?а подробнее? что именно нужно?
Можно вывести информацию "Source" через текстовую метку? Шаблон для этого есть?
Я имел в виду вывести в текстовом виде, как расширение (%E), или кол. каналов (%С).Source - это просто числовое уведомление того, играет радио или локальный трек. Естественно провайдер будет возвращать числовое значение и чтобы вывести текст, проще сделать две текстовых метки с текстом, и одну отображать тогда, когда играет радио, а вторую - когда трек (прописать в настройках связи Visibility текстовой метки и Source провадера что-то вроде Value = 0 для первой метки Value = 2 для второй). Пример в справке, ЕМНИП, вроде есть.
Как сделать 3-ёх позиционный переключатель, работающий в режиме 1>2>3>2>1, т.е. переключающий контейнеры не по кругу, а туда-обратно?Для этого лучше сделать отдельные кнопки, каждая из которых будет отвечать за видимость своего контейнера (или элемента). Пример есть в справке.
Как сделать 3-ёх позиционный переключатель, работающий в режиме 1>2>3>2>1, т.е. переключающий контейнеры не по кругу, а туда-обратно?Если кнопка переключает видимость элементов через провайдер-счётчик, то в провайдере задать 4 значения.
Source - это просто числовое уведомление того, играет радио или локальный трек. Естественно провайдер будет возвращать числовое значение и чтобы вывести текст, проще сделать две текстовых метки с текстом, и одну отображать тогда, когда играет радио, а вторую - когда трек (прописать в настройках связи Visibility текстовой метки и Source провадера что-то вроде Value = 0 для первой метки Value = 2 для второй). Пример в справке, ЕМНИП, вроде есть.Я понял. Спасибо.
Если кнопка переключает видимость элементов через провайдер-счётчик, то в провайдере задать 4 значения.Не знаю правильно ли я все понял. Сначала попробовал с тремя контейнерами. Прописал у второго в связях значение Value=1 AND 3 - не работает.
Тогда: 1-ый элемент будет виден когда значение провайдера = 0
2-ой когда значение = 1 или 3
3-ий значение = 2
Кнопка будет 12-кадровой по 3 кадра на положение,а 2 и 4 положения будут одинаковы. Так получится как бы переключение в одну сторону и затем обратно
Не знаю правильно ли я все понял. Сначала попробовал с тремя контейнерами. Прописал у второго в связях значение Value=1 AND 3 - не работает.
Надо не AND , а OROR тоже пробовал.
И кнопки зачем делать 4 кадр ( недоступно)Не 4-ый кадр, а 4-ый набор кадров для 4-ого (оно же 2-ое) состояния.
Не 4-ый кадр, а 4-ый набор кадров для 4-ого (оно же 2-ое) состояния.
Можно 4 набора по 3 состояния сделать и получается 12Можно. Сделай наглядный пример, всем полезно будет.
В связях надо прописать Value=1 OR Value=3Я понял почему у меня не получилось. Я пробовал вот так - Value=1 AND Value=3 - не заработало, потом вот так - Value=1 OR 3 - тоже не сработало.
Можно. Сделай наглядный пример, всем полезно будет.Вот. Зачем делать 4ое сотояние, если кнопка будет всегда доступна.
Вот. Зачем делать 4ое сотояние, если кнопка будет всегда доступна.Делать 4 состояние нужно, иначе скин-движок будет считать, что это текстура с двумя наборами кадров, а не тремя.
Вот. Зачем делать 4ое сотояние, если кнопка будет всегда доступна.Не работают 12 кадров, только 16. Вчера собрал - работает как надо! Держи второй +1.
ЗЫ. Вот тестовый проект (для отображения состояния кнопки используется выражение if(value=3, 1, value). Это же выражение можно будет использовать для выбора контейнера из многостраничной группы или для других целей).+1
Народ! можно ли как-нибудь сделать чтобы текстовая надпись временно пропадала при изменении громкости, баланса или др. ползунков?Нет, нельзя.
У меня в бегущей строке текстовая кнопка для открытия QTA во время остановки воспроизведения, и когда меняешь громкость выглядит непрезентабельно.
Народ! можно ли как-нибудь сделать чтобы текстовая надпись временно пропадала при изменении громкости, баланса или др. ползунков?можно
У меня в бегущей строке текстовая кнопка для открытия QTA во время остановки воспроизведения, и когда меняешь громкость выглядит непрезентабельно.
можноЭто у меня и так работает, мне нужно чтобы текст громкости не наслаивался на текст кнопки
свойство Visibility бег.строки связать с prvPlayerState и прятать ее в режиме СТОП
а кнопку наоборот - показывать
Нет, нельзя.Спасибо, скорее всего так и есть. пытался привязать к volume но не вышло.
Это у меня и так работает, мне нужно чтобы текст громкости не наслаивался на текст кнопкину а так чем не устраивает ? (см.влож)
ну а так чем не устраивает ? (см.влож)Спасибо за помощь, но это всё костыли...
ну не будет индикации громкости только в режиме СТОП, можно вывести с помощью DigitsDisplay.
фон под бег.строкой только надо восстановить, а саму сделать прозрачной.
Как можно обнулить несколько счётчиков нажатием одной кнопки?К сожалению, нельзя. Думаю, стоит создать тему с предложением от добавлении такой возможности
Напрямую Action кнопки и несколько точек доступа Position счётчиков не связываются.
К сожалению, нельзя. Думаю, стоит создать тему с предложением от добавлении такой возможностиСоздал - https://www.aimp.ru/forum/index.php?topic=43971.0 (https://www.aimp.ru/forum/index.php?topic=43971.0).
Как сделать кнопку выполняющую следующие 2 действия:Суть проблемы та же, что и предыдущее твое сообщение о сбросе всех счетчиков - нужно на одну кнопку вешать несколько обработчиков (связывать action с несколькими точками доступа).
- открывает окно;
- выбирает в этом окне определённый контейнер в многостраничной группе?
Суть проблемы та же, что и предыдущее твое сообщение о сбросе всех счетчиков - нужно на одну кнопку вешать несколько обработчиков (связывать action с несколькими точками доступа).Агась.
Пример с настроенным окном эквалайзера во вложенииТолько вот, если страница выбрана отличная от второй, то кнопка открытия/закрытия эквалайзера сначала устанавливает вторую страницу, и только на следующее нажатие закрывает эквалайзер.
Tarik, как всегда, развёрнуто и с примером, спасибо, плюсую) (сегодня, оказывается, уже ставил плюс)Зато я не ставил. +1
Только вот, если страница выбрана отличная от второй, то кнопка открытия/закрытия эквалайзера сначала устанавливает вторую страницу, и только на следующее нажатие закрывает эквалайзер.Упс, точно, ведь еще думал, что-то там не то) Нужно такое выражение написать: if(value = 0, 2, 0)
Упс, точно, ведь еще думал, что-то там не то) Нужно такое выражение написать: if(value = 0, 2, 0)Точно, спасибо, теперь работает так, как и хотелось.
Есть треклист и вокруг него четыре плейлистана мой взгляд - это перебор
на мой взгляд - это перебор
Перебор в том, что использую четыре контейнера и так делать не стоит?Гибкость - это хорошо, но делать аж 4 варианта... Всё-равно все комбинации сложно будет сделать, ведь есть ещё главное окно, эквалайзер, кнопки управления: кому-то удобно справа, кому-то слева, кому-то по центру, всем угодить тяжело будет ;)
Есть треклист и вокруг него четыре плейлиста
Можно как-нибудь сделать чтобы была возможность таскать плеер за дисплей визуализации во время показа визуализации?Только если отключить хит тест маску, но тогда дисплей никак не будет доступен для мышки
Только если отключить хит тест маску, но тогда дисплей никак не будет доступен для мышкиМожно сделать недоступность для мыши, тогда мышь будет цеплятся за фоновую текстуру, но стоит включить визуализацию и такая возможность пропадает.
Я думаю, что можно попробовать (если так можно) сделать сверху текстуру прозрачную (-1 пиксель) за которую можно будет таскать плеер, а на ПКМ привязать меню визуализацииЯ так и хотел сделать, но оказалось что за текстовую метку таскать нельзя. Может с прозрачным дисплеем ковера без биндинга прокатит.
... Может с прозрачным дисплеем ковера без биндинга прокатит.Не прокатило.
Я так и хотел сделать, но оказалось что за текстовую метку таскать нельзя. Может с прозрачным дисплеем ковера без биндинга прокатит.Не текстовую метку, а полупрозрачную текстуру, которую можно навесить хоть на кнопку без биндингов, хоть на дигитдисплей...
Не текстовую метку, а полупрозрачную текстуру, которую можно навесить хоть на кнопку без биндингов, хоть на дигитдисплей...И куда я эту текстуру должен засунуть, если не в текстовую метку, кнопку или дигитдисплей? Ни за один из этих элементов нельзя таскать плеер, хоть с текстурой, хоть без текстуры.
И куда я эту текстуру должен засунуть, если не в текстовую метку, кнопку или дигитдисплей? Ни за один из этих элементов нельзя таскать плеер, хоть с текстурой, хоть без текстуры.Прошу прощения, всё не так...
Прошу прощения, всё не так...Извини McClaud, я не понял, какие такие связи должны быть у этого контейнера (с окном?).::) Если не трудно, можно наглядный пример сделать?
Помещаем визуалку в контейнер, текстуру визуалки делаем недоступной для мыши. Разумеется, окно, к которому будет привязан этот контейнер должно иметь возможность свободного перемещения (как то - главное окно, плейлист...). Есть проблемы по позиционированию с другими контейнерами, но это преодолимо.
Можно сделать недоступность для мыши, тогда мышь будет цеплятся за фоновую текстуру, но стоит включить визуализацию и такая возможность пропадает.
Извини McClaud, я не понял, какие такие связи должны быть у этого контейнера (с окном?).::) Если не трудно, можно наглядный пример сделать?В процессе эксперимента выяснилась одна особенность - контейнер должен иметь почти прозрачную текстуру, без этого не получается, сама же визуалка может быть вообще без текстуры. Примеры прикладываю.
В процессе эксперимента выяснилась одна особенность - контейнер должен иметь почти прозрачную текстуру, без этого не получается, сама же визуалка может быть вообще без текстуры. Примеры прикладываю.Спасибо конечно за науку, может пригодится +1. Но в моем случае это не выход, так как у меня над дисплеями находятся кнопки, а в этот контейнер их уже не засунешь. Они будут видны, но доступа к ним не будет.
Спасибо конечно за науку, может пригодится +1. Но в моем случае это не выход, так как у меня над дисплеями находятся кнопки, а в этот контейнер их уже не засунешь. Они будут видны, но доступа к ним не будет.В плоскости визуалки не получится, кнопки либо будут видны и недоступны, либо визуалка будет их перекрывать. Надо ещё что-то мудрить...
Кстати, текстуру у этого контейнера лучше делать не 1Х1 пкс., а соответствующего размера с одним пикселем 1% непрозр., тогда тормозов нету в редакторе при включении имитации визуалок.Пример сварганил на скорую руку, но буду иметь ввиду.
Ты имеешь в виду курсор в виде руки?Да.
Хочу переделать скиин формата *.acs3 , а его нет в списке форматов но есть *.acs3proj . Что делать?Искать/просить файл проекта данного скина.
Искать/просить файл проекта данного скина.Блин. Хотел скин отредактировать просто.
Блин. Хотел скин отредактировать просто.Просто уже нельзя.
Редактор скинов работает с файлами проектов скинов как от AIMP2 (*.acs2), так и от AIMP3 (*.acs3proj).
Файл проекта отличается от файла скина тем, что хранит в себе дополнительную информацию, нужную только для редактирования и извлечения текстур.
Какое максимальное значение Level может передавать prvVisual для Gauge?Легко может перевалить за несколько сотен.
Может ли оно превышать значение 100, если задран Preamp в эквалайзере?
Вопрос к тому, какое разумное число кадров нужно для Gauge.От 20-ти и чем больше, тем плавнее будет анимация. Но делать больше 100 кадров, имхо, не разумно.
Легко может перевалить за несколько сотен.+15 dB в Preamp'e это примерно 5,6 раза. Тогда получается, что значение Level может достигать 560, а при использовании эквалайзера и более?
+15 dB в Preamp'e это примерно 5,6 раза. Тогда получается, что значение Level может достигать 560, а при использовании эквалайзера и более?Первый кадр - отсутствие сигнала, последний кадр - 0 дБ. То, что больше 0 дБ, будет отображаться последним кадром.
Если текстура будет содержать к примеру 100 кадров, то какому уровню будет соответствовать 100-ый кадр и какому кадру 0 dB? И как быть тогда с математическими преобразованиями в связях?
Какое максимальное значение Level может передавать prvVisual для Gauge?Легко может перевалить за несколько сотен.
Может ли оно превышать значение 100, если задран Preamp в эквалайзере?
Сделал при помощи 2-х индикаторов - 1-й скрывается когда значение больше 100 и появляется второй (если индикатор не в виде стрелки его можно не скрывать).
Только тут не понятно когда какой индикатор отображается - они одинаковые.Почему не понятно если стрелка в красной зоне это перегрузка - исчезает первый индикатор и появляется второй
Т.е. из всего вышесказанного получается, что при перегрузке всегда будет отображаться последний кадр текстуры.
Связи у них смотри.
а в чем величие абсолютной?При абсолютной они друг на друга бы по крайней мере не влияли.
При абсолютной они друг на друга бы по крайней мере не влияли.
Относительные координаты особенно неудобны когда надо расположить один контейнер над другим.
У всех остальных элементов скина координаты абсолютные, да и подвигать их можно клавишами или мышкой, а контейнеры довольно получается сложно позиционировать.
Вообще то я ожидал ответа на вопрос.
По-моему, вы просто не разобрались в подходе к построению скина и самом редакторе.Выходит, что если бы я разобрался в каком-то особом подходе, то многостраничные группы и контейнеры не влияли бы друг на друга? Что-то в справке про эти "подходы" ничего не сказано...
Выходит, что если бы я разобрался в каком-то особом подходе, то многостраничные группы и контейнеры не влияли бы друг на друга? Что-то в справке про эти "подходы" ничего не сказано...
1)такая проблема1. покажите картинку
2. в справке написаноНе вижу! :(
Не вижу! :(структура скина \ элементы управления \ плейлист
какринки вотширина каждого символа должна быть одинаковой (в том числе двоеточия и пробела)
структура скина \ элементы управления \ плейлистструктура плейлиста где ето у меня с лева есть вкладки все,структура,елементы
ширина каждого символа должна быть одинаковой (в том числе двоеточия и пробела)
картинка делится на равные части
а у вас цифры широкие а вспомогательные символы узкие
структура плейлиста где ето у меня с лева есть вкладки все,структура,елементыУ вас какая версия редактора?
захожу в структуру там нет елементов управления только главное окно!
и как понять цыфры широкие а символы узкие (печатал одним шрифтом)Ширина каждого кадра текстуры должна быть одинаковая как для цифр, так и для остальных символов (двоеточие, дефис и пробел).
Обьясните пожалуйста! я извиняюсь за свою непонятливость просто ето мой первый скин до етого ничем подобным не занимался!
Ширина каждого кадра текстуры должна быть одинаковая как для цифр, так и для остальных символов (двоеточие, дефис и пробел).где тут ошибка???
Откройте текстуру из стандартного скина и посмотрите, как сделана текстура.
где тут ошибка???Повторяю который раз: ширина кадра с двоеточием, дефисом, а также с пробелом (последний пустой кадр) должны быть той же ширины, что и остальные кадры!
и как понять цыфры широкие а символы узкие (печатал одним шрифтом)возьмите свою картинку и разделите на 13 равных частей - получите каждый символ в отдельности
Обьясните пожалуйста! я извиняюсь за свою непонятливость просто ето мой первый скин до етого ничем подобным не занимался!
как изменить ети точки?????Свойство в плейлисте есть (SkinSwitches)
и что делать чтобы текстура нормально отображалась когда увеличаешь окно плейлиста?Правильно настроить параметры растягивания текстуры.
что делать справка не открывается ?? :'(Какая версия редактора используется? Какая версия ОС? Поищите вручную в папке с редактором. Если нет - переустановите редактор.
нажимал и Ф1 и ?->справка ничего не вылазит! ???
Кнопки Drop Weel нельзя дублировать?Нет :( Юзай текстуры с несколькими наборами кадров и переключай их через state
Нет :( Юзай текстуры с несколькими наборами кадров и переключай их через stateСпасибо! +1
Возможно ли, каким либо образом, воздействуя на вход Preset prvEqualizerнет
нет
Хотелось бы узнать можно ли сделать так, что при растягивании скина, обложка альбома растягивалась(маштабировалась) пропорционально, то есть чтоб был квадрат.
Сейчас такой возможности нет, рекомендую создать тему с предложением.Спасибо, создал.
может кто-нибудь сдедать каркас скина по схеме? а то сколь не пробовал, порядка в этих контейнерах не понимаю, один на другой накладывается, растягивается, ад короче для меня )))Можешь мой Mega Light 2 (https://www.aimp.ru/forum/index.php?topic=45395.0) взять. Такое же расположение
может кто-нибудь сдедать каркас скина по схеме? а то сколь не пробовал, порядка в этих контейнерах не понимаю, один на другой накладывается, растягивается, ад короче для меня )))Так, собственно в чём у тебя проблема? Так и делай, как нарисовал: 3 контейнера по вертикали, верхний с выравниванием laTop, нижний - laBottom, средний - laClient.
ZeoN7, не успел похоже, в теме нет файла проектаПриложил.
Приложил.Спасибо, обязательно посмотрю.
Black_AVP, спасибо, понял теперь что их нужно отдельно выравнивать...Ну, молодец! Когда сам своими руками сделаешь - всё будет намного понятней и перестанет быть "адом". :)
Black_AVP, спасибо, понял теперь что их нужно отдельно выравнивать. А то начал читать Help, там про структуру скина начинается, какие контейнеры бывают, потом сразу про binding пишут, которые мне пока не нужны, вот я дальше и не стал читать, не поняв как позиционировать элементы.про позиционирование дальше, в разделе Окна
А скажите, можно ли сделать зависимость текстуры от активности/неактивности окна плеера? (если плеер активен - одна текстура, если не активен - другая.)плеер активен - на переднем плане?
А скажите, можно ли сделать зависимость текстуры от активности/неактивности окна плеера? (если плеер активен - одна текстура, если не активен - другая.)Можно лишь использовать сервис IsActive контейнеров - когда мышь по нему ползает.
А скажите, можно ли сделать зависимость текстуры от активности/неактивности окна плеера? (если плеер активен - одна текстура, если не активен - другая.)Было предложено в этой теме - 4е, неактивное состояние кнопки (при неактивном окне) (https://www.aimp.ru/forum/index.php?topic=31496.0).
3)Можно сделать промежуточный пользовательский провайдер, см. пример из вложения
текст громкости.
Беру TASETextDisplay, к нему подключаю prvVolume.
Как задать формат выводимого текста (по умолчанию выводит 100,00% а хочется 100%. Пробовал %v %, где-то на форуме слышал звон :) )?
Можно сделать промежуточный пользовательский провайдер, см. пример из вложенияДействительно, так лучше, чем мой костыль =)
brand2000, ваш пост подходит под лозунг "Читайте справку!"
1. Справка \ Структура скина \ Элементы управления \ Текстовые метки \ Пример: информация о текущем треке
2. Без проекта сложно разобраться. Создайте отдельную тему в разделе ошибок
3. Для текста невозможно
4. Справка \ Структура скина \ Элементы управления \ Текстовые метки \ Пример: таймер
Можно сделать промежуточный пользовательский провайдер, см. пример из вложенияДа, благодарю...
1. Тогда подскажите, как реализовать popup меню добавления или сортировки. Провайдера данной функции нет, а PopupMenu не даёт результата.Произвольное контекстное меню для текста не предусмотрено.
суть проблемы такова, что функционал бегущей строки очень скуден...да и прокрутка спорный моменткак же скуден? ЛКМ работает, ПКМ работает, выводится громкость, эффекты, перемотка и это не считая информации о треке
+ нельзя под неё спрятать слайдер прогресса трека http://take.ms/pYO3Y с возможностью пролистывать. Приходится костыли крутить.можно, сделайте только бегущую строку недоступной для клика (двойной клик по строке \ доступность для мыши)
... Беру TASETextDisplay, к нему подключаю prvVolume....Раньше не обращал внимания, но получается, что для такой связки любые действия над переменной Value бесполезны?
Раньше не обращал внимания, но получается, что для такой связки любые действия над переменной Value бесполезны?Фишка в том, что провайдер для метки выводит текст. А с текстом так не поиграешь. Когда используется промежуточный провайдер - текст превращается в число, а с числом уже можно работать.
Ни Round(Value), ни Trunc(Value), ни, даже, влом Value *100 div 100 на результат не влияют.
Фишка в том, что провайдер для метки выводит текст. А с текстом так не поиграешь. Когда используется промежуточный провайдер - текст превращается в число, а с числом уже можно работать.Ну, так я и думал. Тогда нелохо бы было как-то предупреждать подобные ошибочные действия пользователя, или вообще запрещать действия над переменной.
А, может, добавятся в будущем функции типа StrToInt и IntToStr. ;)Неплохая идея. Напиши в предложения.
А, может, добавятся в будущем функции типа StrToInt и IntToStr. ;)
Произвольное контекстное меню для текста не предусмотрено.оказалось проще кнопку без фона и сверху текст...
Чтобы заработало PopupMenu нужно дать какой-нибудь Action тексту (Справка \ Структура скина \ Элементы управления \ Текстовые метки \ Пример: информация о текущем треке).
Ещё вариант: расположите под текстом кнопку и вешайте на неё любую функцию. (можно будет подсвечивать кнопку при наведении мыши)
как же скуден? ЛКМ работает, ПКМ работает, выводится громкость, эффекты, перемотка и это не считая информации о трекескуден, в плане кастомизации (нет тегов и позиционирования элементов внутри строки (название трека слева, размер и продолжительность справа)), настройка прокрутки где-то в меню, вылезающая инфа о треке при клике (догадываюсь, что где-то в настройках плеера отключается? угадал)
Прокрутка бегущей строки отключается в настройках
можно, сделайте только бегущую строку недоступной для клика (двойной клик по строке \ доступность для мыши)
оказалось проще кнопку без фона и сверху текст...Почему не айс? Висит себе поверх кнопки и даже нажимать не мешает.
но как-то это не айс...
(догадываюсь, что где-то в настройках плеера отключается? угадал)да
Не совсем понял зачем такое сложно выражение Trunc(value + 1) - 1Извиняюсь, это я смотрел-вертел, забыл убрать. Там вообще не нужно никаких выражений.
Кажется, так будет проще: Trunc(value)
Если текст - это число в текстовом виде, то движок без проблем сможет воспринять его как число и сейчас.Но, произвести над ним действия, как над числом, не получается.
Но, произвести над ним действия, как над числом, не получается.в случае с громкостью мешает значок "%". Кстати, как оказывается, стандартная функция StrToInt тоже не поможет в этой проблеме.
в случае с громкостью мешает значок "%". Кстати, как оказывается, стандартная функция StrToInt тоже не поможет в этой проблеме.Ну, тогда проще цеплять к TASEDigitDisplay.
Тут скорее нужна доработка prvVolume:Progress (и других подобных точек), чтобы они передавали не текст, а число, если применяется преобразование выражения.
Ну, тогда проще цеплять к TASEDigitDisplay.это рисованные цифры - и это лишний гемор, зачастую
это рисованные цифры - и это лишний гемор, зачастуюКому как, голый шрифт не для всех скинов годится. :)
подскажите, есть ли возможность в Skin Editor вернуть\отменить выполненное действие (удаление, перемещении объекта)?
на MainForm не распространяется правило Растягивание окна?Для начала определитесь, вы вопрос задаёте или претензии кому-то предъявляете?
как так?
так же не могу понять логики сдвигания контейнеров
бида...
вложение проекта...блин, чуть мозг не сломал =)
Имеется кнопка, связанная с acMainDSPManager. При клике на неё вызывается соответствующий диалог, но на той закладке, на которой он был закрыт в прошлый раз и только при втором клике на кнопку осуществляется переход на закладку Sound Effects. Так и должно быть, т.е. на эту закладку сразу не попасть?Пункт в главном меню делает то же самое. Кнопка "настройки" делает аналогично. Это фича.
Вопрос может и тупой, но я что-то понять не могу. Как изменить высоту плейлиста, допустим на всю высоту скина. Типа как здесь https://aimp.ru/files/skins/w/WiMo_full.jpg.Нужно полностью изменять структуру скина. Почитайте обязательно справку.
Как отличить встроенные шрифты от установленных если у них одно имя.Системный шрифт удалить или переименовать тот, что встраивается в обложку
как его переиминовать. Если просто переименовать ttf файл толку не будет имя останется прежним.http://download.cnet.com/The-Font-Thing/3000-10248_4-127875.html (работает от имени админа)
Как отличить встроенные шрифты от установленных если у них одно имя.
Я создал кнопку и хочу, что бы по ее нажатии появлялось QFI. Не могу настроить связи, какая-то не простая наука это для меняПока нельзя так сделать - [Запланировано] Showing QFI window when user click some element (https://www.aimp.ru/forum/index.php?topic=44102.0).
Я создал кнопку и хочу, что бы по ее нажатии появлялось QFI. Не могу настроить связи, какая-то не простая наука это для меняНу, а что мешает по той же кнопке вызвать окно с той же информацией, что в QFI?
Я создал кнопку и хочу, что бы по ее нажатии появлялось QFI. Не могу настроить связи, какая-то не простая наука это для меняЗадай кнопке связь Action на acPlayableFileShowFileInfo
Задай кнопке связь Action на acPlayableFileShowFileInfoТочно, что-то я поторопился, не прочитал полностью ту тему-предложение.
В моем скине Idol Dark так (Спасибо Tarik'у)
Задай кнопке связь Action на acPlayableFileShowFileInfoВсё бы хорошо, но в этом случае QFI появляется в только в правом нижнем углу, и другого положения не запоминает. Порой и мышкой добежать до него не успеваешь...
Сейчас SE умеет переворачивать обложу альбома для создания эффекта отражения?кажись, нет
Задай кнопке связь Action на acPlayableFileShowFileInfoСпасибо!
В моем скине Idol Dark так (Спасибо Tarik'у)
Не знаю что произошло, или что я случайно нажал, но плейлист неожиданно перестал растягиваться по вертикали. Какие настройки отвечают за это?За это отвечает AllowResizeBy... и привязка контейнеров (laTop, laBottom и т.д.). Подробнее в справке, ну или по проекту поможем, скидывай.
Не знаю что произошло, или что я случайно нажал, но плейлист неожиданно перестал растягиваться по вертикали.Вот и я заметил некую странность в поведении плейлиста: похоже, в одном контейнере он хорошо уживается только со скроллбаром. Если в этот же контейнер поместить ещё другой контейнер или текстуру, то он перестаёт растягиваться, если текстура (контейнер) сверху или снизу - то по вертикали, елси сбоку - то по горизонтали.
Если в этот же контейнер поместить ещё другой контейнер или текстуру, то он перестаёт растягиваться, если текстура (контейнер) сверху или снизу - то по вертикали, елси сбоку - то по горизонтали.Внутри контейнера с привязкой laClient должен быть ещё один контейнер с такой привязкой (laClient) или ничего не должно быть, кроме элементов.
Внутри контейнера с привязкой laClient должен быть ещё один контейнер с такой привязкой (laClient) или ничего не должно быть, кроме элементов.То есть, плейлист свойством laClient не обладает?
То есть, плейлист свойством laClient не обладает?плейлист - это элемент, такой же как кнопка или ползунок, и растягивается по тем же правилам, что элементы
Друзья, до последнего пытался разобраться сам, но не получается. Мне всего лишь нужно, что бы эквалайзер появлялся на месте главного окна. Я постоянно перечитываю справку и, как я понял, мне необходимо создать многостраничную группу. Верно? Внутрь группы я переместил сами окна MW и EQ. А дальше у меня проблемы с настройками ZOrder и с кнопкой переключателем. Сможет ли кто-нибудь мне растолковать, как все правильно сделать?
Друзья, до последнего пытался разобраться сам, но не получается. Мне всего лишь нужно, что бы эквалайзер появлялся на месте главного окна. Я постоянно перечитываю справку и, как я понял, мне необходимо создать многостраничную группу. Верно? Внутрь группы я переместил сами окна MW и EQ. А дальше у меня проблемы с настройками ZOrder и с кнопкой переключателем. Сможет ли кто-нибудь мне растолковать, как все правильно сделать?скидывай проект :)
Друзья, до последнего пытался разобраться сам, но не получается. Мне всего лишь нужно, что бы эквалайзер появлялся на месте главного окна. Я постоянно перечитываю справку и, как я понял, мне необходимо создать многостраничную группу. Верно? Внутрь группы я переместил сами окна MW и EQ. А дальше у меня проблемы с настройками ZOrder и с кнопкой переключателем. Сможет ли кто-нибудь мне растолковать, как все правильно сделать?Если у тебя кнопка-переключатель страниц находится внутри страницы, то эту кнопку нужно продублировать во всех страницах. Например, если открыто MW, то в MW должна быть кнопка, которая включит EQ (и наоборот).
Если у тебя кнопка-переключатель страниц находится внутри страницы, то эту кнопку нужно продублировать во всех страницах. Например, если открыто MW, то в MW должна быть кнопка, которая включит EQ (и наоборот).Soolo мне помог. Посмотрел, не много понял.
Если кнопка находится за пределами многостраничной группы, то уже нужно настраивать связи этой кнопки, чтобы она поочередно переключала страницы (примеры такой связи должны быть в справке).
Есть ли какой либо мануал по созданию или редактированию скинов?Справка к редактору есть. Так же не забываем про метод Научного Тыка.
Помогите разобраться:1) Можно попробовать вместо TASESwitch в Mute использовать DigitsDisplay всего из 2=х кадров (часто так делаю вместо ключей).
1) Нужно сделать индикатор MUTE с помощью TASESwitch который должен появляться при выключенном звуке
2) Как сделать индикатор (желательно с помощью TASESwitch) который будет появляться при перемотке трека длительным нажатием кнопки (acPlayerSeekBackward\Forward)?
1) Можно попробовать вместо TASESwitch в Mute использовать DigitsDisplay всего из 2=х кадров (часто так делаю вместо ключей).Там же нет анимации переключения кадров, соответственно нет плавного появления и затухания. С помощью той же текстовой метки будет даже проще сделать.
2) По-моему - никак. Вот я когда-то воевал: https://www.aimp.ru/forum/index.php?topic=45090.0А вот это жаль. У меня нарисованы места для этих индикаторов (в BLACK ONIX они, кстати, тоже есть), а я уже главное окно собираю, чем их заменять теперь... Black_AVP, а как ты сделал в Tascam 2000 что при наведении на кнопки Пред\След трек, появляется анимация в дисплее? Придется походу так же делать.
1) Нужно сделать индикатор MUTE с помощью TASESwitch который должен появляться при выключенном звуке, но проблема в том, что если просто связать этот индикатор с провайдером acPlayerVolumeMute, то при уменьшении громкости до нуля с помощью регулятора громкости (SliderMasked) этот индикатор не появляется.а зачем, собственно, мудрить?
Пытался сделать таким образом:
Там же нет анимации переключения кадров, соответственно нет плавного появления и затухания.Вот именно поэтому и использую DigitsDisplay, чтоб избавиться от фейдинга, во имя того самого "реализьма" - и кнопки и светодиоды в таком виде неприемлимо смотрятся.
... Black_AVP, а как ты сделал в Tascam 2000 что при наведении на кнопки Пред\След трек, появляется анимация в дисплее? Придется походу так же делать.Наверное имелся в виду Teac CD-RW890? Там просто каждая кнопка в своём контейнере и используется их сервис IsActive.
а зачем, собственно, мудрить?В самом редакторе при такой связи индикатор не появляется если нажать на кнопку Mute, а при уменьшении прогресса до нуля появляется, поэтому думал что и в скине не будет работать. А оно работает.
Связь с prvVolume всё решает
Вот именно поэтому и использую DigitsDisplay, чтоб избавиться от фейдинга, во имя того самого "реализьма" - и кнопки и светодиоды в таком виде неприемлимо смотрятся.А мне так больше нравится :)
Наверное имелся в виду Teac CD-RW890? Там просто каждая кнопка в своём контейнере и используется их сервис IsActive.Перепутал, да, этот скин имел в виду. Я понял, спасибо.
В самом редакторе при такой связи индикатор не появляется если нажать на кнопку Mute, а при уменьшении прогресса до нуля появляется, поэтому думал что и в скине не будет работать. А оно работает.Редактор - лишь эмулятор плеера. Режим тестирования элементов там для простейших действий. Он не отслеживает все возможные взаимодействия элементов и провайдеров. Тестировать лучше на плеере.
Редактор лишь эмулятор. Он не отслеживает все возможные взаимодействия элементов и провайдеров. Тестировать всегда нужно на плеере.Обычно так и делаю, но и на старуху бывает проруха. (+1 за помощь)
Вот именно поэтому и использую DigitsDisplay, чтоб избавиться от фейдинга, во имя того самого "реализьма" - и кнопки и светодиоды в таком виде неприемлимо смотрятся.На счет кнопок действительно, лучше без фейдинга, а индикаторы когда плавно появляются мне больше нравится. (+1 за помощь)
Редактор - лишь эмулятор плеера. Режим тестирования элементов там для простейших действий. Он не отслеживает все возможные взаимодействия элементов и провайдеров. Тестировать лучше на плеере.Вот именно это меня и сбило с толку в последнем скине - состояние счётчиков не меняется и долго не мог понять почему связь не работает, пока не запустил плеер.
А вообще в АИМПе фейдинг или морфинг используется, кто подскажет?а в чем отличия? :-\
а в чем отличия? :-\Это - фейдинг, а морфинг - это, по сути, анимация, т.е. просчитываются промежуточные положения между двумя изображениями. Ну, видели, наверное, как из одной рожи плавно получается другая.
Вообще, один кадр замещается вторымчерез промежуточную полупрозрачность обоих кадров.Вру.
...через промежуточную полупрозрачность второго кадра поверх первого.
Как настроить связи для кнопки, по нажатии которой создавался бы новый плейлист?провайдер acPlaylistNew
провайдер acPlaylistNewСпасибо!
При нажатии кнопки "Собрать обложку и запустить" скин собирается, но не применяется. Почему?
Скорее всего у вас плеер не v3.60.Действительно, обновил... Спасибо))
подскажите. я сделал ползунок реверб в главном окне, при прокрутке его с помощью колеса мышки его значение изменяется сразу по 10 процентов можно ли изменить шаг его прокрутки на 1 процент? В менеджере звуковых эффектов он двигается по 1 проценту.
Можно ли заставить скин отрисовывать системную рамку windows с выводом информации от текущем треке?Родную для винды рамку нет.
(http://storage9.static.itmages.ru/i/15/0106/h_1420560815_8597128_7aa833de53.png)
Стыдно спрашивать через столько лет пользования редактором, но всё же: как создаётся или откуда берётся в дереве скина элемент TASELayoutItem?В справке есть - Структура скина -> Элементы фона -> Группа(TASELayoutItem)
В справке ничего об этом не накопал, пока успешно обходился без этого. Как всё-таки группировать элементы?
В справке есть - Структура скина -> Элементы фона -> Группа(TASELayoutItem)И где там описано, как создаётся группа, и как догадаться до столь неочевидных действий?
Чтобы создать надо выбрать контейнер или текстуру и в контекстном меню выбрать Новый пункт: Текстура или Новый пункт: Контейнер. Так созданный контейнер(текстура) и ранее выбранный объединятся в группу
И где там описано, как создаётся группа, и как догадаться до столь неочевидных действий?
Сегодня столкнулся с неприяной вещью: Hit-Test маска в TASEVisualDisplay не работает, в TASECoverArtDisplay в редакторе работает, в скине - нет.
Так задумано или баг?
в TASEVisualDisplay работает только при выключенной визуализации
в TASECoverArtDisplay должно работать всегда
в TASEVisualDisplay и при выключенной визуализации работает только когда маска идёт 3-им кадром, если вторым - отображается поверх визуалки.
Как сделать чтобы элемент/контейнер появлялся только при наведении курсора на его активную область?https://www.aimp.ru/blogs/?p=466
Никто не ставил перед собой такую задачу: регулировать громкость или другие эффекты в диапазоне не 0..100%, как обычно, а, к примеру, 0..20, 0..50% ? Может ли быть корректное решение на имеющемся скин-движке?сомневаюсь, что такое возможно
Попробовал решить её изменением градиента в хит-маске и простым удвоением кадров (проект во вложении). В данном примере использован prvEnchancer, регулятор 1 - обычный 0..100%, регулятор 2 - 0..50%. При клике мышкой, вроде, работает как надо, но при вращении колёсиком уходит на второй круг.
Есть какие-нибудь идеи?
а для чего такое нужно?Возникает, порой, необходимость в более плавной регулировке, особенно эффектов.
Возникает, порой, необходимость в более плавной регулировке, особенно эффектов.Так ныне эффекты колесом регулируются с довольно мелким шагом, что для некоторых эффектов даже слишком плавно. Можно проверить на моей "Веге" - там на большой регулятор выведены все имеющиеся эффекты.
У меня есть текстовая метка со связью (DisplayValue <---> TrackPosition). Время отображается по макету чч:мм:сс, мне нужно мм:сс. Не могу сообразить как сделать.В справке для текстовых меток есть пример "Таймер".
Что означает параметр "Чувствительность маски" на закладке "Размытие фона"? (Никогда раньше этой фичей не пользовался)Параметр указывает на степень прозрачности пикселов текстуры, которые должны "размываться". Если прозрачность текстуры ниже указанного порога, в том месте размытия не должно быть. Вроде как то так.
При его изменении после определённого значения размытие отрубается. Сила размытия не меняется.
Параметр указывает на степень прозрачности пикселов текстуры, которые должны "размываться". Если прозрачность текстуры ниже указанного порога, в том месте размытия не должно быть. Вроде как то так.А я то размечтался, что там степень размытия меняется...
Подскажите плиз, делаю скин :'( как при нажатии паузы сделать, чтобы катушки останавливались. буду безмерно признателен.справку почитайте, там есть пример остановки анимации
Какой справкой? Дайте ссылку!в редакторе сверху жмите на вопросик
Вопрос по аниматорам. Продолжают ли они работать при Visibilty = 0? Если да, то насколько это ресурсозатратно?такие технические вопросы лучше всего напрямую Артёму в аську или личку
Вопрос возник при работе над скином https://www.aimp.ru/forum/index.php?topic=47622.0 . Там при переключении аниматоров их фазы подозрительно совпадают и временами начинаются небольшие подёргивания.
Остановит ли аниматоры (снизит ли нагрузку) Accessibility = 0?
Продолжают ли они работать при Visibilty = 0? Если да, то насколько это ресурсозатратно?Да, процентов 10-20 - https://www.aimp.ru/forum/index.php?topic=39128.0
Да, процентов 10-20 - https://www.aimp.ru/forum/index.php?topic=39128.0Но всё-таки не ясно, с Accessibility стоит заморачиваться?
Но всё-таки не ясно, с Accessibility стоит заморачиваться?Даже если это и снизит ресурсоёмкость на пару процентов - нет смысла городить огород. Но, подозреваю, что маловероятна даже такая экономия.
Дело в том, что этот вход элемента у меня уже занят, и, если игра стоит свеч, то придётся городить логику на каждый аниматор.
Даже если это и снизит ресурсоёмкость на пару процентов - нет смысла городить огород. Но, подозреваю, что маловероятна даже такая экономия.Дело не только в ресурсоёмкости, когда был один аниматор, вращение было более плавное.
Дело не только в ресурсоёмкости, когда был один аниматор, вращение было более плавное.В моей Орбите аниматоров не счесть, и ничего, все синхронно крутятся в фоне. Может у тебя аниматоры не идентичны? Кстати, заметил биение рефлекса на правой бобинке - так и задумано?
Хотя, может быть, дело ещё и в том, что у меня теперь памяти вдвое меньше - 4 гига.
Может у тебя аниматоры не идентичны?Нет, все одинаковые, все клоны, поворот везде на 1/3 оборота, 25 кадров в левом, 24 кадра в правом, задержки тоже везде одни.
Кстати, заметил биение рефлекса на правой бобинке - так и задумано?Чего-то я своими глазами ничего разглядеть не могу. На всех трёх правых или конкретно на какой-то? Сам же знаешь, что в ФШ стили не вертятся.
Чего-то я своими глазами ничего разглядеть не могу. На всех трёх правых или конкретно на какой-то? Сам же знаешь, что в ФШ стили не вертятся.На всех без исключения бобинках заметно радиальное биение кольцевого шумового градиента, на правых бобинках всех типов, помимо того, вздрагивает и рефлекс.
Может это из-за эффекта "модуляции" окнами? ???
Вопрос! Для перемотки ленты создал серии изображений от смотанной до размотанной и наоборот в 32 слайда, создал два SeekBar как посоветовали на одном из разделов сайта, на каждом из SeekBar стоит 1-й кадр и никакого движения при перемотке, а так же при наведении на SeekBar с лентой, изображение сматывается\разматывается на 1 кадр. В чем причина, что я делаю ни так? Потею над этим уже неделю,помогите ради бога!Какой прогресс-бар вы создали? Что-то мне подсказывает, что обычный, линейный. Нужно создавать "круглый" (покадровый) прогресс-бар TASESliderMasked.
Вопрос! Для перемотки ленты создал серии изображений от смотанной до размотанной и наоборот в 32 слайда, создал два SeekBar как посоветовали на одном из разделов сайта, на каждом из SeekBar стоит 1-й кадр и никакого движения при перемотке, а так же при наведении на SeekBar с лентой, изображение сматывается\разматывается на 1 кадр. В чем причина, что я делаю ни так? Потею над этим уже неделю,помогите ради бога!Кадр маски лучше сделать пустым, но указать его в качестве маски. TASESliderMasked надо связать с провайдером prvPlayerState посредством Action---Action.
Если можно, ещё один маленький вопрос. Какое количество кадров вы посоветуете сделать для примерно такого бараВопрос, действительно, маленький, а работа предстоит огромная. :)
... Вообще не плохо было бы для таких чайников как я создать какой нибудь проект-образец или видео для свободного пользования с примерами анимации ...Просмотрите ещё вот эти две темы, в них есть полезная информация в этом плане:
... а нет ли у вас урока по созданию png серий сматывания\разматывания пленки...Вы ж не сообщаете, каким редактором пользуетесь, какими методами рисуете и в чём конкретно проблемы, а так - можно давать только общие рекомендации.
Как опубликовать готовую обложку?сначала на форум: https://www.aimp.ru/forum/index.php?topic=4928.0
Вопрос такой: что за параметры TextLabels для слайдеров? Как они работают? Какой темплейт нужно задавать?А также DisplayValue1, 2 и Waveform, и почему аналогичных свойств нет в SliderMasked?
Вопрос такой: что за параметры TextLabels для слайдеров? Как они работают? Какой темплейт нужно задавать?
А также DisplayValue1, 2 и Waveform, и почему аналогичных свойств нет в SliderMasked?
procedure Execute(var State: Integer);
var
test: TComponent;
begin
test:= FindObject('LayoutTabbedGroup');
case State of
0:
begin
test.Set('Animation', 'tgaSliderTopToBottom');
end;
1:
begin
test.Set('Animation', 'tgaSliderBottomToTop');
end;
end;
end;
exception class : EPropertyConvertError
exception message : Invalid property element: tgaSliderBottomToTop.
Потому, что элемент называется tgaSlideBottomToTop. Slider -> SlideТочно, не заметил. Странно только, что скрипт собрался.
Точно, не заметил. Странно только, что скрипт собрался.
В по первому вопросу как?
Что именно интересует? Я не очень понимаю, в чем возникла загвоздка
procedure Execute(var State: Integer);
begin
ShowMessage(@Lng:1;);
end;
Я в блоге еще упоминал, что на текущий момент получить сам текст на уровне скриптов / биндинга нельзя.Всё, разобрался.
Интересует, для какой цели это нужно?Ну, например, тот же локализованный вывод сообщения функцией ShowMessage. Хотя она больше для тестирования, наверно, предназначена.
Вопрос по скриптам: где-нибудь можно сейчас посмотреть перечень методов объектов и допустимых паскалевских конструкций?Присоединяюсь к вопросу: Артем, можешь посоветовать какой-то неплохой справочник или ресурс?
Присоединяюсь к вопросу: Артем, можешь посоветовать какой-то неплохой справочник или ресурс?
Возвращаясь к слайдерам: нельзя ли в скриптах сделать доступным положение его ползунка (Value, Progress)?
Сейчас Progress биндинтся через Action к провайдеру, соответственно, он не только принимает значение, но и устанавливает его в провайдере. Если дать возможность его менять в скрипте, то он тут же синхронизируется со значением в провайдере.И это замечательно!
Опиши, пожалуйста, сценарий, который ты хочешь реализоватьДа, мне всё не даёт покоя та старая идея реализовать 2-х или 3-х полосный эквалайзер. Один регулятор управлял бы первой половиной слайдеров (НЧ), второй - другой половиной (ВЧ). Регулятор подключить к скриптовому счётчику, по значению последнего пересчитывать через коэффициенты значения полос эквалайзера, подавая их на Progress соответствующего слайдера.
А, может, через скрипты можно обратиться прямо к провайдеру, типа:
prvEqualizer.Set('Band10', 100)
Я постараюсь подготовить список доступных функций в ближайшее время. Смысла в справочнике особого не вижу, поскольку в скриптах поддерживается весьма урезанный список функций.Ну, хотя бы в общих чертах:
Ну, хотя бы в общих чертах:
1. какие паскалевские конструкции допустимы;
2. можно ли использовать условные операторы if then else;
3. циклы while do, repeat until,
4. конкантенацию строк,
5. какие вычислительные операции доступны;
6. можно ли возвращять значение переменной State, ведь она объявлена как var State?
Все, за исключением создания собственных структур и классовТ.е. вот такой фрагмент прокатит:
procedure Execute(var State: Integer);
const
K: array[1..9] of Real = (9,8,7,...,1);
var
N: Integer;
....
begin
...
for N:= 1 to 9 do
prvEqualizer.Set('Band' + IntToStr(N), Round(State * K[N]));
...
end.
Я постараюсь подготовить список доступных функций в ближайшее время. Смысла в справочнике особого не вижу, поскольку в скриптах поддерживается весьма урезанный список функций.Ну список функций конечно хорошо, но я вообще ни в зуб ногой по паскалеподобному синтаксису. Я бы хотел почитать о типах данных, о синтаксисе и прочих базовых вещах. Код читается уже на интуитивном уровне, но боюсь, что сходу у меня не получится ничего толкового написать. Поэтому и прошу порекомендовать какой-то хорошоий ресурс для "чайников" (наверняка есть хорошие сайты или офф. доки), если нет - тогда буду сам искать.
По какому принципу происходит расшаривание текстур - при клонировании? Т.е. как реально сэкономить память?
Картинки при сборке скина сравниваются и одинаковые расшариваются.А не слишком затратно сравнивать побайтно текстуры, ведь они могут быть 50-100 MPix?
А как, в таком случае, пользователь получит доступ к встроенному для формы меню?Это то, что "Прикрепить..."? Можно и пожертвовать им, всё равно мышом таскают.
Это то, что "Прикрепить..."? Можно и пожертвовать им, всё равно мышом таскают.
Как сбросить счётчик до начального значения (значение по умолчанию)?
Через биндинг или скрипты?Если доступно и то и другое, то интересно увидеть оба варианта.
Потому, что, как я понимаю, управлять сразу несколькими счётчиками с одной кнопки можно только через скрипты. Так вот, как обнулить несколько счётчиков я представляю, а как сбросить до начального значения - не знаю.
Через биндинг - только явно указав его значение по умолчанию (число), т.е. если у всех счетчиков значение по умолчанию одно и тоже - эту задачу можно решить и через биндинг, а если разные - только через скрипты:Спасибо.
if AObject <> nil then
?И ещё. Модуль у ScriptableOperatorCounter равен 2. Если поставить 1, то скрипт не будет работать. Так, получается? Как-то не очень явно это.
Или скрипт срабатывает только когда значение счётчика меняется? Поэтому нужен модуль равный, как минимум, двум?
1. Можно ли как-то Alignment многостраничной группы менять, допустим с laLeft на laRigth, с помощью кнопки в готовом скине? Планирую сделать возможность перемещать элементы управления с одной стороны обложки на другую.1. на данный момент нет, в будущем будет возможность (https://www.aimp.ru/blogs/?p=557)
По сути можно сделать две многостраничные группы и настроить их отображение, но дополнительные элементы увеличивают размер готовой обложки.
2. Можно ли клонировать параметры кнопок в окне DropWheel? Есть идея по изменению вида самого "колеса" в зависимости от оформления, хотелось бы что бы кнопки так же меняли свое расположение. К примеру, скин будет в виде игральной колоды карт, а DropWheel в виде обозначения мастей.
Можно поверх группы с текстурами масти накладывать контейнер-текстуру с кнопками, но хотелось бы для каждого вида DropWheel сделать собственные текстуры кнопок.
Кстати, вариант с переименованием, как в Проводнике - вторым кликом по имени, не рассматривался?Самый удобный способ переименования - F2, как и в проводнике.
Самый удобный способ переименования - F2, как и в проводнике.Для тех, кто привык работать с клавы, - безусловно F2 удобнее. Они и десятки хоткеев в голове держат. А дилетанты, вроде меня, окромя Ctrl+A,X,C... - всё остальное мышкой, и только мышкой. Мне проще в свойствах объекта даблкликнуть по нейму... ;D
Для тех, кто привык работать с клавы, - безусловно F2 удобнее.Так, даже в контекстном меню написано: Rename .... F2, а далее - всё равно надо мышь бросать и вводить имя с клавиатуры.
Так, даже в контекстном меню написано: Rename .... F2, а далее - всё равно надо мышь бросать и вводить имя с клавиатуры.И про F2, и про контекст я знаю, и в Проводнике всё это есть. Но там ещё и переименование по второму клику на имени есть, как альтернатива предыдущим способам. Я ж просто спросил. Если такое поведение сложнореализуемо, или есть иные веские причины этого не делать, тогда вопрос снимается...
И про F2, и про контекст я знаю, и в Проводнике всё это есть. Но там ещё и переименование по второму клику на имени есть, как альтернатива предыдущим способам.Такой способ с двумя кликами и с неопределённой паузой между ними применяется только при редакторовании "на месте". Ты хочешь менять имя прямо в дереве? Но, это ж крайне неудобно: окно довольно узкое, имена бываю длинные, а главное - как быть с валидацией?
Вопрос по скриптам: функция FindObject() возвращаяет лишь указатель на объект, сам объект в конце уничтожать не нужно?
Т.е. можно в теле процедуры Execute одну и ту же переменную использовать для получения ссылок на разные компоненты?
Да, убить объект в рантайме нельзя, но если, например, ты в редакторе что-то переименуешь, забыв о скрипте, то скрипт хотя бы не будет валиться с ошибкой.Кстати, оказывается, переименовать объект ведь даже в рантайме можно:
Подскажите пожалуйста, делаю скин приставки электроника, как сделать смену кассет какими провайдерами и элементами? я новичок, хоть и сделал несколько скинов, но с этими элементами не работал, буду рад любому доброму совету, и ещё вопрос, как сделать обнуление счётчикаОчень мало информации.
Ребят что-то я не могу допетрить, как сделать чтобы в кастомном контекстном меню, имя пункта бралось из локализации его имени в АИМП?
Вообще по умолчанию было бы неплохо брать имя из локали, если кастомное не назначено
ShowMessage в скрипте выполняется при применении скина. То есть без изменения значения ScriptableOperatorCounter.
Это так и задумано?
Чем отличаются варианты качества рендеринга шрифта "Черновое 1" и "Черновое 2"?
И вариант "По умолчанию" представляет собой отличный от остальных вариант или "дублирует" какой-то другой?
А, может, через скрипты можно обратиться прямо к провайдеру, типа:Вот такой вариант был бы более правильным, сделаю
prvEqualizer.Set('Band10', 100)
Значит изменение было, без изменения оно не может вызываться.Накидал тестовый проект:
procedure Execute(var State: Integer);
var
ACounter: TComponent;
temp: integer;
begin
ACounter := FindObject('NewLogicalOperatorCounter');
temp := ACounter.Get('Position');
ACounter.Set('Position', temp + 1);
ShowMessage('OK');
end;
ACounter.Set('Position', Inc(ACounter.Get('Position')));
ACounter.Get('Position')) - есть такой?Есть (если я правильно понял). Сообщением выше я использовал:
temp := ACounter.Get('Position');
При этом сторонний счётчик не увеличивается. То есть скрипт срабатывает не полностью, а только ShowMessage.
procedure Execute(var State: Integer);
Var
Comp: TComponent;
Pos: Integer;
begin
Comp:= FindObject('LogCntr');
Pos:= Comp.Get('Position');
Inc(Pos);
Comp.Set('Position', Pos);
ShowMessage(IntToStr(Pos));
end;
Инкремент в таком написании работает. Сообщение также появляется при смене скина и также счётчик не изменяется.А это уже возможно?
Накидал тестовый проект:
Скрипт:Code: [Select]procedure Execute(var State: Integer);
var
ACounter: TComponent;
temp: integer;
begin
ACounter := FindObject('NewLogicalOperatorCounter');
temp := ACounter.Get('Position');
ACounter.Set('Position', temp + 1);
ShowMessage('OK');
end;
При срабатывании скрипта инкрементируется сторонний счётчик и показывается сообщение.
Если значение скриптового счётчика равно 0, то, при переключении на любой другой скин и обратно (или перезапуске плеера), всё нормально.
Но, если значение равно 1, то, при переключении на другой скин и обратно, сначала вылетает сообщение, а потом появляется скин.
При этом сторонний счётчик не увеличивается. То есть скрипт срабатывает не полностью, а только ShowMessage.
(http://habrastorage.org/files/973/716/7f7/9737167f7ab94f10bf41ea28e82b48df)
Если закрыть плеер и вновь запустить, то в сообщении будет 1, а DigitsDisplay будет показывать значение из прошлой сессии, и только при нажатии кнопки эти значения сравняются.
Но, если закрыть плеер с другим скином, вновь запустить и переключиться на этот экпериментальный, то сообщение не выводится и в DigitsDisplay- 0.
Может, при инициализации скина, когда первый раз обрабатывается скрипт, этот счётчик ещё не существует (хотя DigitsDisplay его значение помнит ???), а ошибки в скрипте просто игнорируются...
Да.FindObject('prvEqualizer') - прокатывает, а вот на имя 'Band1' ... 'Band18' компилятор делфи ругается.
FindObject('prvEqualizer') - прокатывает, а вот на имя 'Band1' ... 'Band18' компилятор делфи ругается.
Как правильно обратиться к провайдерам?
Но, указанымм там способом объявить константу не получается:
const
K: array[1..9] of Real = (9,8,7,6,5,4,3,2,1);
хотя переменную того же типа можно:
var
K: array[1..9] of Real;
И ещё. Исследовал сегодня провайдер эквалайзера через скрипты, установил, что входной диапазон для BandValue -15,0..0..+15,0.
Может, лучше оставить, как в биндинге -1500..0..+1500 ? Хотя, конечно, не принципиально.
Полагаю, что скорее всего это ограничение скриптового движка, надо смотреть.Получается, что вообще типизированные константы не допустимы, а такое К = 1 - прокатывает.
Но, один неприятный момент: при запуске плеера, если до этого в другом скине перестраивалась АЧХ, при смене на этот скин положения регуляторов не соответствуют АЧХ, скрипт при этом не вызывается, пока не тронешь регуляторы.
Всвязи с этим напрашивается необходимость в ещё одном виде скрипта - нечто вроде EventScript, срабатывающего при определённых событиях в плеере: запуск, изменение состояния плеера, смена скина, переключение окон и т.п. И хорошо бы, если б из него можно было вызвать другой скрипт. Возможно такое?
Можно пойти ещё дальше (позволю себе немного пофантазировать). Окно Properties в редакторе у нас уже есть. А что если в него добавить ещё вкладку Events, как в делфи Object Inspector, где для данного элемента можно будет указать скрипты, выполняемые для возможных для него событий: OnClick, OnShow, OnMouseDown, OnMouseMove ... ?
Запиши отдельный баг с примером, буду разбираться.Так, а баг ли это? Скриптовый счётчик подключен к регулятору TASESliderMasked, при старте плеера или смене скина состояние счётчика не меняется (и не должно), поэтому и скрипт не вызывается. Вызывать на исполнение все подряд скрипты при инициализации скина, вроде, нелогично, поэтому я и написал про "событийные" скрипты.
Так, а баг ли это? Скриптовый счётчик подключен к регулятору TASESliderMasked, при старте плеера или смене скина состояние счётчика не меняется (и не должно), поэтому и скрипт не вызывается. Вызывать на исполнение все подряд скрипты при инициализации скина, вроде, нелогично, поэтому я и написал про "событийные" скрипты.
Как всё-таки практически использовать LogicalOperatorDelayer, как стартовать его, что на выводе "Result" и что за вход (или выход?) у него "Value1" ?
procedure Execute(var State: Integer);
var
Cont, Anim: TComponent;
begin
Cont:= FindObject('Container_Anim');
Anim:= FindObject('Animator');
if (Cont = nil) or (Anim = nil) then Exit;
with Anim do
if Cont.Get('IsActive') then
begin
Set('Accessibility', true);
Set('Visibility', true)
end
else
begin
Set('Accessibility', false);
Set('Visibility', false)
end
end;
LogicalOperatorCounter обзавёлся входом, но лишён таких необходимых для "секундомера" кнопок, как: Стоп\Пуск и Сброс. Планируется ли снабдить его недостающим?так это вроде и не секундомер по задумке
так это вроде и не секундомер по задумке
В связке с таймером - вполне станет секундомером.Костыльно его и сейчас можно соорудить из аниматора. Из аниматора же (1x2 пикселя) получается регулируемый источник импульсов ;)
А вот такая связь должна работать? Направлена, вроде, в сторону счётчика, но никаких действий не производит...
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=47822.0;attach=43396)
Нет, что ты хотел этим сделать?Жаль. Это ещё одна попытка решить ту проблему https://www.aimp.ru/forum/index.php?topic=47881.0
Подскажите, как придать свойства Main client элементу SliderMasked, при помощи которого сделана накладка частично закрывающая катушки, чтобы можно было перетаскивать скин как на Main client ,может быть это можно сделать с помощью провайдеров или лучше заменить элемент SliderMasked на какой либо другой,если можно подскажите на какой? спасибо.SliderMasked - это элемент управления, а не фона. За него нельзя таскать плеер. Можно его сделать недоступным для мыши, добавив кадр-маску. О маске почитайте в справке.
А можно сделать из текстовой метки кнопку вызова конт. меню (кнопку Menu короче)? Что-то я не нашел подходящего провайдера, и копирование свойств ничего не дает.Нельзя. И это не провайдер, а одно из свойств должно быть
А можно сделать из текстовой метки кнопку вызова конт. меню (кнопку Menu короче)? Что-то я не нашел подходящего провайдера, и копирование свойств ничего не дает.Можно сделать пародию на меню, но только по ЛКМ. Посмотри в моём Denon 2.6 - правда, там на кнопке Options, но и у метки Action есть. Это тебе нужно?
1. Похоже, кроме ShowMesage, никакие другие функции не допустимы, типа InputBox, MessgeDlg?
2. Возможно ли через скрипты изменить свойство Parent элементов?
Можно сделать пародию на меню, но только по ЛКМ. Посмотри в моём Denon 2.6 - правда, там на кнопке Options, но и у метки Action есть. Это тебе нужно?Нет, нужно было стандартное main menu, но на текстовую метку. Сделал скриншот с текстовой меткой в SE и вырезал текстуру для кнопки.
Здравствуйте. Такой вопрос. Можно-ли как-нибудь, взять одно окно, из одного проекта и вставить в другой?Надо экспортировать оба проекта. Затем взять файлы из нужного проекта - это файл с именем нужногоокна.xml(в обои проектах надо чтобы окна имели одинаковое название) и переместить в другой. Также надо поступить и с текстурами(и файлами с их настройками.xml - они имеют одно имя с текстурой) из папки Images. Чтоб легче было выбрать текстуры лучше перед импортом элементам и контейнерам(которые содержат текстуры) в нужном окне добавить в начало названия какой-нибудь приставку(допустим QFI если это окно Quick File Info).
Я попробовал сделать экспорт/импорт, но он либо меняет все окна скина, либо вставляет одно окно и удаляет остальные.
Можно-ли как-нибудь, взять одно окно, из одного проекта и вставить в другой?
Надо экспортировать оба проекта. Затем взять файлы из нужного проекта - это файл с именем нужногоокна.xml(в обои проектах надо чтобы окна имели одинаковое название) и переместить в другой. Также надо поступить и с текстурами(и файлами с их настройками.xml - они имеют одно имя с текстурой) из папки Images. Чтоб легче было выбрать текстуры лучше перед импортом элементам и контейнерам(которые содержат текстуры) в нужном окне добавить в начало названия какой-нибудь приставку(допустим QFI если это окно Quick File Info).
Что нужно привязать к точке доступа Waveform слайдера, чтобы увидеть этот Waveform?
Артём, а всё-таки нельзя добавить такую возможность?Возможность "внешнего" управления позволила бы использовать сторонние события для переключения содержимого, а не только кнопки/слайдеры. Двумя руками за такую возможность.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=47822.0;attach=43475)
Создано окно. InitialVisible установлено в false. При срабатывании скрипта устанавливаю Visible:= true, однако окно не появляется.
Если установить InitialVisible в true, то видимость окна переключается, но мне нужно, чтоб изначально окно было скрыто. Что можно сделать?
2. Так и не понял как локализовать текст.Пример во вложении.
Пример во вложении.Ааа! спасибо! у Артёма там просто столько знаков препинания, что не углядел что нужно ещё ; ставить в конце.
2Я Гриша!Чтобы юзеру сразу была видна
У тебя кнопка Close расположена в контейнере GWTop, так зачем её показывать при наведении на другой контейнер?
Чтобы юзеру сразу была виднаНу, тогда ещё вариант:
Посмотри, это ты хотел?Спасибо, но нето.
1. Можно ли сделать доступным управление видимостью контейнеров, элементов через скрипты, ведь через биндинг это возможно? Очень этого не хватает.
2. Почему функция Ord не работает с аргументом типа Boolean?
2. Почему функция Ord не работает с аргументом типа Boolean?Что это за функция?
Что это за функция?Возвращает числовое значение символа, если аргумент Char, 0 или 1, если аргумент Boolean.
Если сплиттер сдвинуть в крайнее положение (влево или вправо), то при изменении размеров окна сплиттер не перемещается. Если же его чуть сдвинуть, то пропорциональность восстанавливается. Это так и задумано?Ну если размер одного контейнера - 100%, а второго - 0, то сколько не растягивай окно - пропорция не изменится, соответственно второй контейнер так и будет с нулевым размером (умножение на ноль даст ноль). Так что все логично.
Ну если размер одного контейнера - 100%, а второго - 0, то сколько не растягивай окно - пропорция не изменится, соответственно второй контейнер так и будет с нулевым размером (умножение на ноль даст ноль). Так что все логично.Почему 0? Минимальный размер контейнера, я ж не собираюсь уменьшать ширину вкладок до 0. Да и про 100% говорить некорректно, поскольку нет ограничения на его максимальный размер.
Почему 0? Минимальный размер контейнера, я ж не собираюсь уменьшать ширину вкладок до 0. Да и про 100% говорить некорректно, поскольку нет ограничения на его максимальный размер.Извиняюсь, я подумал, что спллиттер перемещается так, что один контейнер полностью скрыт.
Речь шла о том, что пока не сдвинешь сплиттер хотя бы на 1 пиксель, пропоциональности при изменении рамеров SplitView нет.
Извиняюсь, я подумал, что спллиттер перемещается так, что один контейнер полностью скрыт.Да, какие извинения, Tarik, всё норм! Просто я сейчас переделываю свой первый Fantasy под 4 версию, все экперименты мои ему достались. Решил попробовать добавить разделитель в плейлист, а картина - как описано выше. Если чуть растянуть окно плейлиста, а сплиттер сдвинуть до упора влево, то при изменении окна за правый край сплиттер остаётся на месте, хотя в остальных случаях окно разделяется пропорционально. Вот и спросил: нормальное это поведение или бажок?
Да, какие извинения, Tarik, всё норм! Просто я сейчас переделываю свой первый Fantasy под 4 версию, все экперименты мои ему достались. Решил попробовать добавить разделитель в плейлист, а картина - как описано выше. Если чуть растянуть окно плейлиста, а сплиттер сдвинуть до упора влево, то при изменении окна за правый край сплиттер остаётся на месте, хотя в остальных случаях окно разделяется пропорционально. Вот и спросил: нормальное это поведение или бажок?В этом поведении есть свои плюсы.
Скин в аттаче. Чтоб перенести плейлист или кавер в свободное окно надо ткнуть крайнюю левую кнопку под плейлистом (до сих пор не придумал как её обозвать ни по-английски, ни по-русски).
Почему 0? Минимальный размер контейнера, я ж не собираюсь уменьшать ширину вкладок до 0. Да и про 100% говорить некорректно, поскольку нет ограничения на его максимальный размер.Размер контейнеров тут не играет роли, проценты вроде рассчитываются от минимально допустимых размеров обоих контейнеров при текущей ширине родительского контейнера
Речь шла о том, что пока не сдвинешь сплиттер хотя бы на 1 пиксель, пропоциональности при изменении рамеров SplitView нет.
Пожалуйста подскажите, как сделать разрыв полосы у люминесцентного индикатора TrayLC и TrayRC как в скине TASCAM CD-RW750. Спасибо.Я так понимаю, что там используется два отдельных индикатора - один - сплошная полоса, а второй - у которого отображаются только 3 последних сегмента.
Размер контейнеров тут не играет роли, проценты вроде рассчитываются от минимально допустимых размеров обоих контейнеров при текущей ширине родительского контейнераНу, истину тут только Артём может прояснить, но по логике вещей, изменение размеров контейнеров должно рассчитываться от текущего, поскольку пользователь может двигать сплиттер при любом размере окна и каждое новое положение сплиттера будет отправной тожкой для рассчёта соотношения ширин контейнеров.
Пожалуйста подскажите, как сделать разрыв полосы у люминесцентного индикатора TrayLC и TrayRC как в скине TASCAM CD-RW750. Спасибо.Смотрите пример во вложении. Обращаю внимание на то, что текстуры основных и пиковых уровней должны быть одинаковой ширины, т.е. у основных в конце идут пустые кадры. Тогда индикатор будет целостным.
Пожалуйста, если можно попонятней. Текстура состоит из двух кадров, один полностью с обесцвеченными(отключенными) сегментами, а второй кадр с полностью зацвеченными сегментами, индикатор работает, но такого эффекта как на вышеуказанном скине нет, то есть последний (последние) сегменты не отделяются при воспроизведении, и при отключении воспроизведения тоже, а вот как добиться подобного эффекта я и интересовался, я пробовал делать трёхкадровую текстуру, но третий кадр похоже совсем лишний и не работает, могли бы вы показать образец, если кто владеет техникой создания такого эффектаА вложенный файл проекта посмотреть из предыдущего поста нет желания?
Ну, истину тут только Артём может прояснить, но по логике вещей, изменение размеров контейнеров должно рассчитываться от текущего, поскольку пользователь может двигать сплиттер при любом размере окна и каждое новое положение сплиттера будет отправной тожкой для рассчёта соотношения ширин контейнеров.
Я хочу напомнить, что есть ситуации, когда и мини-плеер, и основное окно видны одновременноДа? И как в такую ситуацию попасть? Хотя и в этом случае ничего страшного, если б Visible корректно работал.
Да? И как в такую ситуацию попасть?Если ТС закрепить у края экрана.
Если ТС закрепить у края экрана.Я так понял, что это возможно только если ТС растяжим? На дугих скинах меню "прикрепить" не появляется.
Я так понял, что это возможно только если ТС растяжим? На дугих скинах меню "прикрепить" не появляется.Так точно
А хотел я плейлист перенести в миниплеер, когда тот на экране, и обратно в галавное окно при возврате.
Я так и подумал.Разве плохая идея? Скин можно в настоящий трансформер превратить!
Разве плохая идея? Скин можно в настоящий трансформер превратить!
Проблема в том, что можно увидеть сразу два окна. Необязательно закреплять мини-плеер, можно закрепить главное окно.Я понял это, но если Visible=true будет однозначно соответствовать присутствию ТС на экране, то и пускай плейлист будет в нём. Тем более, что это можно сделать опционально в настройках скина, а там - пусть пользователь решает, где ему нужнее плейлист.
1. Да, TASEBindings - наследник от TComponent. Сборка с его поддержкой будет сегодня-завтра.Т.е. объявлять эту переменную надо как TASEBindings ?
Т.е. объявлять эту переменную надо как TASEBindings ?
А Bindings по структуре сходно с типом Record ?
Не могу вкурить по поводу контекстного меню. Можно ли добавлять/изменять функции в нем?на данный момент нет, в будущем будет можно (https://www.aimp.ru/blogs/?p=551)
И почему я не могу выбрать popupmenu для контейнера, хотя оно всплывает по всему телу скина?это не предусмотрено: контекстное меню тела скина жёсткое
Если процедуры BeginUpdate / EndUpdate относятся ко всему контейнеру, то должны ли они замораживать все прорисовки/изменения дочерних элементов этого контейнера?
Или надо для каждого компонента прописывать эти процедуры?
Погоди, так ты ж спрашиваешь Bindings у провайдера, а не у элемента фона или элемента управления. Поэтому ошибка-то и возникаетТак, получается, провайдерами управлять нельзя?
3. Как можно собрать всю инфу о плейлисте ("Кол-во треков / Общее время / Размер") и выводить в 1 строчку?Возвращаюсь к своему вопросу, может с помощью пользовательских провайдеров можно как-то вывести информацию: Count, Duration, Size в 1 текстовую метку?
Возвращаюсь к своему вопросу, может с помощью пользовательских провайдеров можно как-то вывести информацию: Count, Duration, Size в 1 текстовую метку?StringOperatorConcatenator должен помочь.
Возвращаюсь к своему вопросу, может с помощью пользовательских провайдеров можно как-то вывести информацию: Count, Duration, Size в 1 текстовую метку?С этим как раз проблем нет - всё что угодно можно в одну строку собрать (см. влож.)
С этим как раз проблем нет - всё что угодно можно в одну строку собрать (см. влож.)Ух ты! спасибище!
Только, ИМХО, это не слишком хорошо - ширина её будет здорово прыгать, следовательно и читать её неудобно.
StringOperatorConcatenator должен помочь.Спасибо.
1) Какую связь с каким провайдером нужно установить для обнуления счетчика.Action кнопки связать с провайдером-счетчиком, в параметрах связи указать просто 0. При нажатии на эту кнопку состояние счетчика сброситься (запишется 0).
2) Как сделать индикацию светодиодом к элементамНужно добавить чекбокс, назначить соотв. текстуру в виде светодиода (с двумя наборами кадров: первый набор - св. выключен, второй - включен), связать State этого чекбокса с нужным провайдером и его точкой доступа State (по аналогии с кнопкой повтора или случайного воспроизведения, например).
отключение звука, бесконечное воспроизведение одного трека, случайный трек, SleepBtn, PrevBtn и NextBtn помогите пожалуйста, очень нужно.Откройте стандартный скин редактора и посмотрите связи.
А нельзя поконкретнее, я еще не очень разбираюсь в провайдерах и слова " нужный провайдер" мне ни о чем не говорят. По счетчику. Я взял стандартную кнопку плей , она обнуляет, но как отключить саму функцию плей? или нужно связать её с другим провайдером? с каким? и как? По светодиодам. Текстуру из светодиодов я уже сделал до того как к вам обратился, это я понял. В стандартном скине есть только образец на плей стоп, а как сделать светодиоды к пред. трек и след. трек и OpenBtn? С отключением звука, повтором трека, и случайным треком я уже разобрался, сделал. А в тех видимо другой принцип. Помогите пожалуйста.По последнему вопросу, про кнопки перемотки, открытия файлов и подобным, не транслирующим своего состояния по State: светодиод должен быть частью кнопки, где третий кадр потображает его включенное состояние.
Спасибо! я так и делал, но думал, что можно по другому, ведь иногда индикатор находится далеко от кнопки и очень трудно попасть в размер, и при нажатии даже без воспроизведения светодиод светится. А что насчет обнуления?Как я понимаю, речь идёт о счётчике воспроизведения - TrackPosition. Иного способа, как начать воспроизведение сначала, нет. Т.е. актуально лишь в процессе воспроизведения, и без режима Play неактуально. Разве что обнулять нажатием Stop.
На скине маяк 232 кнопка сброса счётчика не запускает воспроизведение, а просто сбрасывает счетчик во время воспроизведения, а следовательно и запускает трек сначала, ещё раз подчеркиваю этой кнопкой воспроизведение не включишь, а вот как это делается я и спрашиваю.См. тестовый пример из вложения.
На скине маяк 232 кнопка сброса счётчика не запускает воспроизведение, а просто сбрасывает счетчик во время воспроизведения, а следовательно и запускает трек сначала, ещё раз подчеркиваю этой кнопкой воспроизведение не включишь, а вот как это делается я и спрашиваю.Там две кнопки, расположенных "этажеркой". Одна, сбрасывающая счётчик во время воспроизведения и связанная по Action с провайдером acPlayerPlay (фактически дублирующая кнопку Play), видима лишь во время воспроизведения (связь Visibility кнопки с State провайдера prvPlayerState, параметры связи: value=1). Вторая - без биндинга - видима в режимах стоп и пауза (связь Visibility кнопки с State провайдера prvPlayerState, параметры связи: not value=1), т.е. кнопка-пустышка - нажимается, но ничего не делает, ни счётчик не сбрасывает, ни воспроизведение не запускает.
Артём, я смотрю - тема про индикаторы уровня удалена, а вопрос с дробными значениями скоростей решаться будет?
Я уменьшил интервал таймера, сейчас целые значения покрывают больший диапазон. Если этого не хватит - тогда буду думать над дробными значениями.Вот и мне показалось, что сейчас даже при минимальном значении скорости обратного хода = 1, уровень спадает заметно быстрее.
Ещё один вопрос можно? Как сделать, чтобы текстура корпуса аудиокассеты изменялась. сейчас я установил текстуру мк -60, у меня есть ещё несколько таких же размеров пиксель в пиксель. В скине Маяк 232 они меняются кнопками Fe,FeCr и Cr, у меня тоже эти кнопки пустуют. Научите пожалуйста.В аттаче пример для переключения трёх кассет
Подскажите пожалуйста, возникла такая проблема. На кнопку "запись" я посадил функцию "копировать файл в буфер" эта кнопка находится под кассетоприёмником, а индикатор "Запись" находится далеко от кнопки. Индикация светодиод сейчас идёт вместе с кнопкой,а отдельная индикация не предусмотрена как мне сказали, возможно ли какое нибудь решение связать надпись с кнопкой?Что имеется в виду под связью кнопки из надписью? Что должно быть?
должен включатся индикатор, но он далеко от кнопки.Индикатор должен загораться только в момент нажатия на обычную кнопку? При отпускании кнопки индикатор должен гаснуть? Вариант только один - делать огромную, почти прозрачную текстуру, где в одном месте будет нарисована кнопка, а в другом - индикатор, при чем только на третьем кадре (который отвечает за нажатое состояние кнопки)
Ещё вопрос. Регулятор громкости делаю на основе TESESliderMasked круглый, установил связи с prvVolume, все работает, но после замены стандартной текстуры на свою с таким же количеством кадров, после сборки скина регулятор громкости не реагирует совсем , в чём причина?Последним кадром должен быть кадр маски. Проверьте его.
В следующих версиях SE нужно бы исправить этот недостаток.Это не недостаток.
должен включатся индикатор, но он далеко от кнопки.Если индикатор будет показывать включенную функцию (к примеру, включена запись радио), то можно его включать с помощью этой функции.
Была идея создать боковой контейнер-сайдбар с плавным "выдвижением", сперва думал применить многостраничную группу с двумя контейнерами - первый с нулевыми размерами, второй - полноценный контейнер и выставить свойство анимации, но увы анимация в таком случае не срабатывает.Так сделай такой же контейнер, но пустой.
Правильно ли я понял, что анимация в многостраничных группах срабатывает только в том случае, если оба контейнера имеют одинаковые размеры?
Так сделай такой же контейнер, но пустой.А зачем мне дырка в скине на месте этого пустого контейнера?
А зачем мне дырка в скине на месте этого пустого контейнера?Я понял так, что тебе нужен выезжающий сайд-бар сбоку от главного окна по аналогии с эквалайзером. Когда-то пытался аналогичную проблему решить с индикаторами, но если группу прятать, то главное окно прыгает, что не приемлимо.
Хотя, как вариант - разместить эту группу в контейнере, который будет поверх всех других.
Я понял так, что тебе нужен выезжающий сайд-бар сбоку от главного окна по аналогии с эквалайзером. Когда-то пытался аналогичную проблему решить с индикаторами, но если группу прятать, то главное окно прыгает, что не приемлимо.Нет. Сайдбар внутри окна плеера. Вот пример (нажимать вверху на большую шестеренку). Получилось очень даже неплохо, по типу как в модерн-приложениях панель настроек :)
Вот пример (нажимать вверху на большую шестеренку).Возле кнопки "MENU"? У меня открывается окно настроек, больше ничего не происходит ???
Возле кнопки "MENU"? У меня открывается окно настроек, больше ничего не происходит ???Справа от кнопки, которая вызывает настройки, текстовая метка.
Справа от кнопки, которая вызывает настройки, текстовая метка.Ага, нашёл. Круто :)Наверное шрифт не применяется...Из-за того, что текст в метках исчезает, если плеер в режиме стоп.
Мда, нужно в окне выбора шрифтов как-то разделять встроенные и системные шрифты...Сортировка шривтов (https://www.aimp.ru/forum/index.php?topic=45897.0).
Подскажите пожалуйста, возникла такая проблема. На кнопку "запись" я посадил функцию "копировать файл в буфер" эта кнопка находится под кассетоприёмником, а индикатор "Запись" находится далеко от кнопки. Индикация светодиод сейчас идёт вместе с кнопкой,а отдельная индикация не предусмотрена как мне сказали, возможно ли какое нибудь решение связать надпись с кнопкой?Логичнее было бы оставить кнопке "Запись" её родную функцию (провайдер acPlayerRadioCapture), а индикатор сделать двухкадровым TASEDigitsDisplay, передав State означенного провайдера на DisplayValue получившегося индикатора.
Как ещё один костыльный вариант выдвижения контейнера, но уже на скриптах.Спасибо, поковыряю. Но пока стараюсь обходится без скриптов.
Нет предела кривизны решений! ;D
Только начальный момент неприятный - панель сама выезжает, т.к. таймер при запуске уже тикает.
Как ещё один костыльный вариант выдвижения контейнера, но уже на скриптах.К сожалению, в таком подходе есть недостаток - если во время анимации панели нажать повторно кнопку ее вызова - анимация прекращается и панель застревает. Но думаю, это можно исправить в скрипте.
Нет предела кривизны решений! ;D
Только начальный момент неприятный - панель сама выезжает, т.к. таймер при запуске уже тикает.
1. Можно ли в скрипте получить размеры элемента через PlaceInfo?
К примеру, панель, растянутая по всему контейнеру. Меняются размеры контейнера в плеере, а значения PlaceInfo панели остаются прежними, какими были в редакторе.
2. Можно ли в скрипте получить размеры контейнера?
Для каких целей это нужно? Опиши задачу.Для перемещения, изменения размеров, расположения элементов. Должен же метод Get возвращать их размеры, отступы, анкоры - вроде так задумано (и всправке описано), но, подозреваю, что не только с панелью, но и с другими элементами это не работает.
К сожалению, в таком подходе есть недостаток - если во время анимации панели нажать повторно кнопку ее вызова - анимация прекращается и панель застревает. Но думаю, это можно исправить в скрипте.Это я специально пока оставил, чтоб можно было поиграться. В скрипте можно сделать так, что повторное нажатие воспримется только после выезда контейнера.
Для перемещения, изменения размеров, расположения элементов. Должен же метод Get возвращать их размеры, отступы, анкоры - вроде так задумано (и всправке описано), но, подозреваю, что не только с панелью, но и с другими элементами это не работает.
Если текстовой метке назначить шаблон, то этот текст не отображается в метке, пока не свяжешь ее с провайдером prvPlayingInfo например. Но в режиме Стоп текст все равно не отображается =(Добавил текстовую метку в Eternity, в Template написал "тест", поменял размер, цвет и тень шрифта, больше ничего не делал, текстовую метку никуда не привязывал - текст всегда отображается ???
PlaceInfo говорит о исходных параметрах, о реальном расположении (координатах) там нет информацииТ.е. в запущенном скине размеры элементов узнать невозможно? Для чего тогда сделан метод Set('PlaceInfo...), как можно что-то менять, не зная, что было до этого?
Добавил текстовую метку в Eternity, в Template написал "тест", поменял размер, цвет и тень шрифта, больше ничего не делал, текстовую метку никуда не привязывал - текст всегда отображается ???Я вспомнил - статический текст отображается всегда, а вот если указан какой-то макрос - текст будет пропадать...
Т.е. в запущенном скине размеры элементов узнать невозможно? Для чего тогда сделан метод Set('PlaceInfo...), как можно что-то менять, не зная, что было до этого?
Посмотри, как меняются PlaceInfo в редакторе - мы оперируем якорями, отступами и размером, а не работаем с абсолютными координатами, тут так же. Ты опиши свою задачу, так проще будетТак, я и не говорил про абсолютные координаты, речь идет о PlaceInfo.Size.Width, PlaceInfo.Margins.Left и т.п.
А задача - получить эти самые PlaceInfo.Size.Height, PlaceInfo.Size.Width при изменении размеров элемента.
Если положение элементов задается только якорями, то Size.XXX не меняются.Т.е., возвращаясь к первому вопросу: хоть в скине размер элемента изменился, но PlaceInfo.Size.Height, PlaceInfo.Size.Width всегда будут возвращаться изначальными?
Т.е., возвращаясь к первому вопросу: хоть в скине размер элемента изменился, но PlaceInfo.Size.Height, PlaceInfo.Size.Width всегда будут возвращаться изначальными?
И никакими более методами размеры элементов, контейнеров не добыть?
Опиши конкретно задачу, когда надо знать именно координатыАртём, ещё раз повторю: мне не нужны координаты, нужны размеры (ширина, высота), отступы элементов.
Я вспомнил - статический текст отображается всегда, а вот если указан какой-то макрос - текст будет пропадать...
Артём, ещё раз повторю: мне не нужны координаты, нужны размеры (ширина, высота), отступы элементов.
... Раз уж невозможно пропорционально ресайзить контейнер с кавером, то, хотя бы, чтоб сам кавер оставался всегда квадратным, независимо от пропорций окна...А, может, можно на уровне плеера решить эту проблему? Добавить свойтво типа FixedSize для кавер-арта, а в программе рассчитывать его размеры и отступы от родителя.
А, может, можно на уровне плеера решить эту проблему? Добавить свойтво типа FixedSize для кавер-арта, а в программе рассчитывать его размеры и отступы от родителя.
У тебя там и событие, наверняка, подходящее есть (OnResize), а скрипт придётся вызывать непрерывно по таймеру - другого способа, к сожалению, нет, можно, конечно, исхитриться, исключить постоянную перерисовку кавера и в скрипте, но опять всё это как-то кривовато...
Насколько это реально? Уж больно неприглядно смотрятся обложки в непропорциональном виде.
Думаю, это поведение для v4 можно изменитьОК, было бы не плохо.
Можно ли, прописать в текстовую метку, информацию о плейлисте. В виде макросов.
https://www.aimp.ru/blogs/?p=550 StringOperatorConcatenator
Я имел введу типа [%Число треков / %Размер / %Длительность] Не создавая провайдер.Во встроенном скине всё это есть.
Во встроенном скине всё это есть.
Мне надо, что бы это все, было в одной текстовой метке.Сейчас нет, в будущем можно будет.
Мне надо, что бы это все, было в одной текстовой метке.Ну, тогда только ждать 4-ую версию https://www.aimp.ru/blogs/?p=550
Наконец закончил скин :). Подскажите как выложить, только умоляю не отсылайте к правилам, я уже читал и ничего не понял. Заранее благодарен :).Посмотрите другие темы с обложками, после этого создайте тему в нужном разделе, правильно указав название темы. Не нужно бояться, никто не забанит =)
... Тему пытаюсь создать в разделе "Обложки", может быть не там?Неужели уж так трудно прочитать правила? Первым пунктом там идёт:
1.1 Создавать темы с обложками, находящиеся в процессе создания, нужно в подразделе "Обложки в стадии разработки (in the development)". По завершению работы над скином, присваивать статус - [FULL].Что здесь непонятного? Вроде, всё по-русски написано, или Вы ждёте что вам на каждый вопрос будут цитировать эти правила?
Подскажите пожалуйста связь, чтобы отдельной кнопкой визуализировать либо прятать элемент без включения других функций, то есть, просто, чтобы при нажатии на кнопку элемент появлялся, а при повторном нажатии исчезал.Нужно создать пользовательский провайдер-счетчик, указать ему модуль 2, связать видимость нужного элемента с этим провайдером, кнопку так же связать с этим провайдером (action кнопки со свойством Result провайдера), указав в свойствах связи not value (например).
Правильно ли я понимаю, что менять ширину / высоту CAD (и вообще любого элемента управления) напрямую из скриптов никак?
Нужно оборачивать в контейнер? Потому что вроде только у элементов фона можно менять SizeMinimal.Height / SizeMinimal.Width.
Как сделать несколько слайдеров, привязанных к одной точке, не за что не отвечающих?Счётчик.
Счётчик.
Тогда они не реагируют.Не реагируют на что? Модуль счётчика задан?
В аттаче проект. Поставил крутилку, связал её со счетчиком, ткнул Clone сколько раз нужно.
При вращении любой - остальные повторяют её движение. Это тебе нужно?
У элементов управления положение регулируется через PlaceInfo. В блоге был пример на этот счетТочно, спасибо, нашёл в справке PlaceInfo.Size.Height / PlaceInfo.Size.Width.
... Я изначально предполагал, что и скрипты, и все элементы должны быть в одном, синхронном состоянии на момент применения скина, т.е. потребности в инициализации не должно быть. Надо разобраться, в чем причина.Сейчас, в основном, это конфликты с файлом AIMP-SkinLayout.ini когда запускаешь плеер с тем же скином, что и использовался. Состояния счётчиков в него записываются, а в отдельных случаях, как и вышеприведённом примере, они нужны дефолтными (а, может, и ещё какими-то?).
Я согласен с тобой, что в будущем может быть острая потребность в обработчиках для событий элементов, но это отдельная и большая задача.Мне кажется, мы к этому неизбежно придём, тогда возможности скин-движка станут вообще безграничными.
Сейчас, в основном, это конфликты с файлом AIMP-SkinLayout.ini когда запускаешь плеер с тем же скином, что и использовался. Состояния счётчиков в него записываются, а в отдельных случаях, как и вышеприведённом примере, они нужны дефолтными (а, может, и ещё какими-то?).
В том же примере, если закрыть плеер с выдвинутым по кнопке "Show" контейнером, а потом вновь запустить - контейнер окажется скрытым и клик по кнопке ни к чему не приведёт, т.к. состояние счётчика соответствует выдвинутому контейнеру.
Т.е. проблема ровно в том, что счетчикам не хватает условия - сохранять значение в конфиг или нет, я правильно понимаю?Возможно, и это было бы решением, в моём, конкретном случае тогда сработал бы скрипт. Но не кривовато ли это будет?
Давайте попробуем ввести события, посмотрим, что из этого получится. В ближайшем билде добавлю события OnLoaded и OnResizeПоигрался с OnResize. Теперь не нужен стал и таймер, и счётчики для запоминания размеров окна и скрипт до безобразия упростился, и, самое приятное, что он срабатывает при старте плеера, и при смене скина. Песня!
Может я где-то пропустил, тогда прошу прощения, но я не могу понять, как сейчас отображается рейтинг/оценки, какие кадры за что отвечают?
Почему OnResize только у TASEPanel?
Элемент MLTable. Что за свойство у него StyleFilterBox (и входящие группы свойст), где это можно увидеть?
Возможно одной кнопкой включать\выключать режим "stay on top" у main window и tray control одновременно? Без правой клавиши мыши.Сейчас - нельзя.
Сейчас - нельзя.Я понял. ПКМ наше всё.
Подскажите пожалуйста, я сделал кнопку плей из блока кнопок плей-пауза и стоп, для того, чтобы при нажатии на плей она отображалась нажатой как на BECHA-306, в свойствах связей установил значения , но при нажатии на плей кадр возврата не успевает исчезнуть и отображается, смазывая весь эффект, а кнопка стоп первый кадр имеет нажатый,что можно сделать? или я совсем не так делаю, и ещё, как таким же образом можно сделать кнопку"пауза" Спасибо!Дёрганье кнопок при переключении режимов обусловлены задержкой срабатывания prvPlayerState, и с этим ничего пока сделать невозможно. Для кнопки ПАУЗА связь на State нужно брать из State prvPlayerState, прописав в связи Value=2. Нажатый СТОП из того же набор кадров получится, если в связи указать Not Value. Если для кнопки ПЛЕЙ прописать Value>0, то нажатой она будет и в режиме ПАУЗА. Экспериментируй...
Можно ли как-то переименовать "Локальные файлы" в "Фонотека" или "Локальная фонотека"?
текущее название мне не нравится
Фонотека - это общение название. В ней могут быть не только локальные файлы.Я понимаю, но "Локальная фонотека" на мой слух приятнее.
Здравия всем. Есть счетчик с кол-вом значений 5, есть пять кнопок (TASESwitch), каждая должна включать соответствующую ей позицию, вопрос: какие параметры надо прописывать у Action кнопок?И тебе здравия. В параметрах просто поставь нужную цифру 0-4, выражений не каких не нужно
И тебе здравия. В параметрах просто поставь нужную цифру 0-4, выражений не каких не нужноБлагодарю ;) +1
Что изменилось в новых сборках, что реализовано из предложений? Коментариев рядом со ссылками на загрузку нет, меня неделю дома не было, может, что то интересное пропустил...
У prvPlayingFileInfo есть свой обработчик для CoverArt дисплеев.Т.е. ничего не выйдет из этой затеи?
А что именно ты хочешь сделать?Расположить поверх ковер-арта дисплей визуализации, но, так как дисплей визуализации перекрывает доступ для ЛКМ у ковер-арта, хотел повесить эту функцию на дисплей визуализации, т.е.:
...связь с точкой доступа CoverArt провайдера prvPlayingFileInfo через Action дисплея визуализации...Можно сделать кнопку открытия обложки альбома поверх дисплея визуализации, но в данном случае хотелось бы открывать обложку просто кликнув по каверу.
Попробуй у дисплея визуализации выставить прозрачную маску для хит-теста.Не работает. Так же меню дисплея визуализации недоступно когда обложки альбома нет. Получается, вышеобозначенная связь делает дисплей визуализации недоступным когда обложки альбома нет, без этой связи есть доступ к меню когда кавер отсутствует.
Не работает. Так же меню дисплея визуализации недоступно когда обложки альбома нет. Получается, вышеобозначенная связь делает дисплей визуализации недоступным когда обложки альбома нет, без этой связи есть доступ к меню когда кавер отсутствует.Как-то так, но при ЛКМ работает работает и дабл-клик ПРИ наличии обложки
Как-то так, но при ЛКМ работает работает и дабл-клик ПРИ наличии обложкиВот! Можно запустить визуализацию при отсутствии кавера, так же можно открыть его кликнув по изображению, чего я, собственно, и хотел. Спасибо! +++++
Т.е. активность установлена всегда активна
Вопрос. Подскажите пожалуйста, фон скина находится в Main, а нужно вставить ещё несколько сменяемых фонов. Удалил текстуру из Main, создал многостраничную группу, и три подпункта LayoutContainer, LayoutContainer1 и LayoutContainer2 вставив в них текстуры фонов, вроде бы как получается, но почему то плейлист уходит вниз в большой отрыв о основного окна, что я делаю ни так? Спасибо.Можно и не удалять текстуру из Main, а сделать её многокадровой и переключать кадры через связь State у контейнера Main
Прошу, если можно поподробнее?в аттаче проект
Наверное проще разместить "стопкой" нужные элементы, и их видимость связать с видимостью нужного контейнера в многостраничной группе.Хотел это предложить. Но видимость элемента нужно связывать с конкретным состоянием счётчика (для моего примера)
Tarik, а как это сделать конкретно, многостраничную группу я уже пробовал, и у меня чёрт знает что вышло, смещение и т.д., я не пойму,а почему эти элементы присоединенные к тому же пользовательскому провайдеру, что и Main с многокадровой текстурой не работают? ведь должны же? Фон же меняется?, И всё таки как же это сделать, помогите :-\Для многостр. гр. надо задавать размеры (текстуры в общем случае могут быть и неодинаковы), для контейнеров выравнивание, как и для элементов внутри их и привязки.
Дайте адрес, я пришлю проект и элементы скинаПрисылайте
Soolo, получили ли вы проект? Можно ли что нибудь сделать?Получил. Ближе к 21-22 по МСК отвечу.
В принципе,я уже сделал, так, что рамка меняет цвет синхронно с фоном, но индикаторы получились сверху самой рамки и я никак не могу запихнуть их под неё. Можно ли как нибудь поменять их местами? Отправил вам доработанный проект.отправил на почту проект: использовал цифровой дисплей, его можно расположить поверх индикаторов, в отличие от фона, который всегда фоном и останется.
Здравствуйте. Вопрос такой. Каким чистотам соответствуют все 18 полос эквалайзера. И можно ли самому указать чистоту.самому чАстоту указать нельзя
Они там и с верху, и снизу. И какие-то не точные. А если мне нужна промежуточная частота?с одной стороны они не разместились бы, слишком плотно вышло бы
как сделать что бы менялась кнопка при нажатии? хочу сделать что бы при нажатии на кнопку паузы менялась иконка и естественно обратно тожеоткройте справку
Это панелька, что отображает прогресс фоновых операций фонотеки, если они длятся больше 2 секунд.Спасибо, разобрался, вроде. А кроме добавления файлов в фонотеку, могут быть ещё какие-либо фоновые операции?
Спасибо, разобрался, вроде. А кроме добавления файлов в фонотеку, могут быть ещё какие-либо фоновые операции?
И обязательно ли наличие этой панели в скине?
После упразднения элемента PlaylistBox его роль в старых скинах стала выполнять кнопка, связанная с prvPlaylistManager.
Но почему-то аналогичная связка кнопки с prvMusicLibraryManager/Datasources не работает, к сожалению. Подозреваю, что из-за отсутствия соответствующего меню.
Вопрос возник всвязи с тем, что табконтрол с его единственным табом занимает слишком много места в фонотеке.
После упразднения элемента PlaylistBox его роль в старых скинах стала выполнять кнопка, связанная с prvPlaylistManager.
2. В принципе, можно сделать. Но ведь далеко не факт, что по дизайну сойдется.Ну, почему? Ведь, в любом случае будешь стараться сделать это окошко в стиле контекстного меню (иначе, ИМХО, неразумно), влючая и чекбоксы (правда, какая-то текстура у них мудрёная).
Ну, почему? Ведь, в любом случае будешь стараться сделать это окошко в стиле контекстного меню (иначе, ИМХО, неразумно), влючая и чекбоксы (правда, какая-то текстура у них мудрёная).
Текстуру ColumnHeader тоже заимствуешь из таблицы фонотеки.
Правильно ли я понимаю, что нельзя сделать полупрозрачной подложку встроенной текстовой метки слайдера (та, что отображает скрываемый таймер на "волне" в Bliss'е)?
Нет, нельзя. Это можно сделать с помощью обычных текстовых меток.Да, только придётся морочиться с шириной метки - вручную менять её при разном количестве цифр в таймере.
Да, только придётся морочиться с шириной метки - вручную менять её при разном количестве цифр в таймере.
Зачем? если фон прозрачный - достаточно просто выставить ей максимальный размер.Нет, я про случай, когда подложка именно полупрозрачная.
Прошу прощения, проглядел это слово в исходном сообщение. Согласен, сделаю отдельное свойство с цветом для подложки под текстом.Ого, спасибо.
If I already have created skin and when you install the name is Eternity, as you change the name and picture?Open Preferences
And as you change the picture?(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=44625)
Что будет, если выбрать в скине у шрифта качество рендеринга Natural ClearType и применить этот скин на Win XP, который, вроде как, не поддерживает "натуральный" ClearType?
Или ничего страшного не будет и будет применён обычный ClearType?
Как это делается?Ссори за оффтоп, но маска слоя в помощь, если я правильно понял то что тебе нужно сделать.
Надо в каждом следующем кадре PSD удалить по кругу 1 пиксель ( получается 2 по высоте и 2 по ширине), пробовал искать в фотошопе не нашел, уменьшением нельзя, изменяется текстура, как это делается?Если рисовать в векторе, то шумовой градиент при трансформации искажаться не будет (он будет меняться, но витки ленты остануться различимыми).
Почему бы не сделать рамку, как сделано в скине по умолчанию?Концепция скина такая, что он состоит из растянутых во всю ширину окна блоков. А рамка - это полупрозрачная линия, которая накладывается поверх всех блоков, имитируя блик по краям окна.
Как в Bliss'е сделано приклеивание дочернего окна с тенью к главному окну?
Имею ввиду тень, которая задана текстурой в родительском контейнере, а в нём дочерний контейнер с "отступами" для того, чтобы тень было видно.
Или в случае с окнами плейлиста и фонотеки тень сделана по другому?
У DockSite заданы ContentExtendsAlignmentMargins? Спасибо, получилось.
Нет, именно ContentExtendsО, новое свойство у DoskSite, оказывается, я его не заметил. Спасибо.
AlignmentMargins свигает сам контейнер, а ContentExtends обрезает окно, которое придочено.Понятно, спасибо.
test_container.Parent := FindObject('W_equalizer');
Invalid class typecast
ПробуйРаботает.
Был в отпуске и многое пропустил, посему вопрос: Предложение Black_AVP о возможности сохранения частей скина для повторного использования ещё не реализовано? Меня в первую очередь интересует сохранение и использование в дальнейшем Фонотеки. Мысль, что её каждый раз придётся редактировать заново, вводит в ступор.Можно же делать экспорт ресурсов. Единственный минус - все текстуры скидываются в одну папку.
Можно же делать экспорт ресурсов. Единственный минус - все текстуры скидываются в одну папку.Там не только картинки в куче, а мне нужна только Фонотека. Или Плейлист.
... Предложение Black_AVP о возможности сохранения частей скина для повторного использования ещё не реализовано?А где это предложение, что-то уже и не вижу...
А где это предложение, что-то уже и не вижу...Добавить возможность сохранять отдельные компоненты проекта (https://www.aimp.ru/forum/index.php?topic=46047.0).
Прописать параметры в onLoaded - не помогает?В onLoaded скрипт будет срабатывать всегда при загрузке скина, а мне это наоборот не нужно.
Можно ли сделать, так чтобы при применении скина со скриптом, значение счётчика которого равно 1, не срабатывал скрипт?пока что, чисто академический.
Ключевая функция для доступа к элементам скина и провайдерам (как к пользовательским, так и к внутренним).
Синтаксис:Code: [Select]function FindObject(const ObjectName: string): TComponent;
procedure Execute(var State: Integer);
var
window : TComponent;
window_is_max : boolean;
begin
window := FindObject('AIMPMainForm');
if window <> nil then
begin
window_is_max := window.Get('Maximize');
if window_is_max then
window.Set('Maximize', 'False');
end;
end;
Пишет, что не найдено свойство "Maximize", то есть скрипт, получается, обращается к окну, а не к провайдеру.
Так и к источнику данных провайдера тоже напрямую подключиться нельзя.Тогда в справке неправильно написано?
procedure Execute(var State: Integer);
var
container, B_max : TComponent;
B_max_bindings : TASEBindings;
window_is_max : boolean;
min_H, min_W, max_H, max_W : integer;
begin
container := FindObject('liMain');
B_max := FindObject('cmfButtonMaximize');
if container <> nil AND B_max <> nil then
begin
B_max_bindings := B_max.Get('Bindings');
//восстановление окна, если оно развёрнуто на весь экран
window_is_max := B_max_bindings.GetDataAsBoolean('State');
if window_is_max then
B_max_bindings.ExecuteAction('Action');
//считывание мин. и макс. размеров контейнера
min_H := container.Get('SizeMinimal.Height');
min_W := container.Get('SizeMinimal.Width');
max_H := container.Get('SizeMaximal.Height');
max_W := container.Get('SizeMaximal.Width');
//запись в макс. размеры контейнера его мин. размеров
container.BeginUpdate;
container.Set('SizeMaximal.Height', min_H);
container.Set('SizeMaximal.Width', min_W);
container.EndUpdate;
//восстановление первоначальных макс. размеров
container.BeginUpdate;
container.Set('SizeMaximal.Height', max_H);
container.Set('SizeMaximal.Width', max_W);
container.EndUpdate;
end;
end;
Первый вопрос:
Я просто не могу понять, почему в одном случае при применении скина скрипт со счётчиком равным 1 срабатывает (например, в скрипте открывается окно), а в другом - нет (скрипт меняет размеры контейнеров)?
... при применении скина ...чем оно отличается от загрузки?
Так ты погляди, тут ты обращаешься к кнопке, к ее связям, а не напрямую к провайдеру.Я это понимаю. Просто пробую разными способами сделать кнопку, сжимающую окно до минимума.
А что значит тогда в твоём вопросе:чем оно отличается от загрузки?Ничем, просто я по разному написал.
По вопросу - ничего не могу сказать, нужно смотреть на оба случая, какие факторы влияют. Предполагаю, что дело может быть в настройках, которые уже сохранились в конфиг скина.Позже распишу подробнее, с примером.
Меня интересует, проще это сделать никак нельзя? Только ручной заменой макс. размеров корневого контейнера окна на значения из мин. размеров?Можно попробовать запрещать AllowResize.
Можно попробовать запрещать AllowResize.Работает, спасибо.
procedure Execute(var State: Integer);
var
container, B_max : TComponent;
B_max_bindings : TASEBindings;
window_is_max : boolean;
begin
container := FindObject('liMain');
B_max := FindObject('cmfButtonMaximize');
if container <> nil AND B_max <> nil then
begin
B_max_bindings := B_max.Get('Bindings');
//восстановление окна, если оно развёрнуто на весь экран
window_is_max := B_max_bindings.GetDataAsBoolean('State');
if window_is_max then
B_max_bindings.ExecuteAction('Action');
container.BeginUpdate;
container.Set('AllowResizeByHeight', 'False');
container.Set('AllowResizeByWidth', 'False');
container.EndUpdate;
container.BeginUpdate;
container.Set('AllowResizeByHeight', 'True');
container.Set('AllowResizeByWidth', 'True');
container.EndUpdate;
end;
end;
Я просто не могу понять, почему в одном случае при применении скина скрипт со счётчиком равным 1 срабатывает (например, в скрипте открывается окно), а в другом - нет (скрипт меняет размеры контейнеров)?
По вопросу - ничего не могу сказать, нужно смотреть на оба случая, какие факторы влияют. Предполагаю, что дело может быть в настройках, которые уже сохранились в конфиг скина.
Позже распишу подробнее, с примером.
Задать из скрипта ширину/высоту контейнера никак нельзя?И это, в принципе, можно сделать обходными путями. Тем же изменением SizeMinimal и SizeMaximal.
Как сделать прогресс подгрузки онлайн контента.Какого онлайн контента?
Как сделать прогресс подгрузки онлайн контента.Только в виде вэйвформ дисплея
Какого онлайн контента?
Только в виде вэйвформ дисплея
Я где-то на форуме читал, что-то про вторую полосу прогресса. Как везде в интернете. Она обычно серая.Тема-предложение - 3-й фрейм Progress/Volume бара (https://www.aimp.ru/forum/index.php?topic=23285.0)
Что это?TASEWaveFormDisplay. Но все равно это не решение.
Как обратиться к свойствам TASEBindingLink? По справке не понял.Всё, разобрался:
Нужно сначала получить доступ к TASEBindings? Потом через LinkFind?
procedure Execute(var State: Integer);
var
button : TComponent;
button_bindings : TASEBindings;
button_binding_link : TComponent;
str1, str2 : string;
begin
button := FindObject('B_gw_maximize');
if (button = nil) then
Exit;
button_bindings := button.Get('Bindings');
button_binding_link := button_bindings.LinkFind('Action');
str1 := button_binding_link.Get('Expression');
str2 := button_binding_link.Get('SourcePin');
ShowMessage(str1);
ShowMessage(str2);
end;
function <TASEBindings>.LinkFind(const PinName: string): TASEBindingLink
Ребят, откуда можно снять информацию о том что плеер прикреплён к/за край экрана?Только если окно прикреплено и закреплено (точка доступа Pin нужного окна)
Только если окно прикреплено и закреплено (точка доступа Pin нужного окна)Это я знаю, это не годится...
Как добавить ссылку на окно фонотеки в меню АИМПа?фонотека должна быть отдельным окном
Во всех обложках 2 и 3 версии есть этот пункт в меню, а в собранной мной обложке 4 версии нету
фонотека должна быть отдельным окномВ 2 и 3 версии её не было, но в меню она есть.
В 2 и 3 версии её не было, но в меню она есть.
Потому, что конвертер ее добавляет сам.А для acs4 так нельзя сделать?
А для acs4 так нельзя сделать?С недавнего времени есть в SE второй скин, там есть отдельное окно фонотеки, причём полнофункциональное.
Проблема ещё в том что обложка по умолчанию не содержит MusicLibraryFrame, по этому приходится воссоздавать её.
Может в SE можно сделать команду создоющую этот фрейм "MusicLibraryFrame", как при открытии acs3proj
С недавнего времени есть в SE второй скин, там есть отдельное окно фонотеки, причём полнофункциональное.Это здорово, не заметил.
Действие по ПКМ - это неправильно, развиваться в этом направлении не имеет смысла.Ну почему, смысл есть, но для вывода меню. А вот прямое действие по ПКМ - это только от безысходности.
Ну почему, смысл есть, но для вывода меню. А вот прямое действие по ПКМ - это только от безысходности.
Вообще говоря, далеко не каждое действие можно назначить на ПКМ, собственно, у тебя тут это и произошло - команда не поддерживает вызов по ПКМ, соответственно ПКМ обработал элемент-предок.Однако в списке сервисов у точки доступа Action провайдера acPlayerStopAtEnd есть сервис ContextMenu:
Не отключается контекстное меню у acPlayerStop
https://www.aimp.ru/forum/index.php?topic=47822.msg309115#msg309115Артем не может все сообщения отследить. Поэтому не просто так он просит создавать отдельные темы на ошибки
В справке из 863 сборки всё так же. Или я что-то неправильно понимаю?
Я уже всю голову сломал, ни как не могу понять почему плейлист не растягивается по высоте, точнее растягивается только текстура "liPlaylist"А проект?
А проект?Ой я ведь его и хотел, ошибся
Ой я ведь его и хотел, ошибсяНачиная от PlaylistFrame вниз на 4 шага нужно везде ставить laClient
Начиная от PlaylistFrame вниз на 4 шага нужно везде ставить laClientПоможет только для плейлиста. Я сейчас бьюсь над фонотекой.
Начиная от PlaylistFrame вниз на 4 шага нужно везде ставить laClient
Поможет только для плейлиста. Я сейчас бьюсь над фонотекой.М-да, тогда фонотека перестаёт растягиваться... что-то я не так делаю
Я сейчас бьюсь над фонотекой.Если что, я ни фига не смог.
Если что, я ни фига не смог.Да согласен, структуру я облегчил. :)
Структура окна PlaylistFrame - абзац %)
Вопрос такой. Есть три контейнера с видимостью закрепленной на ширину. Как сделать, чтобы когда появляется один контейнер, другие выключались?классическая многостраничная группа (примеры есть в справке)
классическая многостраничная группа (примеры есть в справке)
Как сделать, чтобы когда появляется один контейнер, другие выключались?Связать Visibility других контейнеров с Visibility появляющегося контейнера. Но с автохайдом при этом могут быть приколы, вплоть до зависания плеера.
Связать Visibility других контейнеров с Visibility появляющегося контейнера. Но с автохайдом при этом могут быть приколы, вплоть до зависания плеера.
Можно ли с этим что-нибудь поделать?Нет, те пункты меняют видимость окон, содержащих соответствующие элементы (плейлист, таблица фонотеки). А так как в твоём случае они находятся в одном окне, то получается что они показывают/скрывают одно и то же окно.
Нет, те пункты меняют видимость окон, содержащих соответствующие элементы (плейлист, таблица фонотеки). А так как в твоём случае они находятся в одном окне, то получается что они показывают/скрывают одно и то же окно.
теоретически эти пункты нужно связать с элементами плейлист/фонотека (либо их предками первой ступени), а не с окнами, тогда всё будет работать.
теоретически эти пункты нужно связать с элементами плейлист/фонотека (либо их предками первой ступени), а не с окнами, тогда всё будет работать.Только нужна поддержка "связывания". Тоже хотел написать об этом. Я, если что, "за".
Откуда плеер узнает, что ему нужно показывать при клике по ним?Сделать ручное "связывание" пунктов и видимости фоновых элементов/окон.
Как? Эти пункты ведь никак нельзя настроить.теоретически эти пункты нужно связать с элементами плейлист/фонотека (либо их предками первой ступени), а не с окнами, тогда всё будет работать.
Сам себя опровергну: показать таким способом можно, а вот скрыть...
Скрыть то ладно, а как сделать хотя бы показ? какие связи нужны?теоретически эти пункты нужно связать с элементами плейлист/фонотека (либо их предками первой ступени), а не с окнами, тогда всё будет работать.
Сам себя опровергну: показать таким способом можно, а вот скрыть...
Откуда плеер узнает, что ему нужно показывать при клике по ним?Может можно научить плеер автоматически это определять, если элемент находится в скрытой странице многостраничной группы, то его галочку далать отключённой, а при нажатии на хоткей или чекбокс автоматически делать скрытую страницу активной, как-то так.
Только нужна поддержка "связывания". Тоже хотел написать об этом. Я, если что, "за".Да, это было бы очень к стати
Сделать ручное "связывание" пунктов и видимости фоновых элементов/окон.
Откуда плеер узнает, что ему нужно показывать при клике по ним?Нужно показать, допустим, фонотеку, а значит сделать видимыми всех её предков (показать окно, выбрать нужную страницу в многостраничной группе и т.д.).
Нужно показать, допустим, фонотеку, а значит сделать видимыми всех её предков (показать окно, выбрать нужную страницу в многостраничной группе и т.д.).
Ребят как можно собрать хинты с разных точек и вывести в 1?Это что за экзотический случай такой, что можно хинты от разных элементов слить?
Пробовал через StringOperatorConcatenator, но увы, мои познания в мат. формулах очень не высоки.
Это что за экзотический случай такой, что можно хинты от разных элементов слить?К примеру ЛКМ Главное меню / ПКМ Настройки.
Может, проще свой прописать?
Ребят как можно собрать хинты с разных точек и вывести в 1?Похоже, что именно хинты никак. У меня получилось только это:
Пробовал через StringOperatorConcatenator, но увы, мои познания в мат. формулах очень не высоки.В стандартном скине в SE есть пример использования StringOperatorConcatenator.
И 2 вопрос, откуда забрать хинт с главного меню?Видимо тоже никак. Думаю, хинт в этом случае берётся от контекстного меню.
К примеру ЛКМ Главное меню / ПКМ Настройки.Кстати, интересная идея.
Кстати, интересная идея.вот к стати есть тема https://www.aimp.ru/forum/index.php?topic=38856.0
procedure Execute(var State: Integer);
var
AObject: TComponent;
begin
AObject := FindObject('cmfSeekBar');
if AObject <> nil then
case State of
0:
begin
AObject.Set('TextLabels.Template1', '%time(HMS;:;Z)');
AObject.Set('TextLabels.Template2', '%time(HMS;:;Z)');
end;
1:
begin
AObject.Set('TextLabels.Template1', '%time(;:;Z)');
AObject.Set('TextLabels.Template2', '%time(;:;Z)');
end;
end;
end;
(http://i.imgur.com/aazlYf9.png)
Ребят что нужно сюда дописать, чтобы метки времени трека были поверх WaveFormDisplay?В скрипте используются метки, встроенные в сам слайдер (сикбар).
Это актуально при проигрывании треков из сети
В скрипте используются метки, встроенные в сам слайдер (сикбар).Спасиб, попробую. Но под ним будет прогресс идти, по этому нужна похожая конструкция поверх WaveFormDisplay, но берущая текстуру из cmfSeekBar
Если нужно время поверх WaveFormDisplay, то используй обычные текстовые метки.
Спасиб, попробую. Но под ним будет прогресс идти, по этому нужна похожая конструкция поверх WaveFormDisplay, но берущая текстуру из cmfSeekBarПрозрачная/полупрозрачная текстура текстовой метки не подойдёт? Или я неправильно понял?
Здравствуйте. Подскажите пожалуйста, делаю переключатель плей-стоп и предыдущий- следующий трек на одной ручке-переключателе как у маяка 205. Плей-стоп сделал, но как сюда присадить ещё и переключение треков не соображу, то ,что можно это сделать ясно, но как? Нужно как то сделать, что бы текстура плей при нажатии на перемотку исчезала, а текстура перемотки появлялась, а вот как это сделать? https://yadi.sk/d/Uo8oERmGkEGHkВсе кнопки имеют свои маски-сегменты, первые два кадра кнопки перемотки прозрачные, при нажатии показывается третий кадр, перекрывающий находящийся под ним.
Как всегда огромное спасибо за помощь! всё получилось. Если можно ещё вопрос... У Вас на маяке сделано переключение скорости 9-19 как это сделать?Тут в двух словах не описать, позже в личку кину, в четвёрке, конечно, реализовать это проще.
К сожалению, я в четвёрке ещё не разбирался толком, если можно в 3-ке.В 3-ке только делать два аниматора с разным числом кадров или разными скоростями - решение то на поверхности лежит.
В 3-ке только делать два аниматора с разным числом кадров или разными скоростями - решение то на поверхности лежит.А в "маяке" при переключении скорости изменяется и скорость воспроизведения трека.
А в "маяке" при переключении скорости изменяется и скорость воспроизведения трека.Нет, скорость воспроизведения не меняется, - одна только "видимость" ;D
Нет, скорость воспроизведения не меняется, - одна только "видимость" ;DИначе, это было бы издевательством над слушателем.
Здравствуйте. Вопрос. В скине есть два ползунковых регулятора ВЧ и НЧ соответственно регулировка высокой и низкой частот, подскажите пожалуйста, как их сделать? связывал их с эквалайзером, но получается,что то не то, да и при отключённом эквалайзере они соответственно вовсе не работают. спасибо.В АИМПе нельзя регулировать ВЧ/НЧ как в реальных аппаратах. Можно привязать к регуляторам только отдельные ползунки эквалайзера.
Здравствуйте. Как сделать так, что-бы например был текст, любой, и при изменение громкости, этот текст менялся на уровень громкости? Спасибо.В AIMP4 используется пользовательский провайдер StringOperatorConcatenatorNotificator. Пример - в стандартном скине в редакторе такое сделано для текстовой метки Title.
В AIMP4 используется пользовательский провайдер StringOperatorConcatenatorNotificator. Пример - в стандартном скине в редакторе такое сделано для текстовой метки Title.Спасибо.
Здравствуйте. Как в провайдере Notificator преобразовать числовые значения в буквенные?а можно чуть более развёрнуто?
а можно чуть более развёрнуто?
Ну я про State. Когда его связываешь с Notificator-ом он показывает число, а мне нужно чтобы при определенным значении отображался текст. Я пробовал использовать %IF, но но не работает.%IFEqual(%Value1,1,текст1,текст2)
%IFEqual(%Value1,1,текст1,текст2)
%Value1=1 - отображается текст1, иначе отображается текст2
Может ли кто нибудь помочь?Честно пытался понять проблему, но...
Честно пытался понять проблему, но...Так, походу, это та же проблема, что и в переключателях Маяка-203 https://www.aimp.ru/forum/index.php?topic=47178.msg291261#msg291261
Решения она не имеет.Но может как нибудь можно зафиксировать ручку во втором включенном состоянии "бутерброда" во время паузы?
Как и какой сделать счетчик, чтобы его значения менялось по мере появления и исчезания контейнеров.
Подскажите как с помощью скрипта изменить шрифт и его цвет.
procedure Execute(var State: Integer);
var
PL: TComponent;
begin
PL:= FindObject('Playlist');
PL.Set('Resources.ItemLine1Fonts.Normal.Name', 'Arial');
PL.Set('Resources.ItemLine1Fonts.Normal.Color', $FF0000);
end;
Если в плейлисте, то писанины будет много:
Здравствуйте. Можно ли (и как если можно) задать Visibility по "если и". Например: чтобы появлялась кнопка при двух видимых контейнерах.Используй коммутатор, объедини в нём видимость контейнеров по любому закону (в твоём случае AND).
Используй коммутатор, объедини в нём видимость контейнеров по любому закону (в твоём случае AND).
Ну а потом видимость кнопки свяжи в коммутатором.
Что такое коммутатор?Пользовательский провайдер
Как заставить одну кнопку выполнять несколько действий.Это уже скрипт: кнопка меняет счётчик скрипта, а в теле скрипта прописывать что делать.
upd:: Action <-> Action; Action...
Это уже скрипт: кнопка меняет счётчик скрипта, а в теле скрипта прописывать что делать.
К сожалению, ничего более конкретного пока не скажу: сам слабо знаком со скриптами и дальше изменения цвета дело не доходило.
Спасибо на том.Может это вообще нельзя сделать, и я зря обнадёжил =)
Может это вообще нельзя сделать, и я зря обнадёжил =)
Как заставить одну кнопку выполнять несколько действий.Получилось, скрипт вызывает последовательно действия кнопок cmfButtonPlay2 и cmfButtonScheduler2 (выдумал это от балды)
upd:: Action <-> Action; Action...
procedure Execute(var State: Integer);
var
A, B: TComponent;
ALinks, BLinks: TASEBindings;
begin
A:= FindObject('cmfButtonPlay2');
B := FindObject('cmfButtonScheduler2');
ALinks := A.Get('Bindings');
ALinks.ExecuteAction('Action');
BLinks := B.Get('Bindings');
BLinks.ExecuteAction('Action');
State := 0;
end;
Soolo. Здорово! А как теперь это мне применить? Мне нужно что-бы по нажатию кнопки выключался контейнер и активировалось "Показать текущий".Скинь проект.
Скинь проект.
Мне нужно что-бы по нажатию кнопки выключался контейнер и активировалось "Показать текущий".В общем, вчера я тупанул со скриптами.
В общем, вчера я тупанул со скриптами.
А сегодня подумал, что и без них можно выжить.
Нужно сделать счётчик, кнопка будет менять его состояние, а счётчик будет управлять видимостью контейнеров и кнопок: всё по старинке.
Мне нужно что-бы по нажатию кнопки выключался контейнер и активировалось "Показать текущий".
Мне нужно что-бы по нажатию кнопки выключался контейнер и активировалось "Показать текущий".активировалось "Показать текущий".
Мне нужно что-бы по нажатию кнопки выключался контейнер и активировалось "Показать текущий".По Нажатию переключаются только контейнера (слайдером по маске), правда, вместо простой кнопки такой вариант мало применим, опять же, реагирует и на скролл. Кнопки же срабатывают на отпускание.
procedure Execute(var State: Integer);
var
P: TComponent;
PLinks: TASEBindings;
begin
P:= FindObject('PauseBtn');
case State of
0:
begin
PLinks := P.Get('Bindings');
PLinks.ExecuteAction('Action');
State := 0;
end;
1:
begin
PLinks := P.Get('Bindings');
PLinks.ExecuteAction('Action');
State := 1;
end;
end;
end;
Работает, но как сюда прикрутить обнуление счётчика скрипта при остановке воспроизведения? А то после Стоп'а из режима Пауза наборы кадров кнопки, как бы меняются местами :-\Боюсь, что если пользоваться горячими клавишами. а не кнопкой - будет глючить из любого состояния
Боюсь, что если пользоваться горячими клавишами. а не кнопкой - будет глючить из любого состоянияНо я так понял, что там задерживается вызываемое кнопкой действие, мне же надо заморозить третий кадр самой кнопки, примерно на секунду. Про хоткеи я вообще не подумал.
А пробовал использовать оператор задержки при переключении состояния?
Но я так понял, что там задерживается вызываемое кнопкой действие, мне же надо заморозить третий кадр самой кнопки, примерно на секунду.Вот пример задержки переключения состояния.
Борюсь с "дребезгом" кнопок , связанных с prvPlayerState, в частности, решил замахнуться наВильяма, нашего, Шекспираскрипты, соорудив вот такую конструкцию:Code: [Select]procedure Execute(var State: Integer);
var
P: TComponent;
PLinks: TASEBindings;
begin
P:= FindObject('PauseBtn');
case State of
0:
begin
PLinks := P.Get('Bindings');
PLinks.ExecuteAction('Action');
State := 0;
end;
1:
begin
PLinks := P.Get('Bindings');
PLinks.ExecuteAction('Action');
State := 1;
end;
end;
end;
Работает, но как сюда прикрутить обнуление счётчика скрипта при остановке воспроизведения? А то после Стоп'а из режима Пауза наборы кадров кнопки, как бы меняются местами :-\
procedure Execute(var State: Integer);
var
P: TComponent;
PLinks: TASEBindings;
begin
P:= FindObject('PauseBtn');
PLinks := P.Get('Bindings');
PLinks.ExecuteAction('Action')
end;
Всё, что тут написано сводится к нажатию кнопки Pause и оператор case тут не нуженЯ пытался приспособить для своих нужд найденные примеры, сам-то ничего в этом не понимаю, вот и нагородил лишнего. Может и научусь когда-нибудь...
Я пытался приспособить для своих нужд найденные примерыА что ты хотел сделать?
А что ты хотел сделать?На кнопке скрипта, управляющего Паузой, нажатое состояние показывается сразу же после отпускания кнопки, на обычной же кнопке Пауза задействован State от PlayerState, то имеется задержка, т.е. после отпускания показывается первый кадр кнопки, и только потом четвёртый. Ну, тоже самое, что и при нажатии на Плей (проблема, внятного решения которой, в движке нет и, похоже, не предвидится). С включением через скрипт "дребезга нет, но нет и синхронизации с пресловутым PlayerState. Если плеер остановить из режима Пауза, то кнопка Паузы остаётся нажатой, вот если бы по Стопу обнулялся и счётчик скрипта... Но, как резонно заметил Soolo, есть ещё и хоткеи, с которыми тоже придётся синхронизьмом заниматься. Так что этот путь решения заводит в тупик...
Мне раз пришлось через кнопку управлять скрытой кнопкой посредством подобного скрипта, нужно было одновременно с этим менять направление анимации в многостр. группе, через биндинг до этого параметра просто не добраться.
Вот пример задержки переключения состояния.Всё действительно просто, но только проблему-то не решает, а даже наоборот. Смена состояний PlayerState и сама по себе имеет задержку (обусловленную объективными причинами), и именно с ней я пытаюсь бороться (точнее, замаскировыать), в твоём же примере задержка добавляется даже там, где её не было :(
Задержка сделана максимально просто и работает для любого состояния, тебе же нужно сделать задержку только для перехода из третьего кадра. Это сложнее, но, думаю, реализуемо.
... вот если бы по Стопу обнулялся и счётчик скрипта...Счётчик можно обнулить из скрипта: XXX.Set('Position', 0). Но при этом вызовется и процедура скриптового счётчика.
Счётчик можно обнулить из скрипта: XXX.Set('Position', 0). Но при этом вызовется и процедура скриптового счётчика.Думаешь, я что-нибудь понял? Что за ХХХ, в какую "позицию" и кого ставить? И потом, в моём вопросе было условие: счётчик должен обнуляться в момент перехода плеера в режим СТОП. Как это условие реализовать? Мне бы какой-никакой конкретный пример, иначе понять сложно...
Аналогично можно управлять и таймером.
Думаешь, я что-нибудь понял? Что за ХХХ, в какую "позицию" и кого ставить? И потом, в моём вопросе было условие: счётчик должен обнуляться в момент перехода плеера в режим СТОП. Как это условие реализовать? Мне бы какой-никакой конкретный пример, иначе понять сложно...Состояние плеера скиндвижку передаётся только одним способом: prvPlayerState, так что ничего нового с этим сделать не получится.
Состояние плеера скиндвижку передаётся только одним способом: prvPlayerState, так что ничего нового с этим сделать не получится.Ошибку свою я понял. Разумеется, идти в обход стандартных методов управления я не буду. Жаль, что без костылей здесь не обойтись, но саму проблему я если и не решу, но уж обойду точно, намётки есть ;)
А делать кучу костылей только для кнопок, игнорируя хоткеи - плохой выход.
Думаешь, я что-нибудь понял? Что за ХХХ, в какую "позицию" и кого ставить? И потом, в моём вопросе было условие: счётчик должен обнуляться в момент перехода плеера в режим СТОП. Как это условие реализовать? Мне бы какой-никакой конкретный пример, иначе понять сложно...ХХХ - имя переменной скриптового счётчика, я ж не могу знать, как ты его объявил. Position - текущее состояние счётчика (любого, не только скриптового), все его параметры в справке описаны.
Мне раз пришлось через кнопку управлять скрытой кнопкой посредством подобного скрипта, нужно было одновременно с этим менять направление анимации в многостр. группе, через биндинг до этого параметра просто не добраться.Через биндинг, да, не добраться, но можно менять через скрипт:
LayoutTabbedGroup.Set('Animation', 'tgaNone');
LayoutTabbedGroup.Set('Animation', 'tgaFade');
...
Через биндинг, да, не добраться, но можно менять через скрипт:Так и пришлось сделать в Fantasy, для того и каша со скриптом была заварена, только там я менял лишь направление анимации, а не вид.
McClaud, попробуй вложенный пример, может подойдёт.Суть ясна, с самим скриптом мне ещё разбираться и разбираться, но, главное , есть действующий пример.
Суть ясна, с самим скриптом мне ещё разбираться и разбираться, но, главное , есть действующий пример.норм, чё
А проблему я, в принципе, решил, может не столь элегантно, но действенно, хотя в результате получается "биг-мак".
Идея пришла в голову давно, не было возможности её реализовать. Суть в "ширме" скрывающей момент "дребезга". Применительно к запуску на воспроизведение - это дубль того самого третьего кадра, оформленный в виде аниматора с пустым первым кадром и с самоостановом по биндингу. Сами же кнопки, помимо маски, имеют видимым тоже лишь третий кадр. Состояние же отображается подложкой - трёхкадровым DigitsDisplay, завязанный на State prvPlayerState. Скрипт управляет включением нужного режима, по смене его состояния запускается аниматор, время его цикла - примерно секунда. Если State принимает нужное состояние раньше - аниматор скрывается по Visible... Ну, как-то так... ;D
Что посоветуете?Добавить эту кнопку самому :)
Я не понимаю принцип.Опять же посмотрите в проекте Bliss Compact.
%IFEqual(%Value1,1,1,%IFEqual(%Value1,2,2,%IFEqual(%Value1,3,3,%IFEqual(%Value1,4,4,%IFEqual(%Value1,5,5,%IFEqual(%Value1,6,6,%IFEqual(%Value1,7,7,%IFEqual(%Value1,8,8,%IFEqual(%Value1,9,9,%IFEqual(%Value1,10,9,%IFEqual(%Value1,11,8,%IFEqual(%Value1,12,7,%IFEqual(%Value1,13,6,%IFEqual(%Value1,14,5,%IFEqual(%Value1,15,4,%IFEqual(%Value1,16,3,%IFEqual(%Value1,17,2,%IFEqual(%Value1,18,1,0))))))))))))))))))
Сделал так, но связал с громкостью. поэтому сложно протестироватьСпасибо, конечно! Но если модуль счётчика будет, к примеру, 500 или больше, то во что превратится это и без того громоздкое выражение?
Tests - это сам счётчик, его связываем с тем откуда брать данные (в моём случае громкость)
Tst - это десятичный преобразователь, его связываем с выводом (в моём случае это цифровое табло)
If(Value <= 50 OR Value = 100,Value,50- Value MOD 50)
Можно и проще ;)Тогла уж лучше так (для 100 значений и при модуле = 100):
В связи прописываем так, пример для громкости (100 значений, модуль 50)
Пытаюсь отловить окончание трека по такой схеме:А если использовать не Progress, а TrackPosition или TrackPositionRemaining? Там, конечно, нет фиксированного значения длительности, но НОЛЬ-то есть.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=47822.0;attach=45566)
Однако, оказывается, что значение "100" у половины треков не появляется.
Пробовал с таким выражением:
If(Value >= 99, CurrentValue + 1, CurrentValue)
Но тогда в конце трека счётчик успевает сосчитать сразу несколько раз, причём всегда по-разному. ???
То же самое происходит, если пытаться поймать начало трека:
If(Value = 0, CurrentValue + 1, CurrentValue)
А если использовать не Progress, а TrackPosition или TrackPositionRemaining? Там, конечно, нет фиксированного значения длительности, но НОЛЬ-то есть.Пробовал и эти сервисы - картина аналогичная, уверенно поймать конец/начало трека не получается.
Хочу сделать кнопки сброса настроек эквалайзера и звуковых эффектов.Так, в справке всё это есть. Просто придётся пробежаться по всем полосам элвалайзера и установить их в 0:
Лучше сделать в цикле - меньше писанины.
procedure Execute(var State: Integer);
var
EQ: TComponent;
N: Integer;
begin
...
EQ:= FindObject('prvEqualizer');
for N:= 1 to 18 do
EQ.Set('BandValue' + IntToStr(N), 0);
...
end;
Code: [Select]procedure Execute(var State: Integer);
var
EQ: TComponent;
N: Integer;
begin
...
EQ:= FindObject('prvEqualizer');
for N:= 1 to 18 do
EQ.Set('BandValue' + IntToStr(N), 0);
...
end;
На кнопке скрипта, управляющего Паузой, нажатое состояние показывается сразу же после отпускания кнопки, на обычной же кнопке Пауза задействован State от PlayerState, то имеется задержка, т.е. после отпускания показывается первый кадр кнопки, и только потом четвёртый. Ну, тоже самое, что и при нажатии на Плей (проблема, внятного решения которой, в движке нет и, похоже, не предвидится). С включением через скрипт "дребезга нет, но нет и синхронизации с пресловутым PlayerState. Если плеер остановить из режима Пауза, то кнопка Паузы остаётся нажатой, вот если бы по Стопу обнулялся и счётчик скрипта...У меня единственный скин с механикой Sony TC-MR2, но там не поворотный переключатель, а клавиши, но проблема схожая.
У меня единственный скин с механикой Sony TC-MR2, но там не поворотный переключатель, а клавиши, но проблема схожая.Пауза срабатывает только 1 раз, после снятия, последующие нажатия - пустышки.
Посмотри мой экперимент во вложении, может, устроит.
Пауза срабатывает только 1 раз, после снятия, последующие нажатия - пустышки...Не тот проект упаковал (их уже 7! вариантов).
Не тот проект упаковал (их уже 7! вариантов).Этот работает!
Этот работает!Скрипт там один и выражения всё те же.
И это ещё один конкретный пример, позволяющий чуть-чуть продвинуться в понимании скриптов. Спасибо!
Остаётся один ньюанс - она не нажимается в режиме СТОП, как тебе нравится, но меня это сильно не напрягает. Пробовал разрулить эту проблему на скриптах, но пока не выходит и времени хронически не хватает.Сходил перекурить и мысль в голову пришла (о пользе никотина ;)).
Дело в том, что свойство State имеет тип не числовой, а Enumeration, т.о. в скрипте он представляется строкой.Спасибо, Артём! Сколько всего ещё в справке нет...
Вот его значения
'opsStop', 'opsPause', 'opsPlay';
Ну, вот так, похоже, правильно будет:Да... И полный реализьм, и новые знания. Спасибо!!!
if FindОbject('prvPlayerState').Get('State') in ['opsPause', 'opsPlay'] then ...
Ну, вот так, похоже, правильно будет:Впихнуть это выражение в скрипт не получилось, может я что-то всё же напутал?
if FindОbject('prvPlayerState').Get('State') in ['opsPause', 'opsPlay'] then ...
Впихнуть это выражение в скрипт не получилось, может я что-то всё же напутал?Да, нет, пихал как раз туда туда. Компилятор говорит, скорее всего, об опечатке в функции "FindObject". Проверь, насколько помню, что-то я в сообщении руками правил.
Да, нет, пихал как раз туда туда. Компилятор говорит, скорее всего, об опечатке в функции "FindObject". Проверь, насколько помню, что-то я в сообщении руками правил.Всё понял, спасибо!
И счётчик State_Counter удали - он не нужен.
----------------
Да, точно, там русское "О":
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=45674)
Начальное значение счётчика скрипта пришлось на 3 сменить, иначе играющий AIMP, после смены на скин с "биг-маком" на СТОП не реагировал.Да, так правильно будет, иначе при смене скина (или при запуске плеера) могут возникнуть ситуации, когда скрипт не сработает.
Да, так правильно будет, иначе при смене скина (или при запуске плеера) могут возникнуть ситуации, когда скрипт не сработает.Похоже, что получилось, даже на поворотном "бутерброде". Реализовал в Романтике.
Вопрос: ты как рассчитываешь начальные интервалы для аниматоров бобин? А то я вроде считаю правильно, но зрительно разница скоростей вращения полных и пустых бобин кажется недостаточной.Чисто математически, с секундомером не проверяю, доверяю всё АИМПу.
Чисто математически, с секундомером не проверяю, доверяю всё АИМПу.Вот и я считаю аналогично. Значит на самом деле разница в скоростях вращения полной-пустой не столь значительна...
Исходя из реальных (не на экране) размеров рулона ленты и скорости протяжки: вычисляю время одного оборота полной и пустой бобины, затем делю на число кадров и получаем время задержки для аниматора.
Вот и я считаю аналогично. Значит на самом деле разница в скоростях вращения полной-пустой не столь значительна...Выходит, что так, против ариХметики не попрёшь. Правда, вот, в Таскаме у меня получилась разница весьма значительная и пустая бобина, похоже, уже не успевает отобразить все кадры. Но там бобины огромные - 10".
Выходит, что так, против ариХметики не попрёшь. Правда, вот, в Таскаме у меня получилась разница весьма значительная и пустая бобина, похоже, уже не успевает отобразить все кадры. Но там бобины огромные - 10".А я про Романтик, там соотношение 2,6 и интервалы, соответственно 40 и 15 (аниматоры 100 кадров).
Как создать плейлист??? Контрол TASEPlayList есть в мануале, но его нет в редакторе скинов. Как его добавить на форму?Плейлист может быть только в одном экземпляре. Найдите элемент "Playlist" в дереве элементов и перетащите его в нужный контейнер (или через пункт "Сменить предка..." в конт. меню).
Ещё пачка вопросов накопилась, буду благодарен за помощь.1. MLWindowClient: InitialVisible - True
Здравствуйте. Пользуюсь аимпом уже много лет, еще со времен 2 версии. Всегда нравилась обложка Eternity v2.6 - Krieger. Однако последние версии изменили скорость spectrum и сделали его «изменение» гораздо быстрее чем в ранних версиях. К сожалению я не знаком с редактором тегов аимпа совсем и не умею им пользоваться. Потыкав кнопочки я понял что сам разобраться не смогу. Подскажите пожалуйста как сделать работу спектра более плавной, медленной чтоли и без «крышечек» на высоте пиков.Подождать исправления бага в плеере. В редакторе ничего делать не нужно.
Боюсь что разработчики не в курсе данной особенности, тем более что она отражается в одном из скинов. Ждать придется в общем долго :(Вы вообще сейчас сами-то поняли что написали?
Ещё маленький вопрос: это нормально, что prvPlayerState.State переключается с паузы на воспроизведение мгновенно, а вот обратно - с задержкой около секунды? Это немного раздражает. Причём я это уже замечал в других скинах.Это зависит от настроек сведения файлов, нарастания/затухания громкости
...это нормально, что prvPlayerState.State переключается с паузы на воспроизведение мгновенно, а вот обратно - с задержкой около секунды?Задержка есть ещё со СТОП на ПЛЕЙ и с ПЛЕЙ на СТОП...
Это зависит от настроек сведения файлов, нарастания/затухания громкостиБыла такая мысль, но у меня всё отключено. В одну сторону задержки нет, а в другую - есть.
Была такая мысль, но у меня всё отключено. В одну сторону задержки нет, а в другую - есть.Проблема настройками не решается. Читай пост выше.
procedure Execute(var State: Integer);
var
BT: TComponent;
begin
BT := FindObject('btnPlayPause');
case State of
0: // Paused or stopped
begin
BT.BeginUpdate;
BT.Set('Caption', '▶');
BT.EndUpdate;
end;
1: // Playing
begin
BT.BeginUpdate;
BT.Set('Caption', '❚❚');
BT.EndUpdate;
end;
end;
end;
Нет ли решения для этой проблемы? Или, может, редактор можно исправить?
У меня фонотека в отдельном окне (TASEScene). Можно ли сделать, чтобы при двойном клике на свободной области это окно максимизировалось, как это делает главное окно?CaptionAreaHeight - параметр окна - высота "шапки" в пикселях. Даблклик по шапке разворачивает окно (если окно может разворачиваться).
Можно ли как нибудь, чтобы 2 контейнера с выравниванием laClient располагались вертикально?У их предка должно быть привязывание по горизонтали
Можно вывести название показываемой визуализации через текстовую метку? Или, мож еще как?Похоже, что нет.
Похоже, что нет.Благодарю
У Блисса присутствует двухкадровая фоновая текстура, я правильно понял, что первый кадр отображается при неактивном окне, второй при активном?
Приветствую. Только начал знакомство с новым редактором, и пока темный лес. Подскажите, какая связь, ну или что там, у текстовой метки "Title" в Блиссе вызывает QFI, и почему он появляется возле самой метки, а не в углу как в других случаях?Action метки нужно связать с провайдером acPlayableFileShowFileInfoAtCursor (его точкой Action).
Action метки нужно связать с провайдером acPlayableFileShowFileInfoAtCursor (его точкой Action).Да, спасибо. Нашел этот провайдер в списках нововведений. Еще сбило с толку, что в малом Блиссе такой связи нет, думал по-хитрому как-то сделано.
acPlayableFileShowFileInfoAtCursor - это тот провайдер, который показывает QFI возле курсора.
Здравствуйте! Подскажите пожалуйста, как сделать анимацию кручение "бобины"?а как делается анимация? набор кадров
Я так и сделал. Но качество смены кадров плохая, скорость низкая.кадров мало
Видео https://youtu.be/SSRV04oEpq0
Я так и сделал. Но качество смены кадров плохая, скорость низкая.По своему личному опыту скажу, что кадров вполне достаточно и 72, т.е. поворот каждого последующего кадра производится на 5%, а вот скорость регулируете за счет значения в установках анимации, в старой версии редактора, там где скорость вращения катушек была фиксированной, это проще, в новой же скорость вращения катушек возможно задавать переменной как в реальности, т.е. на протяжении проигрывания трека, скорость вращения анимации изменяется как в настоящем магнитофоне, что достигается введением определённого алгоритма в настройки связей провайдеров анимации, об этом Вам лучше расспросить наших корифеев Black_AVP и McClaud, уж они точно помогут, не раз сам обращался за помощью.
Видео https://youtu.be/SSRV04oEpq0
Как делаются всплывающие окна в TrayControl?Похоже нужно назвать второе окно именно таким образом - "TrayControlFlow".
А возможно прикреплённое окно хотя бы перевернуть, если оно уходит за экран?Окно можно называть как угодно главное прикрепить к мастеру
upd: ...имеется ввиду изображение фона (не позицию окна).
Окно можно называть как угодна главное прикрепить к мастеруТочно.
Чего-то я не пойму. Я сделал текстуру и указал маску доступности для мыши но, маска не работает. Что не так?Мой любимый пример: Вставляю ключ в замок зажигания, поворачиваю ключ, а машина не заводится. Что не так? :)
Вот.На фоновые элементы действие маски (в качестве доступности для мыши) не распространяется
На фоновые элементы действие маски (в качестве доступности для мыши) не распространяется
Почему?Так получилось. :) Артём лучше знает
Так получилось. :) Артём лучше знает
А какого эффекта вообще нужно добиться от маски?
Что-бы тень от скина была недоступна для мыши.На форуме очень много скинов с тенью и они не имеют проблемы
На форуме очень много скинов с тенью и они не имеют проблемы
Может нужно MagnetRectOffsetнастроить и проблема будет неактуальной?
Он настроен, тень не входит в область.скинь проект в личку, у меня догадки кончились
скинь проект в личку, у меня догадки кончились
Вот: https://yadi.sk/d/0HWNqUt5qULEVУ меня тень недоступна для мыши. Просто собрал этот проект.
У меня тень недоступна для мыши. Просто собрал этот проект.
Или имеется ввиду вывод контекстного меню? Думаю, это не самое большое зло. Главное, что за тень нельзя таскать окно.
Нет, имеется введу что объекты под тенью недоступны для мыши.
Вот проект: https://yadi.sk/d/0HWNqUt5qULEV
Кароче, если кто не понял, я пытаюсь сделать так что бы тень вообще не реагировала с мышью, а она загораживает то что под ней.Вообще, такая огромная тень ни к чему. Обычно хватает 5-и пикселей, которые на ход поезда не влияют практически, даже если и загораживают что-то.
Кароче, если кто не понял, я пытаюсь сделать так что бы тень вообще не реагировала с мышью, а она загораживает то что под ней.
Реально ли переделать скин Aimpa с Rainmeter в нормальный скин на плеер. http://www.deviantart.com/art/Florida-599600991 Или может уже есть такой похожий?
Реально, скин-движок позволитА Вы этим не занимаетесь? Был бы не плохо, если Вы в этом разбираетесь. Если нет, то может какой мануал есть по изготовлению или переделке этих скинов? Спасибо заранее за любую помощь!
А Вы этим не занимаетесь? Был бы не плохо, если Вы в этом разбираетесь. Если нет, то может какой мануал есть по изготовлению или переделке этих скинов? Спасибо заранее за любую помощь!Разбираете скин на запчасти (его можно открыть как архив), затем собираете в Skin Editor для AIMP.
Ребят, подскажите откуда можно снять информацию об окончании песни но не плейлиста?Можно попробовать с prvPlayerState - TrackPositionRemaining, когда приближается к 0
Задача: нужно чтобы аниматор сработал однократно, после окончания песни
Ребят, подскажите откуда можно снять информацию об окончании песни но не плейлиста?
Задача: нужно чтобы аниматор сработал однократно, после окончания песни
Можно попробовать с prvPlayerState - TrackPositionRemaining, когда приближается к 0Благодарю, но я впервые с ним работаю, и он у меня либо всё время работает, либо всё время скрыт... :(
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=46545)Благодарю Александр +1, это уже кое что! единственное что анимация проигрывается не до конца и застревает, а в следующий раз начинается не сначала а с того залипшего кадра. Можно ли это как-то решить?
... единственное что анимация проигрывается не до конца и застревает, а в следующий раз начинается не сначала а с того залипшего кадра. Можно ли это как-то решить?Ну, это только схема для определения конца трека. С анимацией задачка, ИМХО, непростая, сходу не решить, но интересная. Возможно, скрипты понадобятся, подумаю надосуге.
...единственное что анимация проигрывается не до конца и застревает, а в следующий раз начинается не сначала а с того залипшего кадра. Можно ли это как-то решить?Если нужен цикл анимации по событию (в данном случае, по окончанию трека), то аниматор зацикливается и биндится по индексу.
Если нужен цикл анимации по событию (в данном случае, по окончанию трека), то аниматор зацикливается и биндится по индексу.Если было бы всё так просто... При такой схеме анимация сработает, но все кадры не будут показаны, а только сколько успеет до начала следующего трека. Если интервал в аниматоре будет, к примеру, >1000 мс, то и ни одного можно не увидеть.
Если нужен цикл анимации по событию (в данном случае, по окончанию трека), то аниматор зацикливается и биндится по индексу.Благодарю! +1 Это почти то что нужно.
Осталось только одна проблема, при нажатии на кнопку "Стоп" аниматор не должен срабатыватьБлокировать запуск аниматора в режиме СТОП по-простому в этом примере не получится.
Тут немного поковырявшись с преднастройками эквалайзера собрал скрипт с привязкой переключения по кнопке всех пресетов. Может можно оптимизировать сам скрипт? Скрипт не переключает пресеты а создает пользовательские с параметрами вшитых.Врядли стоит особо заморачиваться с оптимизацией кода - скрипт-движок всё-равно её сведёт на нет.
Блокировать запуск аниматора в режиме СТОП по-простому в этом примере не получится.Благодарю. Но на этом проблемы не заканчиваются.
Если устроит, то можно просто прятать аниматор, соединив его Visibility со State prvPlayerState
Может можно указать запуск анимации скажем за 3 секунды до конца трека? Потому что сейчас анимация активируется ещё и при ручном переключении.Ловить секунды до конца трека - идея плохая, если учесть ещё, что для некоторых треков рассчётная и фактическая продолжительность разная.
Ловить секунды до конца трека - идея плохая, если учесть ещё, что для некоторых треков рассчётная и фактическая продолжительность разная.Согласен. Ну Артём я думаю читает наши переписки, и делает всё возможное для улучшения
Надо делать некое подобие одновибратора, запускаемого по концу трека, а останов - по последнему кадру аниматора.
Или ловить начало трека, а не конец (тоже проблемка...).
Ещё лучше попросить Артёма добавить в prvPlayerState эти сигналы StartOfTrack, EndOfTrack (в виде коротких импульсов) - много бы сразу проблем отпало при построении хитрых схем, в частности, и нашей с Владимиром перемотки.
Может можно указать запуск анимации скажем за 3 секунды до конца трека?В Демо запуск анимации за 2 секунды до конца трека
В Демо запуск анимации за 2 секунды до конца трекаБлагодарю Александр, может пригодится.
If(( Value1 - If(Value2 > Value3 ,Value2,Value3))=X,1,0)
Где X - количество оставшихся секунд
Но почему-то анимация у меня запускается на 1-2с раньше, може баг?Очень может быть. И кадры воспроизводит не все и не сначала...
Как автоматически запустить скрипт изменением размера окна?Прописать этот скрипт в onResize для TASEPanel - только там он работает.
Приветствую. Надо с помощью скрипта перекидывать контейнер на другую сторону (laLeft <-> laRight). Туда-сюда короче. Просьба откликнуться скриптологам).так есть же в справке пример: с помощью кнопки
так есть же в справке пример: с помощью кнопкиЯ сюда после изучения того примера и пришел. Я не понимаю. Я лучше отсюда скопирую (если помогут) и вставлю в скрипт, чем буду тыркаться с неизвестными мне символами и значениями, командами-хренандами.
или не такое нужно?
Я сюда после изучения того примера и пришел. Я не понимаю. Я лучше отсюда скопирую (если помогут) и вставлю в скрипт, чем буду тыркаться с неизвестными мне символами и значениями, командами-хренандами.вот рабочий скрипт
вот рабочий скриптРаботает, спасибо. +1. Из справки понял, что в данном случае можно некоторую хрень выкинуть:
изменений минимум
Из справки понял, что в данном случае можно некоторую хрень выкинуть:Если аргумент (State в данном случае) может принимать только два значения, можно и ещё некоторую "хрень" выкинуть:
procedure Execute(var State: Integer);
var
S: String;
begin
if State = 0 then S:= 'laLeft' else S:= 'laRight';
FindObject('_PL_Tabs_Vertical_').Set('Alignment', S)
end;
При этом важно иметь возможность задать время отображения для каждой самому, простое мигание не пойдет.Возможность задать ползователю, из плеера?
Возможность задать ползователю, из плеера?Нет, при проектировании. Я имею в виду должно быть не просто мигание, а более медленное чередование.
Нет, при проектировании. Я имею в виду должно быть не просто мигание, а более медленное чередование.может проще всего анимацию сделать?
может проще всего анимацию сделать?Задержка нужна одинаковая, я просто объяснил непонятно. Мне надо чтобы при активации таймера в планировщике текстовая метка в главном окне начала через определенный промежуток времени (вот это меня и интересует, возможность самому задать этот интервал) заменяться на отображение собственно самого таймера в виде текста. Одна т.метка на другую в общем. При этом мне не подходит простое мигание через Flashing, слишком быстро.
если задержка нужна разная - добавить кадры на одну из надписей
Здравия. Надо чтобы при активированном планировщике одна т.метка заменялась другой на определенное время. Чтобы они чередовались короче. При этом важно иметь возможность задать время отображения для каждой самому, простое мигание не пойдет. Вроде как можно так сделать и без скриптов даже.Сделал без скриптов. 2 таймера и 2 контейнера
Нет, при проектировании. Я имею в виду должно быть не просто мигание, а более медленное чередование.Можно использовать для управления видимостью тот же системный таймер, но с преобразованием: value div X mod 2 где X - задержка в секундах...
Aleksandr009, McClaud, спасибо! +1На выходе будет лишь два значения 1 или 0
McClaud, а mod 2 что означает в данном случае?
На выходе будет лишь два значения 1 или 0Благодарю.
Zigar, извиняй, оторвали меня от дела. Если ещё актуально, могу предложить свой вариант. В нём всего таймер и счётчик, время показа меток можно задать и разное, меняя выражения, а скорость - таймером или модулем счётчика (в примере 3 и 2 сек).Black_AVP, спасибо. +1 Это полезно для понимания SE. Вот, уже три способа, не беря скрипты. Я сделал как McClaud подсказал, этого оказалось вполне достаточно в моем случае. Да и проще всего.
Можешь обе метки кинуть на панель и связять её видимость с планировщиком.
Как реализовать ускоренное вращение анимации (бобин) при ускоренной перемотке трека кнопками Prev и Next.Для начала надо перейти на "четвёрку", но и там всё не очень просто...
Я имею ввиду в 4-ке, но как?Без скриптов в этом вопросе не обойтись, потому нужны элементарные познания в паскале (делфи), не говоря уж про биндинг.
Скриптом можно менять свойство GridLines False/True у дерева или списка в фонотеке? Чет не получается у меня нифига.
Если можно, то исправьте мои потуги:
procedure Execute(var State: Integer);
var
Tree: TComponent;
begin
Tree := FindObject('MLGroupingTree');
case State of
0:
begin
Tree.Set('GridLines.tlglHorzontal', 'False');
end;
1:
begin
Tree.Set('GridLines.tlglHorzontal', 'True');
end;
end;
end;
Я тупо не знаю как это надо записывать.
BT.Set('PlaceInfo.Anchors', '[akLeft, akTop]'); // Привязка кнопки к левому верхнему краю предка
Tree.Set('GridLines', '[tlglHorzontal, tlglVertical]');
Нужно задавать разделители так же:Code: [Select]Tree.Set('GridLines', '[tlglHorzontal, tlglVertical]');
... В дереве вообще есть вертикальные разделители, ведь в редакторе есть возможность выбрать их отображение?Даже не представляю, в каких ситуациях они могут отображаться, там же древовидная структура, а не таблица. Может, задел на будущее.
2) Переключающего текстуру у контейнера.Это можно без скриптов: переключать State контейнера, который содержит несколько кадров текстуры
Это можно без скриптов: переключать State контейнера, который содержит несколько кадров текстурыСпасибо.
В этом скине (https://www.aimp.ru/forum/index.php?topic=50928.0) так переключаются цвета
Имеется ли возможность привязать видимость элемента к состоянию визуализации? Элемент должен отображаться только когда запущена визуализация.Если визуалка и в отдельном окне, то тоже можно связать их видимости. Но информация о том, включена она или нет недоступна.
Там нет значения состояния...
... Но информация о том, включена она или нет недоступна.Понятно. Спасибо. Когда кавер отображается, сверху появляется более выраженный эффект стекла и рамка, естественно, такое должно было быть и у визуализации, т.к. фоны у них одинаковые.
1. Можно в хинте текст разбить на строки?По п.1. Скриптом можно вписать в Hint перевод строки, а в редакторе - ???
2. Можно сделать так, чтобы, скажем, кнопка или панель появлялась только во время изменения громкости и потом исчезала?
...Black_AVP, спасибо большое. +1
По п.2. см. влож. Delayer определяет время "послесвечения" панели. (!script free!)
+ Плеер: интернет-радио - отображение процентов буферизацииПравда не знаю насколько это полезно :-\ Сначала подумал просто об уровне заполнения буфера на постоянной основе (т.е. возможность сделать плавающий прогресс буферизации)
Помогите. Хочу сделать масштабируемую обложку альбома, так чтобы при изменении окна она сохраняла пропорции, но также когда достигнет определённого размера переставала растягиваться, а окно в котором она можно было дальше растягивать.Делал я растягиваемое окно с сохранением пропопрций кавера (https://www.aimp.ru/forum/index.php?topic=51648.0), чтоб обложка всегда оставалась квадратной, однако людям это не понравилось, хотя АИМП и подразумевает, что каверы изначально квадратные.
Делал я растягиваемое окно с сохранением пропопрций кавераБлагодарю
Можно ли как-нибудь упростить(укоротить) скрипт, который меняет одно свойство у нескольких объектов одного вида?Если метки обозвать с изменяющимся номером (txt_1. txt_2, .. ,txt_10, например) то можно сделать в цикле по аналогии с https://www.aimp.ru/forum/index.php?topic=27831.msg313880#msg313880
У меня скриптом меняется цвет текстовых меток, их больше 10. Лень писать много однотипного текста в скрипте
Если метки обозвать с изменяющимся номером (txt_1. txt_2, .. ,txt_10, например) то можно сделать в цикле по аналогии с https://www.aimp.ru/forum/index.php?topic=27831.msg313880#msg313880Спасибо
procedure Execute(var State: Integer);
var
N: Integer;
begin
for N:= 1 to 3 do
FindObject('Label' + IntToStr(N)).Set('Font.Color', $FFFF0000)
end;
Ещё раз благодарю!
XXX.Set('SizeMinimal.Width', N);
XXX.Set('SizeMinimal.Height', N);
procedure Execute(EventData: TComponent);
var
CC, SMP: TComponent;
SizeP : Integer;
begin
CC:= FindObject('ControlsContainer2');
SMP:= FindObject('SizeMP1');
SizeP:= SMP.Get('Position');
CC.Set('SizeMinimal.Width', (140 + SizeP*8) );
CC.Set('SizeMinimal.Height', (140 +SizeP*8) );
end;
//SizeMP1 - простой счётчик значение которого изменяются слайдером
Новый вопрос - не работает скрипт почему?Насколько понял, приведённый скрипт у тебя для панели, на событие onResize. Но он будет выполняться только при изменении размеров панели - на то он и onResize.
И ещё как узнать текущую высоту контейнера?Напрямую - никак.
Насколько понял, приведённый скрипт у тебя для панели, на событие onResize. Но он будет выполняться только при изменении размеров панели - на то он и onResize.Скрипт для изменения размера окна, в частности миниплеера. Чтобы он квадратным оставался. И благодарю.
Подключи слайдер к скриптовому счетчику, в нём и напиши скрипт, что тебе нужен, а размеры можно будет вычислять из значения State.
Скрипт для изменения размера окна, в частности миниплеера. Чтобы он квадратным оставался. И благодарю.Так, всё-таки, что тебе нужно? Я то подумал, что ты хочешь слайдером менять размеры контейнера. А если ресайзить мышкой, то зачем тогда слайдер?
Но всё таки очень хочется сделать без слайдера, так чтобы при изменении размера курсором окно сохраняло пропорции. Можно так сделать? Чтобы провайдер срабатывал при изменении размера.
Ну и ещё вопросик - можно ли через скрипт как нибудь поменять окно-мастер? Я хочу сделать чтобы при сворачивании главного окна окно настроек (в моей обложки Arc) переходило к миниплееру, т.е. оставалось на экране.Для этого у всех компонентов есть свойство Parent, но как определить переход в миниплеер и состояние плеера (развёрнут/свёрнут)? Вроде, это невозможно.
Так, всё-таки, что тебе нужно? Я то подумал, что ты хочешь слайдером менять размеры контейнера. А если ресайзить мышкой, то зачем тогда слайдер?Я хочу чтобы при изменении размера окна оно сохраняло пропорции - было квадратным. Т.е. если меняешь размер окна в большую сторону срабатывал скрипт и размер меньшей стороны приравнивал к большей, а когда уменьшаешь наоборот желательно.
Опиши задачу конкретнее, а то, по сведениям от Soolo, телепаты все в отпусках - лето... ;)
Можно положить в него панель, привязать за все стороны с отступом 0 и считывать размеры уже у панели через PlaceInfo.ActualWidth и PlaceInfo.ActualHeight.Размер контейнера(окна) я меняю через "SizeMinimal.Width" и "SizeMinimal.Height", но тогда их после увеличения окно нельзя уменьшить, так что после того как скрипт уравняет стороны SizeMinimal надо сбросить назад (может после выравнивания осуществить паузу, а затем сбросиить). А знаний для всего задуманного не хватает.
Для этого у всех компонентов есть свойство Parent, но как определить переход в миниплеер и состояние плеера (развёрнут/свёрнут)? Вроде, это невозможно.Я хотел через видимость Главного окна и окна миниплеера, по логике они же не должны одновременно быть видимы.
Я хотел сделать скрипт на основе твоего для обложки в панели. Но я не знаю как заставить сработать провайдер после изменения размера, изменения размеров можно узнать какСкрипт Panel.onResize срабатывает сам при изменении размеров панели - событие, возникающее в результате действия пользователя.
Я хотел через видимость Главного окна и окна миниплеера, по логике они же не должны одновременно быть видимы.Как раз они и могут быть оба на экране. Но в любом случае свойство Visible = true у обоих и не меняется.
Размер контейнера(окна) я меняю через "SizeMinimal.Width" и "SizeMinimal.Height", но тогда их после увеличения окно нельзя уменьшить, так что после того как скрипт уравняет стороны SizeMinimal надо сбросить назад (может после выравнивания осуществить паузу, а затем сбросиить). А знаний для всего задуманного не хватает.То, что SizeMinimal надо сбросить назад, это да.
Я хочу чтобы при изменении размера окна оно сохраняло пропорции - было квадратным. Т.е. если меняешь размер окна в большую сторону срабатывал скрипт и размер меньшей стороны приравнивал к большей, а когда уменьшаешь наоборот желательно.У меня есть пример с пропорциональным изменением обложки, но он только с контейнером в SpliView, а не окном. Приложил, может чем-то поможет.
Скрипт Panel.onResize срабатывает сам при изменении размеров панели - событие, возникающее в результате действия пользователя.Я сделал через два скрипта один выравнивает размеры сторон, другой сбрасывает назад - SizeMinimal, но не знаю как заставить автоматически срабатывать. Пробывал к таймеру привязать скрипт (Value + ScrollDelta), чтобы по несколько раз за секунду скрипт сам срабатывал, но почему-то не срабатывает ???
Я пытался как-то "квадратить" окно, но, скорее всего, ничего не выйдет, т.к. любые попытки изменить размеры панели, равно, как и контейнера, жёстко связанного с ней, внутри её собственного обработчика onResize, вызывают AV - видимо зацикливается скрипт или переполняется стек, не знаю. :-\
У меня есть пример с пропорциональным изменением обложки, но он только с контейнером в SpliView, а не окном. Приложил, может чем-то поможет.Так, Александру надо квадратить само окно (миниплеер), а не обложку.
С окном вроде пробовал, но пример не нашёл - видимо, не получилось так сделать.
Размер контейнера(окна) я меняю через "SizeMinimal.Width" и "SizeMinimal.Height", но тогда их после увеличения окно нельзя уменьшить, так что после того как скрипт уравняет стороны SizeMinimal надо сбросить назад (может после выравнивания осуществить паузу, а затем сбросиить). А знаний для всего задуманного не хватает.Так и не врубился, что значит "сбросить назад"? Если ресайзить контейнер (окно) с помощью слайдера, то и панели никакой не надо, достаточно просто синхронно менять SizeMinimal и SizeMaximal:
procedure Execute(var State: Integer);
begin
with FindObject('liMain') do
begin
Set('SizeMinimal.Width', 200 + State);
Set('SizeMinimal.Height', 200 + State);
Set('SizeMaximal.Width', 200 + State);
Set('SizeMaximal.Height', 200 + State)
end;
end;
Так и не врубился, что значит "сбросить назад"? Если ресайзить контейнер (окно) с помощью слайдера, то и панели никакой не надо, достаточно просто синхронно менять SizeMinimal и SizeMaximalЯ же скрипт подобный для слайдера писал выше.
Получилось сделать пропорционально растягиваемое окно со всегда квадратной обложкой!Спасибо! то что надо!
Увеличить и уменьшить окно можно за любую сторону.
Правда получилось с некоторым костылём.
Как сделать так, что бы значения получаемые от провайдера были не линейны? Быстрое начало, медленный конец, или наоборот.
Преобразовать его через нелинейную функцию, которая ведет себя нужным образом, например:
http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiItKHgtMSleNisxIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwfV0-
Как сделать так, что бы значения получаемые от провайдера были не линейны? Быстрое начало, медленный конец, или наоборот.И, без разницы, какая зависимость?
Преобразовать его через нелинейную функцию, которая ведет себя нужным образом, например:Спасибо за ссылку, удобная весч.
http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiItKHgtMSleNisxIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwfV0-
И, без разницы, какая зависимость?
Применительно к индикаторам уровня, приходится логарифмировать данные провайдера, чтобы показания, хоть примерно, соответствовали шкале в децибеллах:
Log10(Value / N + 1) * K
N позволяет менять степень логарифмирования, а множитель К нужен для приведения результата при уровне с провайдера = 100 к отметке в 0 дБ.
Вот так будет для максимального логарифмирования
http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiJsb2coeC8xKzEpKjUwIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwLCJ3aW5kb3ciOlsiLTE0LjQ0MjMwNzY5MjMwNzY1OCIsIjExMC41NTc2OTIzMDc2OTIyOSIsIi0xMS44NDM3NDk5OTk5OTk5NjQiLCIxMTMuMTU2MjUiXX1d
А можно ли лагорифмировать так регулятор громкости?Регулятор громкости у нас и так в двух режимах может работать: линейном и логарифмическом (выбирается в настройках). Во втором случае зависимость обратнологарифмическая от положения движка.
Регулятор громкости у нас и так в двух режимах может работать: линейном и логарифмическом (выбирается в настройках). Во втором случае зависимость обратнологарифмическая от положения движка.
К сожалению, провайдер prvVolume.Progress выдаёт одинаковые значения громкости для обоих режимов и определить истинный уровень громкости невозможно.
https://www.aimp.ru/forum/index.php?topic=53212.msg326493#msg326493
Возможно ли в TASETextDisplay сделать перенос строки? Если возможно, то как?Сейчас такой возможности нет
Возможно ли в TASETextDisplay сделать перенос строки? Если возможно, то как?TASETextDisplay вообще является однострочным элементом, а вот, к примеру, в свойство Hint элементов можно вывести несколько строк, используя TASEStringOperatorConcatenator или скрипт.
TASETextDisplay вообще является однострочным элементом, а вот, к примеру, в свойство Hint элементов можно вывести несколько строк, используя TASEStringOperatorConcatenator или скрипт.Кстати, понадобится. Только как?
Кстати, понадобится. Только как?Как и при вводе обычного текста - вставлять между строками символ перевода каретки (0Dh или 13 - десятичное).
Как и при вводе обычного текста - вставлять между строками символ перевода каретки (0Dh или 13 - десятичное).После подключения провайдера в hint подсказка вообще не выходит.
В TASEStringOperatorConcatenator-е для это есть функция %Char().
А в скрипте: 'String1' + #13 + 'String2' или 'String1' + #$D + 'String2'
После подключения провайдера в hint подсказка вообще не выходит.В редакторе она и не появится, надо собрать скин.
Без связей работать не будет, надо хотя бы одну любую связь в NewStringOperatorConcatenator.Скриптом оказалось проще в OnLoaded без кучи лишних провайдеров. Спасибо!
Почему так - не знаю.
Скриптом оказалось проще в OnLoaded без кучи лишних провайдеров. Спасибо!Чтобы не напрягать OnLoaded, можно и по-другому. Создать временный скрипт, срабатывающий уже в редакторе от какой-либо (тоже временной) кнопки, в скрипте прописать все эти хинты для всех элементов и в тестовом режиме редактора (с зажатым Alt) один раз нажать на эту кнопку - все хинты пропишутся в свойства. После окончательной отладки скина всё это можно будет удалить.
А есть ли возможность заставить спектрум работать не с определенной скорость, а за определенное время?
Как скриптами управлять параметрами шрифта (полужирный, курсив, подчеркнутый и т.д.)?Похоже, никак. Достуны только гарнитура, размер, цвет. https://www.aimp.ru/forum/index.php?topic=27831.msg312487#msg312487
Подскажите пожалуйста как получить прогресс бар с буферизацией или как там называется, в общем на картинке видно
prvPlayerState.TrackBuffering. Посмотрите, как в скине по умолчанию сделаноВ скине по умолчанию нет этой связи, так как связать TrackBuffering
В скине по умолчанию нет этой связи, так как связать TrackBufferingВ SE Новый проект>Bliss.
В SE Новый проект>Bliss.Спасибо большое. Не знал что можно выбирать разные скину в редакторе :o
Там под прогрессбаром лежит аниматор (унего эта связь).
У прорессбара первый кадр прозрачный.
Почему она возникает и главное как её избежать.Потому, что свойства Text у SearchEdit не существует.
Потому, что свойства Text у SearchEdit не существует.Как тогда взять значение из его точки доступа Text?
Как тогда взять значение из его точки доступа Text?А где ты увидел такую точку доступа?
А где ты увидел такую точку доступа?Если поле выбрать как провайдер
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=47930)
Если поле выбрать как провайдерИ так, скорее всего, ничего не выйдет. Я когда-то пытался тоже передать текстовую строку от провайдера (от другого, правда) и через TextDisplay.Template и через Caption и Hint других элементов, но, насколько помню, так ничего и не получилось. Какая-то там загадка с чтением этих свойств через скрипт.
Заело, сам решил проверить на твоём примере.
Резюме (во вложении): эти свойства из скрипта не читаются (Template, Caption, Hint). Поставил вывод сообщения - оно пустое.
Может, так и задумано, может, баг...
Как скриптами управлять параметрами шрифта (полужирный, курсив, подчеркнутый и т.д.)?Тычково-эмпирическим методом сегодня обнаружил, что оказывается и это доступно. Старые знания Delphi помогли - вспомнил, что у TFont есть свойство TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut).
Возник вопросик - как сменить предка у контейнера?ПКМ - через меню или просто перетащить в дереве.
ПКМ - через меню или просто перетащить в дереве.Речь про скрипты и в справке я такого не нашёл.
Если речь про скрипты, то в справке есть пример.
Речь про скрипты и в справке я такого не нашёл.см. "Свойства и методы объектов".
см. "Свойства и методы объектов".К сожалению не получается разобраться.
К сожалению не получается разобраться.
Можно попросить, пожалуйста, простенький пример.
Скажите пожалуйста, как сделать так, что бы значение получаемые от провайдеров были временными? Например если у элемента значение 0 и его изменили на 1. как сделать что бы через некоторое время значение вернулось к 0 без посыла того кто выставил 1?Лучше бы, конечно, конкретный пример, но думаю, можно использовать связку таймера и счётчика: таймер запускается от внешнего воздействия, а счётчик, досчитав до нужного интервала, блокирует таймер. В некоторых случаях можно использовать LogicalOpetatorDelayer вместе с коммутатором.
Лучше бы, конечно, конкретный пример, но думаю, можно использовать связку таймера и счётчика: таймер запускается от внешнего воздействия, а счётчик, досчитав до нужного интервала, блокирует таймер. В некоторых случаях можно использовать LogicalOpetatorDelayer вместе с коммутатором.
Свойство TComponent.Parent (Read/Write) доступно "напрямую", т.е. в этом случае не нужны методы Set и Get, используется обычный оператор присваивания ":=".Благодарю, но так у меня и не получается никак, можно, пожалуйста, полностью скрипт.
var
AButton: TComponent;
begin
AButton.Parent:= FindObject('Container1');
.............
end.
Благодарю, но так у меня и не получается никак, можно, пожалуйста, полностью скрипт.Тогда уж лучше приведи свои переменные и кому на кого предков поменять.
Нужно что бы Gauge/DisplayValue был 0 и изменялся только на время, например от State.Тут тоже возможны варианты реализации.
Тогда уж лучше приведи свои переменные и кому на кого предков поменять.Можно в простом примере переместить Container3 из Container1 в Container2
Можно в простом примере переместить Container3 из Container1 в Container2
Тут тоже возможны варианты реализации.
Во вложении пример с Delayer. Gauge будет "дёргаться" при каждом изменении состояния плеера (State) на 1 сек (определяется интервалом, прописанным в Delayer).
... а надо еще что бы так же и при переключении треков.А это уже та хитрая задача (определение конца/начала трека), которую до сих пор приходится решать кривокостыльными методами.
А это уже та хитрая задача (определение конца/начала трека), которую до сих пор приходится решать кривокостыльными методами.
См. https://www.aimp.ru/forum/index.php?topic=27831.msg322316#msg322316
И как сделать наклоняющуюся кнопку (вперед - назад)?Третий кадр в текстуре TASEButton - нажатое состояние.
Нужно впихнуть в одну кнопку по маске - трек вперед и назад.Это должны быть 2 отдельные кнопки
В справке про такую кнопку ничего нет.
Можна сравнить с тумблером на 3 положения с возвратом на среднее положение = неактивное.
Я так и сделал - ну тогда как сделать видимость кнопки по маске? Навожу на маску и она появляетса.Наведённое состояние отображает второй кадр - он должен быть прозрачным, а нейтральное положение можно оставить в фоновой текстуре.
Можете подправить?Тогда, я не понял. Я то подумал, что тебе нужна кнопка-качелька, а в проекте две независимые кнопки. Качельку заново рисовать надо - она ж не нажимается как эти кнопки, а поворачивается.
Ну да она поворачиваетса - и она уже нарисована. Но не знаю как реализовать по видимости или чем то другим?Через панели сделал.
О большое спасибо - что-то я не догадался до такого :)Хотя я немного сглупил. Можно проще - сделать первый кадр кнопок прозрачным.
Но основной вопрос остался > Как правильно сделать анимацию динамиков?Туда-сюда - не получится - только ВПЕРЁД! ;D
А жаль.Если бы Waveform видывала цифры и по ним кататься бы динамику :)Я уже и не говорю про частоты до 100гц! Разве что просить программистов?
... Можно проще - сделать первый кадр кнопок прозрачным.Так, ему это и предлагалось. А если при наведении мыши ничего не меняется, то и второй кадр будет прозрачным. Нейтральное положение - в текстуре главного окна.
Waveform я привел как пример - он же выводит график со средней точкой в ноль.А в PrVisuale я так думаю что отрицательная волна просто инвертируется в плюс - нужно чтоб не инвертировалось для более менее правильного хода динамика :)Waveform представляет собой массив мгновенных значений сигнала с определённой дискретизацией.
Пока и так бы сошло без фильтра низких частот :)Кто мешает нарисовать положения диффузора от выпуклого до "впуклого" (или наоборот). В динамике эффект будет тот же, что бы был на "плюс-минусе" ;D
Все здравствуйте!В зависимости от значения на входе Switch (1..5) коммутируется соответствующий вход (Value1..5) на выход Result.
Возник вопросик - зачем провайдер LogicalOperatorMultiplexer, как его можно использовать?
В зависимости от значения на входе Switch (1..5) коммутируется соответствующий вход (Value1..5) на выход Result.Благодарю! А то в справке нет его описания.
Подскажите плис, как с нуля сделать анимацию кассеты.В справке смотрите устройство аниматора и пример по его остановке
Решил спросить здесь - как сделать чтобы окно(фонотека) при первом появлении не было встроено в Главное?А не пробовал прямо в редакторе поиграться со сменой предка у liLibrary в стандартном Bliss?
А не пробовал прямо в редакторе поиграться со сменой предка у liLibrary в стандартном Bliss?Пробовал. Про родителя я знаю.
Похоже, и при стыкове и при расстыковке родитель у него не меняется, всегда остаётся окно MusicLibraryFrame.
Есле переназначить родителя на доксайт, то можно наблюдать интересные вещи.
Но это же ничего недаёт :(О том и речь. Скорее всего, из этой затеи ничего не получится.
Скорее всего, из этой затеи ничего не получится.+1, у меня ничего не получилось.
Может я не нашёл, но похоже что никак не навесить два разных конт. меню на кнопку? Одно на ЛКМ, другое на ПКМ.Назначается меню на ЛКМ. А ПКМ может скриптом, при нажатии ПКМ срабатывает скрипт вызывает срабатывание невидимой копки с меню.
Назначается меню на ЛКМ. А ПКМ может скриптом, при нажатии ПКМ срабатывает скрипт вызывает срабатывание невидимой копки с меню.OMG :)
Вроде должно сработать.
Если хотя бы одно меню пользовательское, то можно. Два стандартных, похоже, нет.Понятно, спасибо. Похоже на то.
Только появляться меню по ЛКМ будет не в месте клика, а под кнопкой.Ну это у всех кнопок так, то же главное меню, например.
Всем привет!Может написать третий скрипт, объединяющий эти два?
Такой вопрос - как можно сделать так, чтобы нажатие на TaseSwitch(или TaseButton) активировало сразу(одновременно) 2 скрипта?У скриптов разное количество модулей параметра,с таймером не получается ???
Такой вопрос - как можно сделать так, чтобы нажатие на TaseSwitch(или TaseButton) активировало сразу(одновременно) 2 скрипта?У скриптов разное количество модулей параметра,с таймером не получается ???Задачу опишите конкретную. Полагаю, что всегда можно обойтись одним скриптом.
Может написать третий скрипт, объединяющий эти два?Как раз попробовал ваш скрипт,активирующий две кнопки.Для моего случая не подошел.С таймером связал,так у них скорость одинаковая,следовательно первая анимация до половины доходит,а вторая уже подошла к концу
Задачу опишите конкретную. Полагаю, что всегда можно обойтись одним скриптом.В моей обложке Wood есть кнопка скрытия панели панели опций,которая под плейлистом. С помощью скрипта сделал плавную анимацию скрытия(с помощью AlignmentMargins и State,впоследствии взял код с примера,который нашел здесь(которая еще останавливается при быстром втором нажатии)) и плавную анимацию свитчера(тем же методом перемещаю кнопку влево-вправо). В первом случае перемещение на 32px,во втором на 18px.По отдельности работают,но как связать,без понятия. :-\
Как раз попробовал ваш скрипт,активирующий две кнопки.Для моего случая не подошел.С таймером связал,так у них скорость одинаковая,следовательно первая анимация до половины доходит,а вторая уже подошла к концуможно внутри третьего скрипта написать тела двух скриптов и тайминги подобрать, чтобы начало и конец совпадали
можно внутри третьего скрипта написать тела двух скриптов и тайминги подобрать, чтобы начало и конец совпадалиа можно пример как тайминги подбирать?я не до конца еще понял,как таймеры заставляют работать скрипт и анимацию
а можно пример как тайминги подбирать? я не до конца еще понял,как таймеры заставляют работать скрипт и анимациюЗначения не кратны, но думаю ничего страшного если анимация свитчера будет заканчиваться немного раньше.
И кстати, раньше была анимация выезжающего эквалайзера(или любого другого выезжающего пристыкованного тела). Есть ли сейчас такая функция?А то создаю окно,пристыковываю,связываю кнопкой со связью Visibility,в итоге окно просто прячется,без анимации.Или связь нужна другая?Она и сейчас есть надо окно прикрепить к мастеру (Окна>Настройки окна). И также в настройках плеера Интерфейс она должна быть включина.
И еще вопрос: возможно ли с помощью скрипта плавно заполнить слайдер?Например,слайдер громкости?Как обычно - слайдер связать с prvVolume, только скрипт должен управлять не слайдером, а громкостью prvVolume.Position.
Как обычно - слайдер связать с prvVolume, только скрипт должен управлять не слайдером, а громкостью prvVolume.Position.Тогда задача меняется. Теперь надо сделать 3 действия одной кнопкой: скрыть/показать опции, передвинуть кнопку туда/сюда, с кнопкой заполнить слайдер. Погодите...Можно же тогда создать слайдер с кнопкой, при позиции ноль скрыть опции, при позиции 100% - показать. При нажатии активировать плавное заполнение. Хоть и суть все та же, но скрипт то упрощается.
А зачем при этом менять громкость? И кому понравится её нарастание от нуля до максимума?Нужно взять не позицию громкости,а анимации.Со скрипта.
Нужно взять не позицию громкости,а анимации.Со скрипта.Слайдер будет повторять позицию (уровень) громкости, по-другому слайдером громкости из скрипта управлять невозможно.
Наверняка можно всё в одном скрипте сделать. Внутpи скрипта его значение State использовать для рассчёта сдвига панели, а биндингом связать с аниматором ключа с его FrameIndex с выражением типа Value / 32 * 18 - будет синхронно.Почитал справку, FrameIndex вроде только в аниматоре,нет? А дело в том,что каждый кадр аниматора рисовать не хочется,скриптом двигать кнопку легче :-\ Или FrameIndex можно использовать не только в TASEAnimator?
Слайдер будет повторять позицию (уровень) громкости, по-другому слайдером громкости из скрипта управлять невозможно.нее,я просто к примеру сказал - "слайдер громкости". А имелось в виду "любой слайдер". Извиняюсь за это)
Погодите...Можно же тогда создать слайдер с кнопкой, при позиции ноль скрыть опции, при позиции 100% - показать. При нажатии активировать плавное заполнение. Хоть и суть все та же, но скрипт то упрощается.Ситуация: нажал ты на слайдер, значение поменялось, допустим на 80%, потом только сработал скрипт, который заполняет слайдер плавно, с 0 до 100 - то есть будет так называемый "дребезг".
Почитал справку, FrameIndex вроде только в аниматоре,нет? А дело в том,что каждый кадр аниматора рисовать не хочется,скриптом двигать кнопку легчеВроде, изначально шла речь про анимацию ключа, где без раскадровки не обойдёшься....
Вроде, изначально шла речь про анимацию ключа, где без раскадровки не обойдёшься....Вот поэтому я закинул и проект (https://yadi.sk/d/SOCMFT6DyLVas),и обложку (https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=48441). А речь идет про эти кнопки-слайдеры :-[
Честно говоря, из всех вышеизложенных постов, я так и не понял, что конкретно нужно.
Беда почти всех вопрошаюших здесь в том, что не могут чётко и ясно сформулировать задачу и приходится вытягивать по слову, потому и помочь сложно.
Ещё вариант: разместить поверх слайдера полностью прозрачную кнопку, но доступную для мыши, при нажатии на неё активировать скрипт, который будет смотреть по какому-нибудь признаку, что делать со слайдером и заполнять/убавлять его.В принципе,да. Есть 2(или 3,в зависимости от варианта) скрипта с таймером. Нужно с помощью третьего скрипта активировать обе. Проблема в том,что время анимации у них разное
Подскажите как сделать связи для кнопки пауза и стоп, чтоб била зажатая при паузе и соответственно стопе (8 кадров)?в справке есть
В упор не видел в справке :) Там только про кнопку переключатель что-то похоже - сделал такииже связи - не работает! И не понятно на сколько кадров ставить!"Не работает" - отличное описание проблемы.
не вишлоДумаю, в этом основная причина..
Ок! Кнопка плей работает как надо, в зажатом состоянии стоит когда играет! Имеет 9 кадров по маске. (имеет 2 провайдара - пауза и плей) Нужно тоже сделать для кнопки пауза и стоп! Для начала сколько им потребуетса кадров? Пока там связи просто на action -action, state-state! Пробовал до паузы добавлять плей и игрался со связями но не вишло!Чтобы фиксировать кнопку стоп, нужно State кнопки связывать с prvPlayerState (с логической модификацией NOT Value).
А как сделать чтоб кнопка плей при воспроизведении била зажата и не отжималась (когда на нее давить) и не сбрасывала трек на ноль?Сделать её недоступной для нажатия, если уже нажата (Accessibility)
тогда как отсеять или что делать?Проще забить.
А как запретить при двойном щелчке сворачиваться в мини плеер? - только сворачивание на нужную кнопку!Никак. Прям сильно мешает? Может мышку поменять на исправную?
Ну тогда зачем делать кнопку для сворачивания? :) Да немного на кровати не удобно тыкать мишкой, поэтому и делаю большой скин :)Эм... а вы на какие-то кнопки даблкликом тыкаете?
Нет - даблкликом на самом плеере (по пустом месте - где можна перетаскивать плеер) - левая кнопка миши :)А зачем вы так делаете?
Можно ли уменьшить расстояние между названием трека и продолжительностью?Нужно отключить колонку оценок или включить вторую строку
Нужно отключить колонку оценок или включить вторую строкуСпасибо за ответ.
Если Вы имеете ввиду в плеере -> настройки отображения -> "Показывать оценки", то отключено.Может поменяны индивидуальные настройки плейлиста? ПКМ по вкладке плейлиста / Индивидуальные настройки.
Может поменяны индивидуальные настройки плейлиста? ПКМ по вкладке плейлиста / Индивидуальные настройки.Нет, там всё в порядке. Я в курсе этого.
Нет, там всё в порядке.А на других скинах то же самое?
А на других скинах то же самое?На других, вроде бы, немного меньше. Но, если есть такая возможность, подскажите, пожалуйста, как можно изменить это расстояние? (желательно подробно с картинками).
Причина в моём предыдущем сообщении. И там же вопрос.
P.S. Добавил в новый плейлист трек длиной более часа и расстояние увеличилось. Очевидно в этом вся причина.Точно, о таком варианте я не подумал что-то.
Но, всё-таки, таких длинных треков единицы. Обычно несколько минут. Можно ли сделать, чтобы это расстояние не зависило от длины трека?Нет.
Нет.Очень жаль, что нельзя открепить эту зависимость.
Возник вопрос - как перевести десятичные числа в шестнадцатеричные?А зачем вообще переводить? Ты же используешь для задания цвета переменную, а от того, какое значение ей присваевается, внутреннее представление чисел не меняется.
Вот простой примерчик:Я к сожалению мало что понял. Так что надо мне поизучать паскаль.
Я к сожалению мало что понял. Так что надо мне поизучать паскаль.Так, спрашивай, постараюсь ответить. Тут не Паскаль, а представление чисел надо понять.
Вот простой примерчик:Только при Alpha=0 цвет становится непрозрачным, а должен быть полностью прозрачным.
Можно было бы поступить так: D shl 24, но там проблемы с типом, он со знаком и возникает ошибка, приходится просто умножить это значение трижды на 256, т.е. на 256*256*256 = 16777216Вроде раньше это работало, но с v4.12 цвет записан беззнаковым типом (если я ничего не попутал), поэтому я сделал так (вторая строчка):
Color := B + (G shl 8) + (R shl 16) + (Alpha shl 24);
Color := Color AND $FFFFFFFF;
var
Color: Variant;
R, G, B, Alpha: Integer;
begin
Color := FindObject('T_Content').Get('Color');
R := Color shr 16 AND $FF;
G := Color shr 8 AND $FF;
B := Color AND $FF;
Alpha := Color shr 24 AND $FF;
Только при Alpha=0 цвет становится непрозрачным, а должен быть полностью прозрачным.Не понял. При 0 в старшем байте он и есть прозрачный.
Вроде раньше это работало, но с v4.12 цвет записан беззнаковым типом (если я ничего не попутал), поэтому я сделал так (вторая строчка):Не работало ни раньше, ни сейчас, и проблема не в плеере, это ограничение скрипт-движка, там,если я правильно понял Артёма, на всё-провсё используется один внутренний тип, так что без разницы, как объявлять переменную: Extended или DWord или ещё как-то.
Только при Alpha=0 цвет становится непрозрачным, а должен быть полностью прозрачным.Хм... Вон в чём дело: я скин не собирал, проверял лишь в редакторе в тестовом режиме, а в нём всё нормально. А вот в плеере, действительно, при переходе с 1 на 0 цвет становится полносттью непрозрачным. ???
Два бага или это всё из одной оперы?SE использует ещё старый формат хранения цвета. AIMP v4.12 новый.
Не работало ни раньше, ни сейчас, и проблема не в плеере, это ограничение скрипт-движкаЯ активно ковырялся с этим в октябре и тестировал и в SE, и в AIMP (v4.11 stable и v4.12 beta) - у меня только так, как я написал, заработало правильно везде.
Я активно ковырялся с этим в октябре и тестировал и в SE, и в AIMP (v4.11 stable и v4.12 beta) - у меня только так, как я написал, заработало правильно везде.В SE.920 при использовании выражения shl 24 прозрачность меняется наполовину - максимальной непрозрачности нет.
В SE.920 при использовании выражения shl 24 прозрачность меняется наполовину - максимальной непрозрачности нет.
При значениях > 127 дебагер выдаёт сообщение: Range check error.
поэтому я сделал так (вторая строчка):Code: [Select]Color := B + (G shl 8) + (R shl 16) + (Alpha shl 24);
Color := Color AND $FFFFFFFF;
Так работает и там, и там.
Хм... Вон в чём дело: я скин не собирал, проверял лишь в редакторе в тестовом режиме, а в нём всё нормально. А вот в плеере, действительно, при переходе с 1 на 0 цвет становится полносттью непрозрачным. ???
Кстати, в плеере работает нормально с выражением shl 24, а в редакторе - нет.
Два бага или это всё из одной оперы?
... (см. самую последнюю таблицу)Как понимать такое выражение, где и в левой и правой части стоит одна и та же переменая? ???
Как понимать такое выражение, где и в левой и правой части стоит одна и та же переменая? ???
Dst.Alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha
Если преобразовать его нашими привычными логическими методами, то получим:
Dst.Alpha = 1
Надо чтобы элемент во время проигрывания подкаста был видимым, а во время проигрывания радио скрыт. Провайдер prvPlayerState, точка доступа TrackDuration, или что-то другое надо использовать?Так?
Надо чтобы элемент во время проигрывания подкаста был видимым, а во время проигрывания радио скрыт. Провайдер prvPlayerState, точка доступа TrackDuration, или что-то другое надо использовать?Можно сделать на основе коммутатора VisWaveSeekBar в Redaw (https://aimp.ru/forum/index.php?topic=54584.0).
Так?Я что-то не заметил разницы при воспроизведении радио и подкаста. ??? По выражению не могу судить т.к. не понял ни хера. :)
Можно сделать на основе коммутатора VisWaveSeekBar в Redaw (https://aimp.ru/forum/index.php?topic=54584.0).Я знаю про этот коммутатор, я в него и смотрел когда пытался свое накрутить. В общем, все оказалось проще чем я думал, я уже чего только не перепробовал тут. Где-то сбился с толку и понеслось. Надо было добавить только: prvPlayerState (точка - TrackDuration) с выражением NOT Value = 0. Вроде работает, но я в себе уже не уверен...
У тебя он в Fraus тоже есть. Он используется для отображения волны только для радио, надо убрать одну связь в нём.
Пример коммутатора
Value1 - prvPlayingFileInfo (точка - Source)
Value2 - prvPlayerState (точка - TrackDuration)
Параметры - Value1 = 2 AND Value2 = 0
Я что-то не заметил разницы при воспроизведении радио и подкаста. ???Таже проблема, что и с файлами из ВК, столкнулся с этим ещё в https://www.aimp.ru/forum/index.php?topic=52135.msg323511#msg323511
... с выражением NOT Value = 0 ...Уж больно хитрое для понимания выражение :), проще Value > 0.
Я что-то не заметил разницы при воспроизведении радио и подкаста. ???Так по идее и не должно быть разницы.
чтобы прогрессбар появлялся при воспроизведении подкаста, но не появлялся при воспроизведении радио, ибо в этом случае он не нужен.
Хотя, проверил Fraus v1.0.7 - и там с прогрессбаром и так всё нормально. А в новой v1.0.8 метка "Буферизация..." продолжает накладывается на прогрессбар.
В скине по умолчанию так и сделаноКак? Про что речь? Про прогрессбар? Он ведь не скрывается при прослушивании радио, в скине Fraus ситуация немного другая - там панель (или контейнер) только с прогрессбаром.
Как? Про что речь? Про прогрессбар? Он ведь не скрывается при прослушивании радио, в скине Fraus ситуация немного другая - там панель (или контейнер) только с прогрессбаром.
Скрывается, а вместо него бежит "волна".Это немного не то.
В моём сообщении выше написан мой порядок рассуждения и вывод в конце такой, что я ничего не понял - Zigar в этой теме попросил совет, потом вроде исправил в новой 1.0.8 версии Fraus косяк с наложением метки на прогрессбар, но по факту нет.Была видна надпись "Открытие...", я её закрыл, сейчас другую ссылку нашел на подкаст, там уже надпись "Буферизация..." и она торчит. Я не понимаю что там, и как там это все происходит, поэтому и объяснить толком не могу.
А прогрессбар во время воспроизведения радио и так не появлялся, ещё в старой 1.0.7 версии.Зачем он нужен при воспроизведении радио? В этот момент там текст отображается.
Уж больно хитрое для понимания выражение :), проще Value > 0.Исправил.
Была видна надпись "Открытие...", я её закрыл, сейчас другую ссылку нашел на подкаст, там уже надпись "Буферизация..." и она торчит. Я не понимаю что там, и как там это все происходит, поэтому и объяснить толком не могу.А не легче использовать 1 метку в контейнере и появляющуюся панель с прогрессбаром при наведении (при включенной опции, естественно)?
Зачем он нужен при воспроизведении радио? В этот момент там текст отображается.Я и не писал, что он нужен, я описывал подробности, "почему я ничего не понял".
А не легче использовать 1 метку в контейнере и появляющуюся панель с прогрессбаром при наведении (при включенной опции, естественно)?Я удалял первую метку ради теста, она ни на что не влияет. Одним набором в моем случае не обойтись, так вот я сконструировал. Может можно было и проще сделать.
Возможно ли через настройку связи на TASERating при выборе "Поставить оценку 1" автоматически отключать файл в плейлисте?Теоретически да. Оценка ставится звёздочками или кнопкой, которая ставит "1"?
А как счетчик переключать туда-обратно, а не по кругу? 1-2-3-2-1...В простейшем случае можно прописать выражение в связи. Если, к примеру, нужна последовательность 0,1,2,3,2,1,0... то нужно выбрать модуль счётчика = 6, а выражение будет:
Возможно ли через настройку связи на TASERating при выборе "Поставить оценку 1" автоматически отключать файл в плейлисте?Хотя нет, именно отключить нельзя, можно только переключить этот переключатель.
В простейшем случае можно прописать выражение в связи. Если, к примеру, нужна последовательность 0,1,2,3,2,1,0... то нужно выбрать модуль счётчика = 6, а выражение будет:А если 0,1,2,1,0...? Не получается что-то.
IF(Value > 3, 6 - Value, Value).
Можно в скрипте менять направление счёта, переписывая входное выражение счётчика с Value + 1 на Value - 1.А можно примерчик?
А можно примерчик?
...Оценка ставится звёздочками или кнопкой, которая ставит "1"?
...можно только переключить этот переключатель.
А если 0,1,2,1,0...? Не получается что-то.Тогда константы будут другими - модуль счётчика в этом случае M = 4 (цикл состоит из 4-х чисел 0,1,2,1):
Слишком муторно для меня, понятия не имею, что с этим делать. И сам себе отвечу: да ничего не делать, пущай программисты скинами занимаются.Да, в примере всё верно, только я не использую ScrollDelta, не факт, что она = 1 и не всегда приращение нужно в 1.
Обновляю старую обложку, за основу был взят BlissDark из стандартных шаблонов.
Провайдеры уменьшения размера удалил, слишком сложно пока что.Что за провайдеры такие?
Ошибка в liPlaybackControl - нельзя ограничивать ширину у контейнера, если у него laClient, потому и не тянется по ширине.Блин, спасибо огромное!Видимо, случайно туда вбил, или заранее так было ???
Что за провайдеры такие?Типа ChangeMode, при уменьшении размера и обложка ведь изменяется,там,кнопки меньше становятся, и т.п.
Разумеется. Но, как этот переключатель называется, и где его найти?Через провайдер acPlayableFileToggleSwitchInPlaylist.
Прикреплен проект.Только это не проект, а скин. Его нельзя отредактировать.
это не проект...
Во вложении проект с примером.
Тогда константы будут другими - модуль счётчика в этом случае M = 4 (цикл состоит из 4-х чисел 0,1,2,1):Я так пробовал, не работает. Где это выражение надо прописывать, в Action кнопки?
IF(Value > 2, 4 - Value, Value).
В общем виде:
IF(Value > M/2, M - Value, Value).
Я так пробовал, не работает. Где это выражение надо прописывать, в Action кнопки?У меня работает. Модуль счётчика "4", прирост (с кнопки или ещё откуда-нибудь) как обычно - Value + 1 (или ScrollDelta), а там, где нужен такой специфический отсчёт в параметрах связи "IF(Value > 2, 4 - Value, Value)"
У меня работает. Модуль счётчика "4", прирост (с кнопки или ещё откуда-нибудь) как обычно - Value + 1 (или ScrollDelta), а там, где нужен такой специфический отсчёт в параметрах связи "IF(Value > 2, 4 - Value, Value)"Так мне надо сам счетчик в такой последовательности переключать, а у тебя в примере только инфа на выходе обрабатывается. Если вторую метку подключить без этого выражения, то видно, что счетчик в одну сторону переключается. У меня чекбокс, который должен переключать скрипт в такой последовательности 0,1,2,1,0 и дальше по кругу.
Так мне надо сам счетчик в такой последовательности переключать, а у тебя в примере только инфа на выходе обрабатывается. Если вторую метку подключить без этого выражения, то видно, что счетчик в одну сторону переключается. У меня чекбокс, который должен переключать скрипт в такой последовательности 0,1,2,1,0 и дальше по кругу.Тогда на пути к скрипту добавь промежуточный обычный счётчик, счётчик наращивай как обычно, а в связи между счётчиками поменяй параметры связи, как выше.
Тогда на пути к скрипту добавь промежуточный обычный счётчик, счётчик наращивай как обычно, а в связи между счётчиками поменяй параметры связи, как выше.Не работает так, там односторонняя связь от скрипта к счетчику. Хотел попробовать скрипт, что выше дали, вместо обычного счетчика, там так же. Получается, все в одном скрипте надо совмещать?
По другому только скриптом, как выше в примере. Но это также будет отдельный скрипт.
Не работает так, там односторонняя связь от скрипта к счетчику.А если добавить счётчик к скрипту, а не наоборот?
... У меня чекбокс, который должен переключать скрипт в такой последовательности 0,1,2,1,0 и дальше по кругу.Но от счётчика же нужна выходная информация, в общем случае не важно, что у него внутри делается.
А если добавить счётчик к скрипту, а не наоборот?Об этом не подумал. +1. Да, работает. Но у меня все равно ничего не получилось.
В примере скрывающийся контейнер (Container_B), который надо делать видимым постоянно при включении соответствующей опции.Так?
Так?Оно самое. С меня еще +. А можно в эту схему еще Delayer вписать? Я в последний момент решил его в пример не вставлять, а сейчас не могу его примастырить, не правильно все работает. У меня этот контейнер (Container_B) появляется с небольшой задержкой.
Сильно не разбирался, поэтому просто сделал удаление связи и её восстановление скриптом.
Так?Я так понял, что в появляющемся контейнере будут контролы, но при попытке кликнуть по нему он скрывается.
Сильно не разбирался, поэтому просто сделал удаление связи и её восстановление скриптом.
В примере скрывающийся контейнер (Container_B), который надо делать видимым постоянно при включении соответствующей опции.А для чего тогда был нужен реверсивный счётчик (0,1,2,1,0)? Я то подумал, что у тебя чекбокс какой-то хитрый с тремя состояниями.
Я так понял, что в появляющемся контейнере будут контролы, но при попытке кликнуть по нему он скрывается.В скине не скрывается. Можно проверить наведя на волну во время проигрывания радио. (https://www.aimp.ru/forum/index.php?topic=55331.msg341427#msg341427) Это же твоя система, проверь, может я что-то напутал.
А для чего тогда был нужен реверсивный счётчик (0,1,2,1,0)? Я то подумал, что у тебя чекбокс какой-то хитрый с тремя состояниями.Я вообще-то разные вещи пробую, экспериментирую, пытаюсь. Что-то даже и получается, иногда. Тот счетчик вообще из другой "оперы". У меня с ним все равно ничего не получилось. Зато теперь понятно (и не только мне), как это можно сделать, если вдруг понадобится такое.
Я так понял, что в появляющемся контейнере будут контролы, но при попытке кликнуть по нему он скрывается.Ага, только это из-за этого:
В скине не скрывается. Можно проверить наведя на волну во время проигрывания радио. (https://www.aimp.ru/forum/index.php?topic=55331.msg341427#msg341427) Это же твоя система, проверь, может я что-то напутал.Проверил, скрывается тоже, если кликнуть не по контролу (скроллбару, слайдеру) а по свободному месту контейнера. Так бы и не заметил.
А можно в эту схему еще Delayer вписать?Вот.
Проверил, скрывается тоже, если кликнуть не по контролу (скроллбару, слайдеру) а по свободному месту контейнера. Так бы и не заметил.Скрывается, если держать, сейчас тоже заметил. Если один раз кликнуть не скрывается.
Тут фокусы с сервисом IsActive.
Вот.Евгений, благодарю! Пока вроде все выглядит как и хотел. С пробежки вернусь повнимательнее посмотрю.
Хочу сделать некоторую заставку при первом применении скина, пока думаю сделать просто при помощи панели.Наверно можно применить кнопку с двумя наборами кадров, где один набор пустой (прозрачный), а второй с нужной картинкой. И менять State. Ну это если картинка статичная.
затем, через несколько секунд исчезает.Не люблю такое, имхо это лишнее.
Наверно можно применить кнопку с двумя наборами кадров, где один набор пустой (прозрачный), а второй с нужной картинкой. И менять State. Ну это если картинка статичная.Да, как вариант. Картинка статичная. Надо попробовать. Только надо прописывать одиночное переключение, потом еще и кнопку наверно скрывать надо.
Не люблю такое, имхо это лишнее.Ну а что, если пару секунд будет отображаться, все равно ты же не моментально начинаешь тыкать на кнопки. Да и скины обычно не так часто меняют. Пару секунд было бы достаточно, имхо.
... Конечно, хотелось бы чтобы эта заглушка исчезла не резко, а плавно.В растворение всё равно не получится, прозрачность можно менять лишь у элементов, имеющих свойство Color.
... почему-то главное окно появляется со смещением...Похоже, что при запуске размеры главного окна считаются нулевыми, раз оно невидимо, потому в центр экрана устанавливается верхний левый угол появившегося окна.
Идея такая: при первом применении отображается как бы заглушка над всеми элементами гл. окна, затем, через несколько секунд исчезает.
В принципе, решение лежит на поверхности, и без всяких скриптов, но почему-то главное окно появляется со смещением...
По моему это немного не то, плюс, на мой взгляд, такое поведение ещё хуже.Хуже чего?
... при первом применении отображается как бы заглушка над всеми элементами гл. окна, затем, через несколько секунд исчезает.
Хуже чего?То, что скин целиком скрыт и нужно ждать пока исчезнет окно, хуже, чем просто логотип, отображённый поверх главного окна. Плюс смещение главного окна.
Если нужна как раз "заглушка", т.е. гл. окно не требуется скрывать, то результат как раз удовлетворяет поставленной задаче:Да, попробовал, такой вариант подходит.
Ещё, зачем скрывается контейнер в окне, а не само окно со сплэшем?Да, можно и окно скрывать.
Плюс лучше добавить связь таймеру на отключение с параметром "NOT Value", чтобы он не работал впустую потом.А это никак не влияет, счётчик при первом запуске устанавливается в 1 и в таком состоянии будет всегда.
То, что скин целиком скрыт и нужно ждать пока исчезнет окно, хуже, чем просто логотип, отображённый поверх главного окна.Так заглушка и так должна закрывать всё окно, если я правильно понял Zigar.
А это никак не влияет, счётчик при первом запуске устанавливается в 1 и в таком состоянии будет всегда.Ну это счётчик не срабатывает, потому что у него значение не меняется, а таймер то каждые 3 секунды посылает "1" счётчику, разве нет?
Так заглушка и так должна закрывать всё окно, если я правильно понял Zigar.Я про первоначальный вариант, который со смещением и скрытием всех окон, писал.
В принципе, решение лежит на поверхности, и без всяких скриптов, ...Что-то у меня один раз сработало и больше не хочет.
Что-то у меня один раз сработало и больше не хочет.А ini-файл удалял?
А ini-файл удалял?А! нет. Спешка.
Ну это счётчик не срабатывает, потому что у него значение не меняется, а таймер то каждые 3 секунды посылает "1" счётчику, разве нет?И что? Таймеры по-умолчанию вообще всегда тикают, даже если его остановить, программа всё одно его проверяет и на производительности никак не скажется, да ещё с таким огромным периодом - в единицы секунд. Ладно, если б это было ещё связано с аниматорами, с выводоом графики... наверное, чем меньше связей, тем легче плееру.
Что-то у меня один раз сработало и больше не хочет.Так, вроде, ты так и хотел - при первом применении скина.
Вот такую заглушку хочу сделать:Применил схему Black_AVP с таймером.
Так, вроде, ты так и хотел - при первом применении скина.Наверно не так выразился, я имел в виду вообще при применении скина. Через onLoaded, короче. Хотя, сейчас я уже не знаю как лучше сделать. Может действительно, лучше один раз показывать.
Применил схему Black_AVP с таймером.Блин, вот чуть-чуть бы его задержать, буквально на секунду хотя бы. А через delayer или таймер нельзя пропустить переключение контейнеров?
Только логотип всё равно появляется на короткое время при запуске, не смог это убрать.
Наверно не так выразился, я имел в виду вообще при применении скина. Через onLoaded, короче.Тогда лого будет показываться при каждом запуске плеера, даже с одним и тем же скином, смену скина, вроде, никак не отследить.
Тогда лого будет показываться при каждом запуске плеера, даже с одним и тем же скином, смену скина, вроде, никак не отследить.Я знаю, все равно хотел так сделать сначала. Ты как думаешь, лучше один раз показать и все?
Ты как думаешь, лучше один раз показать и все?Больше к этому склоняюсь, тем более, что у тебя есть страница About.
Вообще, меня больше заинтриговала идея со сплешем, вот только сделать бы его тоже в растворение, завтра покумекаю.Анимацию можно сделать.
Только логотип всё равно появляется на короткое время при запуске, не смог это убрать.Это из-за Animation = tgaFade. Если tgaNone, то такого нет.
В общем сделал плавное скрытие логотипа в многостраничной группе, оба варианта - и одноразовый показ логотипа, и многоразовый. Больше ничего не мелькает.Круто +1. Сделал многоразовый все-таки.
Аналогичный приём с многостраничной группой (только второй контейнер прозрачный) применил и с окном. Опять-таки во вложениях 2 варианта - одноразовый показ логотипа и многоразовый.Идея классная, хотел для окон сделать одноразовый показ, но там есть проблема. Нельзя вызвать потом это окно. Иногда, после другого применения (без очистки ini) его можно вызвать кнопкой, но оно потом все равно исчезнет и его больше не открыть.
Идея классная, хотел для окон сделать одноразовый показ, но там есть проблема. Нельзя вызвать потом это окно.А зачем?
А зачем?Я подумал можно сделать таким образом первый показ (InitialVisible) всех окон. Это было бы куда круче, чем когда они просто все в кучу и их потом еще и закрывать надо. Это та же одноразовая демонстрация, но в отдельном окне, я понял.
Чтоб не было этой "кучи" окон поставь InitialVisible = false для всех, зачем их при запуске показывать.Они у меня и не показываются. Я говорил, что можно было бы сделать показ всех окон при первом применении, если бы они сами плавно исчезали.
ИМХО, лучше в сплеше добавить короткое описание основных фич скина мелким шрифтом (как сплеш в ФШ) или же добавить в это окно кнопочку HELP, а то, вон, смотри сколько вопросов возникает в теме из-за того, что юзерам просто лень пошарится по скину и настройкам.Заставка появляется буквально на пару секунд и этого достаточно я считаю. Остальное уже можно делать в других скинах. Эти вещи надо изначально продумывать как делать.
Как вариант, можно для сплеша использовать ещё и сервис IsActive, и растворять окно только после выхода указателя мыши из него. Ещё добавить в это онкно кнопку или метку CLOSE.
Они у меня и не показываются. Я говорил, что можно было бы сделать показ всех окон при первом применении, если бы они сами плавно исчезали.Я и не имел ввиду Fraus, вообще, в дальнейшее развитие идеи Splash Window.
Заставка появляется буквально на пару секунд и этого достаточно я считаю. Остальное уже можно делать в других скинах. Эти вещи надо изначально продумывать как делать.
Как вариант, можно для сплеша использовать ещё и сервис IsActive, и растворять окно только после выхода указателя мыши из него. Ещё добавить в это онкно кнопку или метку CLOSE.Как-то так (на основе удачного Жениного решения с делейерами):
Как-то так (на основе удачного Жениного решения с делейерами):Спасибо
Я говорил, что можно было бы сделать показ всех окон при первом применении, если бы они сами плавно исчезали.Они всё равно все в центре экрана будут, друг над другом, то есть ничего не будет понятно.
Они всё равно все в центре экрана будут, друг над другом, то есть ничего не будет понятно.Я понимаю. Тут определяющим фактором для меня является именно плавное автозакрытие. Можно было бы сделать появление окна с настройками, которое растворялось бы через несколько секунд открывая сам скин. Вообще-то и сейчас такое можно сделать, просто взять скрин окна настроек и показывать его вместо самого окна при первом применении. Но это окно настроек, там все статичное, а в той же Фонотеке надо делать либо пустое поле, либо из редактора вставлять содержимое.
Можно было бы сделать появление окна с настройками, которое растворялось бы через несколько секунд открывая сам скин.По простому не получится, сейчас помимо многостраничной группы ведь есть контейнеры сверху и снизу. Тут либо дублировать эти контейнеры в каждую "страницу" мн. группы, либо создавать отдельную мн. группу выше по уровню и дублировать туда одну страницу (первую или "О скине"?) и эти контейнеры сверху и снизу.
В общем мне уже не нравится эта затея. А всё из-за того, чтобы показать окно на несколько секунд при первом запуске и плавно скрыть.Да я ж не прошу ничего делать. Я просто говорю было бы неплохо иметь возможность так делать. Тем более, как я уже сказал, можно просто взять скрин окна и показать его вместо окна. Это уже мелочи пошли, все основное уже сделано. Благодаря вам.
В общем мне уже не нравится эта затея. А всё из-за того, чтобы показать окно на несколько секунд при первом запуске и плавно скрыть.Сплеши или лого показывают многие солидные программы, тем более затея то эта ничего не стоит - 3-4 простейших провайдера. ИМХО, отношение цена/эффект вполне достойное.
Сплеши или лого показывают многие солидные программы, тем более затея то эта ничего не стоит - 3-4 простейших провайдера. ИМХО, отношение цена/эффект вполне достойное.Ну это скорее те, кто долго грузятся.
По простому не получится...Кстати, появилась одна идея, надо попробовать.
Я подумал можно сделать таким образом первый показ (InitialVisible) всех окон. Это было бы куда круче, чем когда они просто все в кучу и их потом еще и закрывать надо. Это та же одноразовая демонстрация, но в отдельном окне, я понял.Тогда, может, подумать в несколько другом направлении - сделать подобие демо-режима, который можно было бы вызывать и уже из работающего скина, опционально.
Тогда, может, подумать в несколько другом направлении - сделать подобие демо-режима, который можно было бы вызывать и уже из работающего скина, опционально.Сложновато будет все это делать. Возни много. Хотя эффект от такого конечно будет. Что касается демо-режима, то нечто такое хотел для BLACK ONIX, после применения скина в гл. окне поочередно проигрываются все виды спектрумов и еще что-нибудь в этом роде. Правда, как делать проигрывание спектрумов я не знаю :), анимацию задолбаешься делать для 18 спектрумов.
Поочерёдно показать все окна и фичи или что там ещё...
Редактор скинов работает с файлами проектов скинов от AIMP2 (*.acs2), от AIMP3 (*.acs3proj) и AIMP4 (*.acs4proj). При этом каждый из проектов автоматически конвертируются в последнюю версию - .acs4proj.
Файл проекта отличается от файла скина тем, что хранит в себе дополнительную информацию, нужную только для редактирования и извлечения текстур.
Прошу прощения.
Как изменить свойство z-order?
В справке ничего не нашол. >:(
В редакторе? В скрипте?
P. S. Тольшо не пишите пожалуйста читай внимательно справку, уже читал. :( Прошу внятного объяснения. Sorry.Вы уверены, что читали справку?
Мне нужно изменить z-order контейнера liPlaybackControl, но пункта позиционирование элементов для него нет.Потому что контейнеры относятся к элементам фона. Для них Z-order можно сменить двумя способами, а для элементов управления - аж тремя:
Собственно для чего мне всё это нужно: чтобы элемент Title ( название песни) отображался всегда наверху, а сделать z-order больше 2-х для него не получается.А причём тогда вопрос про контейнер? Посмотрите структуру встроенного проекта Bliss Compact - там же всё прозрачно.
Объясните пожалуйста как с помощью скрипта заставить элемент Panel растягиваться до определённого размера. В скритах вообще туго понимаю ???Как то вопрос неконкретно поставлен, что значит "до определённого размера"? Для этих целей, наверное, больше подходит контейнер и без всяких скриптов.
Как то вопрос неконкретно поставлен, что значит "до определённого размера"? Для этих целей, наверное, больше подходит контейнер и без всяких скриптов.нужно именно чтоб панель, не думаю что это сложно, хотелось бы знать
Ну, так сформулируйте задачу полностью, от какого воздействия должны меняться размеры, что должен делать скрипт. Невозможно же ответить на такой вопрос.при растягивания контейнера должна растягиваться Panel(внутри него) до определённого размера, при этом контейнер( в котором находится Panel) должен продолжать растягиваться дальше.
при растягивания контейнера должна растягиваться Panel(внутри него) до определённого размера, при этом контейнер( в котором находится Panel) должен продолжать растягиваться дальше.
ИМХО, лучше это реализовать через контейнер(панель можно в него поместить). И установить параметры SizeMinimal, SizeMaximal и AlignmentMargins,если надо отдалять от края предка.+1
ИМХО, лучше поколдовать с контейнерами, можно использовать ещё и скрывающиеся.Спасибо! попробую, не думал что тут будет какое-то колдовство :-\
Но, если уж сильно хочется именно с панелью и на скриптах, см. влож. Но придётся использовать панель в пенели, чтоб скрипт не зацикливался.
Пороговое значение ширины окна, при котором панель больше не увеличивается, в этом примере 400 пикс.
Визуально всё работает как надо, но заметил одну странность: при изменении отступов панели скриптом, её ActualWidth считывается некорректно. То ли баг, то ли ещё что...
Визуально всё работает как надо, но заметил одну странность: при изменении отступов панели скриптом, её ActualWidth считывается некорректно.Если ширину панели определять в её родном скрипте, то всё ОК. :-\
Но, если уж сильно хочется именно с панелью и на скриптах, см. влож.А почему просто не отвязывать якорь у панели от правой стороны (при превышении нужного размера)?
Не совсем понял, что нужно, но предлагаю,как вариант, свой пример с LayoutSplitView, без скриптовЭто не то, нужно чтоб панель при достижении определённой ширины окна больше не растягивалась. На скриптах это реализуемо, на контейнерах... надо думать.
А почему просто не отвязывать якорь у панели от правой стороны (при превышении нужного размера)?Попробуй, скрипт от этого в сущности не изменится.
Правда вчера, когда пытался сделать так сходу, у меня вылетал AV.
ИМХО, лучше это реализовать через контейнер(панель можно в него поместить). И установить параметры SizeMinimal, SizeMaximal и AlignmentMargins,если надо отдалять от края предка.
+1
Собственно вот, приложил пример, что может быть проще. Если такой вариант подходит, конечно.Спасибо тоже интересный вариант :)
Никаких скриптов, никаких связей. Только SizeMaximal и дополнительный контейнер с нулевыми размерами. Для уверенности можно сделать появление доп. контейнера при превышении определённых размеров родительского (свойства AutoHide и AutoHideParentSizeThreshold).
Меню из списка PopupMenu можно как-нибудь добавить в пользовательское меню? Собрать например группу pmAdd, pmDelete, pmMisc, pmSorting и т.д. в одном меню можно?Пока нет, но такая возможность запланирована - [Запланировано] Возможность добавлять стандартные меню в пользовательские (https://www.aimp.ru/forum/index.php?topic=51531).
Как получить значения со скролла? Там же есть значения, в процентах например.Похоже, что никак.
Как назначить текстуры кадрам анимации для вращающейся катушки. В справке очень скупо описано.У меня получается не только вращение, но и движение по горизонтали. Поясните подробно пожалуйста. Я делаю в Фотошопе катушку, копирую сколько нужно копий, выстраиваю в ряд, сохраняю в png и потом вставляю как текстуру в аниматор. Как не пытаюсь менять расстояния между копиями, все равно остается сдвиг по горизонтали. Хотелось бы получить ссылку на готовый проект катушечного магнитофона.либо у вас неправильная раскадровка (причина: центр диска смещается относительно габаритов кадра)
Похоже, что никак.
Плохо!А для чего это может пригодиться? Можно ведь предложить реализовать это, если идея стоящая.
А для чего это может пригодиться? Можно ведь предложить реализовать это, если идея стоящая.
Как получить значения со скролла? Там же есть значения, в процентах например.
Да я хотел в качестве эксперимента сделать скрывающуюся панели у плейлиста как в Андроиде.
Зачем?
Какую панель?
Эта панель видна когда например я нахожусь вверху списка или внизу. Это можно применять не только к панелям.
О какой панели идет речь?
О какой панели идет речь?Со скроллбаром плейлиста.
О какой панели идет речь?
Чтобы он появлялся при прокрутки на некоторое время, а потом исчезал?
Теперь понял задачу. Сейчас так сделать точно не получится, а вот как сделать это в движке, по уму, пока не знаю.
либо у вас неправильная раскадровка (причина: центр диска смещается относительно габаритов кадра)Спасибо большое за ответ. Пока его ждал уже понял свою ошибку и исправил. Катушки вращаются. Теперь бы еще как то понять, как показать перемещение пленки с левой катушки на правую. Да еще и перемотку показать как это сделано в проигрывателе NMP. Это я самостоятельно точно не осилю. Извините, я первый раз этим занимаюсь.
либо указано неверное количество кадров (симпотом: центр диска уходит в сторону и край диска появляется с другой стороны)
это очевидные вещи любой простой анимации, поэтому в справке не описаны
Спасибо большое за ответ. Пока его ждал уже понял свою ошибку и исправил. Катушки вращаются. Теперь бы еще как то понять, как показать перемещение пленки с левой катушки на правую. Да еще и перемотку показать как это сделано в проигрывателе NMP. Это я самостоятельно точно не осилю. Извините, я первый раз этим занимаюсь.Это делается с помощью покадрового прогресс-бара, где первый кадр адна пустая бобина, вторая полная, последний кадр - всё наоборот.
Теперь бы еще как то понять, как показать перемещение пленки с левой катушки на правую.Это уже многокадровый (100..300 кадров) TASESliderMasked, используемый как прогресс-бар, по сути тот же аниматор, но с кадром маски, обычно пустым.
Да еще и перемотку показать как это сделано в проигрывателе NMP.Приемлимую перемотку в бобинниках реализовать не получится, просмотрите темы с катушечниками - там это обсуждалось. И здесь без скриптов тоже не получится.
... а заодно бы уменьшил их размерыИнтересно, как вы себе это представляете? Это всё равно, что нарисовать скин заново, но тогда зачем нужен проект?
Интересно, как вы себе это представляете?...Ctrl+T :))
Кадры, ес-но, должны быть все одного размера.Что надо сделать чтоб он заработал в фотошопе. Куда его загрузить. Фотошоп CS6 13 правда портейбл. Я с этим еще не сталкивался. Проекты нужны для наглядности, как шпаргалка.
Специально для этих целей есть скрипт для ФШ (https://www.aimp.ru/forum/index.php?topic=30668.msg328529#msg328529).
Большое спасибо всем за полезные советы. Я писал,что с анимацией бобин все получилось, но это не так. Немного другой размер бобин и снова все смещается. Хотя все отцентровано. Уже спать не могу пока не пойму в чем суть? Посмотрите два вида раскадровки (без проворотов правда). Это просто размноженные схемки отцентрованных кругов. В первом случае схемка стоит на месте, во втором случае смещается по горизонтали. Разница между ними только в размере. В чем причина? Может есть зависимость расстояния между копиями от размера исходной картинки? Тогда какая? А может программа глючит? Может ваш скрипт мне поможет, когда разберусь как его запустить.У вас какие-то неадекватные размеры текстуры, размер по горизонтали должен быть кратный количеству кадров
Что надо сделать чтоб он заработал в фотошопе. Куда его загрузить. Фотошоп CS6 13 правда портейбл.Фотошоп позволяет загрузить скрипт из любого места, если же нужно, чтоб он был в меню, то тогда файл скрипта нужно поместить в папку ...\Presets\Scripts\
У вас какие-то неадекватные размеры текстуры, размер по горизонтали должен быть кратный количеству кадровВот это уже желанная подсказка. Большое спасибо. На счет кратности я не догадался. Катушку вырезал с фотографии магнитофона, который подготовил для скина. Поэтому и размер такой. Но она закрутилась. А послал вам круг обведенный с катушки, чтоб показать отцентрованность и размер. Я этот скин делаю с фотографии, хоть и с качественной. Все кнопки и т.д. вырезаю тоже с нее, поэтому и получится мультяшка. Судя по качеству, мастера для своих скинов создают сначала модель магнитофона каким то образом. Такого качества фоток наверно нет. Все магнитофоны уже пообшарпаны. Можно в фотошопе конечно подправить, но не до такой же степени.
То, что у вас аналогичная кривая картинка 123 работает - это случайность, АИМП удачно округлял значения
Это делается с помощью покадрового прогресс-бара, где первый кадр адна пустая бобина, вторая полная, последний кадр - всё наоборот.А где можно подробней прочитать про этот прогресс-бар? И может кто-то поделится заготовками пленки и пустых прозрачных катушек, как например в скине Сатурна. Буду благодарен.
Плёнку нужно располагать за бобинами.
Фотошоп позволяет загрузить скрипт из любого места, если же нужно, чтоб он был в меню, то тогда файл скрипта нужно поместить в папку ...\Presets\Scripts\Жаль. CorelDRAW тоже только векторные может дублировать одновременно с проворачиванием. А я именно растр. проворачиваю. Так что об автоматике можно забыть? Все кадры вручную проворачивать? Утомительно, когда много кадров и если захочется еще какой-то другой скин сделать.
Скрипт рассчитан для вращения векторных фигур (в той теме описан способ его применения), растровые изображения после нескольких трансформаций таким методом превратятся в кашу.
А где можно подробней прочитать про этот прогресс-бар? И может кто-то поделится заготовками пленки и пустых прозрачных катушек, как например в скине Сатурна. Буду благодарен.А что вы хотите прочитать?
... Судя по качеству, мастера для своих скинов создают сначала модель магнитофона каким то образом. Такого качества фоток наверно нет. Все магнитофоны уже пообшарпаны. Можно в фотошопе конечно подправить, но не до такой же степени.Никто картинки в скинах не использует ;D, фотографии нужны лишь для позиционирования элементов, как шаблон, всё до последнего винтика рисуется в фотошопе.
Приветствую. Можно сделать индикатор состояния воспроизведения одним элементом (через state или еще как-то)?Привет. Если ты имеешь в виду состояния стоп, играет и пауза, то в справке есть
TASEDigitsDisplay может использоваться для отображения состояния воспроизведения. Сервис prvPlayerState State передает обычные целочисленные значения (стоп – 0, играет – 1, пауза – 2).
Текстура будет использоваться трехкадровая
Привет. Если ты имеешь в виду состояния стоп, играет и пауза, то в справке есть:) Спасибо. Про справку чёта забыл.
Можно и TASEButton для этого использовать. Свойство FramesPerState = 1.Это, кстати, полезная информация.
А что вы хотите прочитать?Смутило слово прогресс-бар. Я так понимаю, надо поставить два слайдера или аниматора. На одном кадры перехода с полной катушки до пустой, на другом наоборот. Но я не знаю как настроить связи в этом случае. Надо ж как то увязать со временем проигрывания трека или с каким нибудь постоянным числом, например 45 минут.
Я же объяснил, что нужен набор кадров, как аниматор, где плёнка плавно перетекает от одной катушки к другой + кадр-маска (подробнее в справке, раздел "Регуляторы").
Требования к кратности размера количеству кадров аналогично аниматору.
Смутило слово прогресс-бар. Я так понимаю, надо поставить два слайдера или аниматора. На одном кадры перехода с полной катушки до пустой, на другом наоборот. Но я не знаю как настроить связи в этом случае. Надо ж как то увязать со временем проигрывания трека или с каким нибудь постоянным числом, например 45 минут.Вы опять ничего не поняли
Да, и как потом эта анимация снова запустится с началом другого трека или после 45 мин.?Плёнку вращать не нужно, достаточно вращать катушки, а плёнка просто будет перетекать от одной катушки в другую
С кручением катушек проще. Там 360 градусов в основе и отключение анимации при остановке проигрывания.
Никто картинки в скинах не использует ;D, фотографии нужны лишь для позиционирования элементов, как шаблон, всё до последнего винтика рисуется в фотошопе.Большое уважение мастерам. Такая идентичная детализация. Супер. Я что то подобное могу сделать в 3Dmax, но будет не очень похоже из за отсутствия оригинальных текстур и шрифтов. Или мастера сами создают текстуры и шрифты?
Вы опять ничего не понялиТеперь уже наглядно понятно. А пленку я и не собирался вращать. На левой катушке хотел сделать анимацию исчезновения пленки, а на правой анимацию появления. Но видать не угадал.
Прогресс-бар - это полоска, которая ползёт при проигрывании трека, она может быть покадровой, как эта (кадры идут сверху вниз, последний кадр - маска):
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=49556)
Теперь каждый кадр меняете на 2 катушки с разной степенью заполнености: о-О, 0-0, О-о
Связи такого прогресс-бара самые обычные, посмотрите в стандартном проекте Bliss
Плёнку вращать не нужно, достаточно вращать катушки, а плёнка просто будет перетекать от одной катушки в другую
На левой катушке хотел сделать анимацию исчезновения пленки, а на правой анимацию появления. Но видать не угадал.Это зависит от модели магнитофона
... Или мастера сами создают текстуры и шрифты?Уж чего-чего, а этого добра в инете навалом. Да и какие тут особые текстуры нужны?
procedure Execute(var State: Integer);
var
BT,: TComponent;
ZT,: TComponent;
begin
BT := FindObject('AS');
case State of
2:
begin
ZT := FindObject('CC');
ZT.BeginUpdate;
ZT.Set('State', 2);
ZT.EndUpdate;
end;
end;
end;
Ну подскажите,пожалуйста,что нужно вместо State написать что-бы поменять положение слайдера СС(на четыре положения) другим слайдером ASМенять надо Position счётчика, подключенного к слайдеру, у слайдера нет свойства State.
(то-же четыре положения) в положение 2?
Менять надо Position счётчика, подключенного к слайдеру, у слайдера нет свойства State.Большое спасибо Black_AVP.+
FindObject('Имя счётчика').Set('Position', 2)
procedure Execute(var State: Integer);
var
BT,: TComponent;//управляюший слайдер
ZT,: TComponent;//счётчик NewLogicalOperatorCounter
CT,: TComponent;//управляемый слайдер
begin
BT := FindObject('SliderA');
case State of
2:
begin
ZT := FindObject('SliderB');//ищем SliderB
CT := FindObject('NewLogicalOperatorCounter');//ищем счётчик подключённый к Action SliderB
ZT.BeginUpdate;
CT.Set('Position', 2);//меняем позицию SliderB
ZT.EndUpdate;
end;
end;
end;
Внизу правильный код.Только много лишнего. Зачем BT := FindObject('SliderA'); если эта переменная нигде больше не используется?
А не подскажет мне кто-нибудь где можно взять именно SEv3.50? :-\В Гугле
Потому как под wine 4й аимп ложит систему, и мне бы 3й немного подшаманить.
А не подскажет мне кто-нибудь где можно взять именно SEv3.50? :-\
Потому как под wine 4й аимп ложит систему, и мне бы 3й немного подшаманить.
Подскажите пожалуйста, как показать загорание светодиода над кнопками перемотки и перехода на след.трек при нажатии?Без скриптов - никак. Можно, как вариант, включить светодиод в кадры кнопки.
Для кнопки пуск я сделал поставив текстуру диода в скрывающуюся кнопку. Горит пока не нажму стоп.Для индикации состояний плеера (STOP, PLAY, PAUSE) существует провайдер prvPlayerState.State (см. справку).
Контейнер сохраняет ширину основного окна, размещается либо сверху главного окна, либо снизу и не перемещается.На то он и контейнер - его положение и размеры задаются выравниванием и отступами от родителя.
Можно, как вариант, включить светодиод в кадры кнопки.Спасибо! Это действительно вариант. А я уперся в скрывающуюся кнопку. Мог бы сам догадаться. Стыдно.
Для индикации состояний плеера (STOP, PLAY, PAUSE) существует провайдер prvPlayerState.State (см. справку).Я им и воспользовался.
На то он и контейнер - его положение и размеры задаются выравниванием и отступами от родителя.я читал где то коментарии модератора, что можно сделать маленький контейнер.
я читал где то коментарии модератора, что можно сделать маленький контейнер.Разумеется, контейнер можно сделать любого размера.
Текстуру прогресс-бара вставляю в горизонтальный слайдер.Для кадровой текстуры нужен TASESliderMasked, иначе, где вы будете указывать число кадров и маску.
Для кадровой текстуры нужен TASESliderMasked, иначе, где вы будете указывать число кадров и маску.Спасибо. Заработало. Ведь писали раньше какой слайдер использовать. Снова тормознул.
Прогресс бар сделал вручную. Утомительно. Сам скрипты делать не могу. Может можно где то скачать скрипт для такого прогресс бара?Для прогресс-бара скрипт не нужен, достаточно биндинга с prvPlayerState.Progress.
Скин у мя и так маленький и если надо я его увеличиваю слайдером,поэтому надобность в треи отпала,флоу и текстуры с мини версии удалил,но всё равно переходит в трей по дабл клику. Как отменить двойной клик по главному окну?Или забиндить чавось другого?Скин не может быть [FULL] без миниплеера.
Для прогресс-бара скрипт не нужен, достаточно биндинга с prvPlayerState.Progress.К сожалению я не знаю, что такое биндинг. Прогресс-бар сделал, как меня научили здесь ранее. Катушки крутятся, пленка переходит с одной на другую. Но как скорость увязать со временем трека, понятия не имею. Как раскадровка на это влияет? Что именно необходимо сделать? Было бы не плохо , если б по этой анимации катушек был бы видео-урок в YouTube. Многие смотрели бы. Хотя может и есть уже, я просто не искал.
Аниматоры должны быть "зеркальны", т.е. первый кадр левого аниматора должен изображать полный рулон, а первый кадр правого аниматора - пустой.
Ещё надо принять во внимание, что зависимость диаметра рулона ленты от позиции в треке нелинейная. В начале трека правая (принимающая) бобина крутится быстрее левой и диаметр рулона на ней растёт быстрее, чем убывает тот же диаметр на левой. Это, ес-но, надо учесть было ещё при раскадровке.
К сожалению я не знаю, что такое биндинг. Прогресс-бар сделал, как меня научили здесь ранее. Катушки крутятся, пленка переходит с одной на другуюЗначит знаете, что такое биндинг, иначе бы не сделали. Это и есть связи между элементами и провайдерами, а в этих связях могут быть ещё и математические выражения (см. справку).
Но как скорость увязать со временем трека, понятия не имею.Скорость чего: вращения бобин или изменения рулонов?
Уж простите меня за столько вопросов.А дальше их будет ещё больше.
... ничего до этого не читая. Просто открыл редактор и пытаюсь что то сделать, а справка написана для уже продвинутых.Редактор скинов - не та программа, чтоб осваивать её тычково-эмпирическим методом. Справку стоило прочитать хотя бы для того, чтоб ориентироваться в редакторе, усвоить терминологию, чтоб не возникало таких вопросов "что такое биндинг?", а иначе мы так и будем разговаривать на разных языках.
Справку стоило прочитать хотя бы для того, чтоб ориентироваться в редакторе, Надо было сначала поковыряться во встроенных скинах, разобраться в структуре их построения, связях элементов.Справку я как раз читал, поэтому и сказал, что она для продвинутых. Я не читал спец литературу, учебники. В справке, где примеры есть все понятно, а где нет темный лес.
Справку я как раз читал, поэтому и сказал, что она для продвинутых. Я не читал спец литературу, учебники. В справке, где примеры есть все понятно, а где нет темный лес.
Вопросы задаю по темам, которые не описаны в справке.
Да, стрелки индикаторов дергаются,как психованные. Раскадровку делал с углом поворота в один градус. Неужели для плавности надо ещё меньше угол поворота задавать или секрет в чем то другом.А не пробовали в свойства элемента заглянуть - там время реакции настраивается.
Я не читал спец литературу, учебники.Неужели вы полагаете, что есть какая-то специальная литература по скинам и именно для АИМПа?
Подскажите пожалуйста, как сделать что бы плейлист открывался и из мини плеера?
Никак, это противоречит идеологииНе совсем понял ответ.
Не совсем понял ответ.
Как открытие плейлиста из мини плеера противоречит идеологии?
Например мне удобней когда включен скин мини плеера и плей лист.
Подскажите пожалуйста, как сделать что бы плейлист открывался и из мини плеера?Закрепить плейлист за край экрана...
Видимость окна плейлиста зависит от видимости главного окна.Но если в плей листе сменить мастера на TrayControl, то он открывается из мини плеера, но тогда пропадает из главного окна.
Закрепить плейлист за край экрана...Прикрепил к правому краю, свернул главное окно и плей лист тоже свернулся.
Прикрепил к правому краю, свернул главное окно и плей лист тоже свернулся.Подведи мышку к краю экрана, кликни по стрелочке...
Но если в плей листе сменить мастера на TrayControl, то он открывается из мини плеера, но тогда пропадает из главного окна.Его же вроде можно скриптом перекидывать. Или нет?
Я сделал два окна плей листа. Одно в главном окне, другое в мини плеере, но беда в том, что TasePlayList существует только в одном экземпляре. Его можно добавить только в одно окно.
Его же вроде можно скриптом перекидывать. Или нет?
Например мне удобней когда включен скин мини плеера и плей лист.А чем тогда будет отличаться миниплеер с плейлистом от главного окна, где логика то? Не проще ли подыскать или сделать свой скин с плейлистом и минимумом кнопок?
А чем тогда будет отличаться миниплеер с плейлистом от главного окна, где логика то?Прежде всего будет отличаться занимаемым местом на экране.
Для себя нашёл такое решение. Прикрепляю плей лист к краю экрана, в мини плеер добавил кнопку "Показать/Скрыть плей лист" и теперь плей лист выезжает из края когда на экране хоть мини плеер, хоть главное окно.Я именно так же делаю в миниплеерах своих скинов!
Всем здравия. Подскажите, как можно обойти следующую ситуацию (именно с контейнерами):
При растягивании мини-плеера появляется контейнер при достижении определенного размера род. контейнера,
когда начинаем сворачивать обратно, мин. размер становится больше на ширину этого контейнера, который появился.
Для того, чтобы трей свернуть до минимума нужно еще раз его уменьшать. В примере все видно, думаю будет понятно.
Подскажите пожалуйста, как добавить провайдеры в настройки связей кнопки переключателя с тремя и более состояниями. Провайдеры в окне добавляются, а настроить связь action-action более, чем для одного провайдера нет возможности. Или как по другому сделать переключатель состояний пуск-стоп-след.трек-перемотка и т. д. в одной кнопке, как это сделано в магнитофоне Сатурн или Маяк 203.Для каждого из провайдеров - своя кнопка. Многофункциональность переключателя обманчива. Кнопки располагаются стопкой; у кнопок с большим ZOrder первые два кадра прозрачные, третий отображает состояние "нажатия"; зона чувствительности - маска в виде сектора.
Для каждого из провайдеров - своя кнопка. Многофункциональность переключателя обманчива. Кнопки располагаются стопкой; у кнопок с большим ZOrder первые два кадра прозрачные, третий отображает состояние "нажатия"; зона чувствительности - маска в виде сектора.Большое спасибо за подсказку. Завтра попробую реализовать
Примеры от Маяк-203
Для каждого из провайдеров - своя кнопка. Многофункциональность переключателя обманчива. Кнопки располагаются стопкой; у кнопок с большим ZOrder первые два кадра прозрачные, третий отображает состояние "нажатия"; зона чувствительности - маска в виде сектора.Не получается. Посмотрите мои текстуры (сделаны по быстрому для тренировки). Что не так?
Примеры от Маяк-203
Тысяча извинений. Уже разобрался. Забыл поставить доступность мыши по маске.Вопрос снят. Большое спасибо.Может будет полезен и этот пример (https://yadi.sk/d/0rGVq-eW3GAt8T)...
Может будет полезен и этот пример (https://yadi.sk/d/0rGVq-eW3GAt8T)...Спасибо, посмотрю. Возник новый вопрос. Как Вы сохраняете шрифт и пиктограмки в таком качестве? При сохранении в png шрифты смазываются , а мелкий вообще в кашу превращается.
Спасибо, посмотрю. Возник новый вопрос. Как Вы сохраняете шрифт и пиктограмки в таком качестве? При сохранении в png шрифты смазываются , а мелкий вообще в кашу превращается.Я рисую в векторе в увеличенном масштабе, приводя к нужному уже растрированное изображение. В этом случае и разборчивость шрифтов лучше.
Я рисую в векторе в увеличенном масштабе, приводя к нужному уже растрированное изображение. В этом случае и разборчивость шрифтов лучше.Спасибо!
Может будет полезен и этот пример (https://yadi.sk/d/0rGVq-eW3GAt8T)...Большое спасибо за этот пример! Посмотрел, это то что надо. Именно связи меня интересовали.
А где можно посмотреть полное описание стандартных провайдеров? Которые ac...., что каждый из них делает? Всю справку перерыл и не нашел.
К примеру, надо мне кнопку "Управление плейлистами", а какой провайдер для нее нужен, не понятно, в стандартном скине у этой кнопки в биндинге нет связей.
А где можно посмотреть полное описание стандартных провайдеров? Которые ac...., что каждый из них делает?Да вроде интуитивно при переводе понятно большинство
Да вроде интуитивно при переводе понятно большинство+1 (300) - для ровного счёта.
Там свойство PopupMenu поменяно.Ааа, вот оно что, я про этот параметр и забыл, давно не пользовался эдитером)
Да вроде интуитивно при переводе понятно большинствоНу просто перевод, у некоторых бывает не совсем понятен, нужно именно описание, какое действие будет происходить, при взаимодействии с этими провайдерами. А то получается все методом тыка, ставишь связь, собираешь скин, а там оказывается не то действие, что ты думал, меняешь, опять собираешь и т.д. Так же у PopupMenu никаких описаний. А представьте как новичкам тяжело разобраться.
Читаю "Новые провайдеры"
acMainDSPManagerVolumeNormalization - DSP мендеджер и нормализация громкости
acPlayableFileShowFileInfoAtCursor - информация о файле под курсор с воспроизведением...
ML = media library - т.е. библиотека.
Управление плейлистами - должно быть acplaylistmanager
И все-таки, получается не совсем, что я хотел, надо кнопку с лкм - pmManagePlaylist, а пкм - pmQuickOptions :'(
Ну просто перевод, у некоторых бывает не совсем понятен, нужно именно описание, какое действие будет происходить, при взаимодействии с этими провайдерами. А то получается все методом тыка, ставишь связь, собираешь скин, а там оказывается не то действие, что ты думал, меняешь, опять собираешь и т.д. Так же у PopupMenu никаких описаний. А представьте как новичкам тяжело разобраться.Я об этом тоже говорил когда-то, когда новая справка появилась. С описанием было гораздо удобнее. Я сейчас, наверно, и половины провайдеров не знаю, что там вообще есть.
Можно ли как-нибудь кнопке добавить подсказку(Hint) с пользовательской локализацией(@Lng:ID)? Не получается че-то ???
@Lng:1;
Заполняете свойство "Hint"? Точку с запятой в конце поставили?Code: [Select]@Lng:1;
Большое спасибо за этот пример! Посмотрел, это то что надо. Именно связи меня интересовали.Если не пренебрегать скриптами, то всё решаемо (в АИМП4), и без дребезга, и без всяких слоёных пирогов.
Если не пренебрегать скриптами, то всё решаемо (в АИМП4), и без дребезга, и без всяких слоёных пирогов.Готовое решение не даёт представления, как это реализовано конкретно.
Всего один элемент TASESliderMasked с 5-ю кадрами.
Готовое решение не даёт представления, как это реализовано конкретно.А я и не ожидал, что тебе понравится, потому и проект выкладывать не стал. Стряпайте свои пироги.
Кстати, у TASESliderMasked есть одна особенность, которая где-то полезна, а где-то нет - реакция на скролл.
А я и не ожидал, что тебе понравится, потому и проект выкладывать не стал. Стряпайте свои пироги.Может igor6507 понравится, по его вопросу эти посты.
... я предполагаю, что применяю неправильную маску.Конечно, неправильную. Градиент должен располагаться между крайними положениями переключателя, как и в обычных крутилках, остальное должно быть прозрачным.
Как в данном случае для этой кнопки-переключателя присвоить разные всплывающие подсказки, с помощъю пользовательской локализации, в зависимости от значения кнопки-переключателя. Возможно ли вообще так сделать?
Is it possible to make a curved skin like in my example attached?no
Куда делась маска доступности для мыши у плейлиста?
А она работала?
Сейчас попробовал на v3.60 выбрать "Недоступен" у текстуры Skin плейлиста — плейлист всё равно доступен.
Если нет, то это большой косяк.
Зачем блокировать зону плейлиста? Если есть наложенная сверху панель, то она сама ведь забирает клик на себя.
Да, но плейлист при этом не перелистывается как будто курсор над ним, не знаю помогает ли при этом маска, просто хотел проверить.
Да, но плейлист при этом не перелистывается как будто курсор над ним, не знаю помогает ли при этом маска, просто хотел проверить.
???
Kibermanick хотел сделать так, чтобы у плейлиста была недоступная для клика мышкой зона, но при этом эта зона реагировала бы на колёсико мыши (плейлист прокручивался).
???
Нет, я хотел сделать так чтобы когда курсор находился над определенной областью плейлиста, он не замирал.
Не понял, кто не замирал?
Плейлист. Если ты оставишь курсор над плейлистом и начнешь переключать треки с клавиатура то, плейлист замрет на месте, мне этого не надо в определенных местах плейлиста.
И как я должен был догадаться до этого? Можно же было сразу это написать =)
Кстати есть такое предложение, если что — https://www.aimp.ru/forum/index.php?topic=53891.0
Это предложение как раз наоборот, мне нужно что бы плейлист жил своей жизнью.
Не подскажите, откуда узнать имя объекта и параметра?
Связаны ли они с секциями/параметрами-значениями из AIMP.ini?
Например, у меня есть в секции
[AIMPSoundOut]
FFTEqualizerPreamp=0
значит ли это, что для задания этого параметра скрипт будет выглядеть вот так:
procedure Execute(var State: Integer);
var
PL: TComponent;
begin
PL:= FindObject('AIMPSoundOut');
PL.Set('FFTEqualizerPreamp', '0');
end;
непонятно. Не вижу провайдера, у которого были бы все параметры, подобно эквалайзеру. Часть параметров вкладки "звуковые эффекты" имеются как отдельные провайдеры, но не все, (например, не вижу того же "подавление голоса"). Правильно ли я понимаю, выходит, что сбросить настройки ВСЕХ параметров вкладки "звуковые эффекты" заведомо не получится?
... Правильно ли я понимаю, выходит, что сбросить настройки ВСЕХ параметров вкладки "звуковые эффекты" заведомо не получится?Сбросить можно только состояния движков, то, что в чекбоксах не имеет провайдеров..
Еще хотел спросить: действительно ли в редакторе никак нельзя поменять плэйлист и эквалайзер местами? (Пытался это сделать, устанавливая им отрицательные смещения, но скин после такого начинает глючить.)
Вот так хотел сделать (фотошоп). Но при отрицательных значениях в AlignmentMargins (как по идее этого можно было бы достигнуть) для эквалайзера/плэйлиста начинаются глюки с их отображением (не отображается часть элемента).Это делается привязкой окон плейлиста и эквалайзера к другим сторонам главного окна
Can't find this thing in the editor.
This is float arrow...Thank you Artem!
Подскажите пожалуйста, как сделать реакцию на переключение треков?
Подскажите пожалуйста, как сделать реакцию на переключение треков?Возможно, это подойдёт: https://www.aimp.ru/forum/index.php?topic=27831.msg322316#msg322316
Что именно нужно?
Возможно, это подойдёт: https://www.aimp.ru/forum/index.php?topic=27831.msg322316#msg322316
... но, активность стоит целую секунду перед реакцией.Дискретность таймера - 1 с. "1" появляется на выходе коммутатора в конце трека, если он доигрался до конца и в начале нового, вцелом - 2 с.
Дискретность таймера - 1 с. "1" появляется на выходе коммутатора в конце трека, если он доигрался до конца и в начале нового, вцелом - 2 с.
Если нужно отлавливать только начало трека, в этой же схеме на Value3 можно завести State, выражение дописать, чтоб "1" была только в режиме воспроизведения.
С выражением что то не догоняю, как записать?Догоняй: ((Value1 = 0) OR (Value2 = 0)) AND (Value3 = 1)
Догоняй: ((Value1 = 0) OR (Value2 = 0)) AND (Value3 = 1)
Хотя пойдет, только время на активность всего секунда.А какое это имеет значение? Сигнал с выхода коммутатора - это старт для дальнейшего сценария. подключай к нему счётчик или скрипт и делай что хочешь.
Как сделать двоичный двухразрядный счетчик из двух Counter-ов?У счётчика модуль может быть любой, для чего их каскадировать? Всегда можно преобразовать значения одного счётчика во что угодно.
А какое это имеет значение? Сигнал с выхода коммутатора - это старт для дальнейшего сценария. подключай к нему счётчик или скрипт и делай что хочешь.
У счётчика модуль может быть любой, для чего их каскадировать? Всегда можно преобразовать значения одного счётчика во что угодно.
А "двоичный двухразрядный счетчик" будет считать так: 00, 01, 10, 11.
Тогда вообще достаточно одного счётчика с модулем 2. В одном случае используется его прямое значение в другом - инвертированное NOT Value.
Нет. Второй счетчик меняется только если на первом единица, а если ноль не меняется. Единица на первом счетчике стоит всего секунду остальное время ноль. Каждая новая единица на первом счетчике переключает второй счетчик. Как переключение порядков.Тогда нужен счётчик с модулем 4, считать он будет, как я уже писал 00, 01, 10, 11 (т.е. 0,1,2,3,0...), тебе остаётся только выделить второй бит.
Я так понял, что ты сигнал с коммутатора подал на счётчик без всякого выражения?
Я не очень понял но возможно.Там, ес-но, должно быть выражение Value + 1 и счётчик должен иметь модуль = 2, вот тогда при смене каждого трека он и будет менять своё состояние с 0 на 1 и наоборот.
Там, ес-но, должно быть выражение Value + 1 и счётчик должен иметь модуль = 2, вот тогда при смене каждого трека он и будет менять своё состояние с 0 на 1 и наоборот.
Что то не то.
Есть коммутатор: (Value1=0) OR (Value2=0) и он имеет состояние 1 только секунду. Надо что бы при каждом появлении 1 этого коммутатора менялось состояние другого провайдера с 1 на ноль и наоборот.Как я уже и писал: соединить коммутатор с выражением ((Value1=0) OR (Value2=0)) AND (Value3 = 1) со счётчиком с выражением Value + 1.
Как я уже и писал: соединить коммутатор с выражением ((Value1=0) OR (Value2=0)) AND (Value3 = 1) со счётчиком с выражением Value + 1.
Это работает не так.Давно бы сделал пример и всё было бы ясно.
Открой обложку и сравни с моей гифкой.
(http://storage1.static.itmages.ru/i/17/0624/h_1498318600_6050185_c3c21172f1.gif)
Давно бы сделал пример и всё было бы ясно.
Я эту гифку уже выкладывал.Я не про гифку, а про проект.
что то никак не разберусь с бегунком скролбара. не пойму, как его покрасить, и вообще где он.?
картинка которую подгружая - падает на фон. а вот откуда вообще берется этот бегунок ума не приложу.. ???
и раз уж тут - что за элемент "плейлист спейсер", который "приклеен" сбоку скролбара?
и раз уж тут - что за элемент "плейлист спейсер", который "приклеен" сбоку скролбара?
Можешь убрать его, он пустой. Он скорее всего для сознания расстояния между краем и списком, или еще чего. Короче это костыль.
спасибо! :) но с этим то беды нет - он и так был выключен.
но вот где взять бегунок от прокрутки???? он мне все портит. берется не пойми откуда, серый, толстый, так еще и с полосамы белыми. справа в свойствах не нашел никаких полей, где б можно было выбирать цвета. а посредством текстуры скрол бара, и делением ее на несколько часте - тоже ничего не получается, действует она только на на сам фон скролбара...
У скролбара четыре текстуры. SkinThumb это и есть текстура ползунка. .... Открывай текстуры в правом окне.
Для чего это нужно знать?
Ну мне нужно что бы тень менялась когда плеер прикреплен к краю.
За это отвечает точка доступа Pin у окна.
Но, что будет, если человек его примагнитит к краю, но не приклеит, чтобы он уезжал?
За это отвечает точка доступа Pin у окна.
Но, что будет, если человек его примагнитит к краю, но не приклеит, чтобы он уезжал?
Что-то Pin у меня в состоянии ноль и в закрепленном состоянии, и в открепленном.
Что-то Pin у меня в состоянии ноль и в закрепленном состоянии, и в открепленном.
Он реагирует на закрепленное к десктопу состояние. Можно попробовать положиться на его Accessibility - точка будет доступна при примагничивании к краю экрана
...Можно попробовать положиться на его Accessibility - точка будет доступна при примагничивании к краю экрана
Это с помощью скрипта нужно делать? Я ни где не могу найти его Accessibility.
4.50 в статусе беты, репозиторий и принципы работы с ним не описаны. Хотя, честно говоря, мне странно слышать, что он оказался неочевидным.Почему текстуры и настройки шрифтов скрываются из репозитория в обложке Bliss 4K, а именно у тех у которых есть суффикс Light или Dark при смене темы?
Кстати если зациклить (ссылать первую на вторую, а вторую на первую) программа зависает ;DА зачем так делать? Этож нечто вроде рекурсии получается.
Почему текстуры и настройки шрифтов скрываются из репозитория в обложке Bliss 4K, а именно у тех у которых есть суффикс Light или Dark при смене темы?
Как я понял текстура может ссылаться на другие текстуры с помощью ID.
Кстати если зациклить (ссылать первую на вторую, а вторую на первую) программа зависает ;D
В какой момент они скрываются? Не очень понялИзвините, я похоже запутался. Сейчас всё отображается ошибки похоже не было, я скорее всего сглупил.
Скорее всего баг, скиньте пример, пожалуйста.
Тогда ждем новую бета-версию? TASETextDisplayEx - не выравнивает первую строку по центру, хоть Alignment = taCenter.
И еще такой вопрос. Про контейнер со скроллом. Если текст меньше определенной длины(все строки помещаются), то хотелось бы скрыть скролл-бар. Какую команду в провайдерах тогда писать? Например, для плейлиста пишу на Visibility команду Value>10. А с текстом как узнать количество строк?Можно ли так?
И еще такой вопрос. Про контейнер со скроллом. Если текст меньше определенной длины(все строки помещаются), то хотелось бы скрыть скролл-бар.
Например, для плейлиста пишу на Visibility команду Value>10.
Если нужно скрыть контейнер, то достаточно вот такой связи, без параметров
Может кто даст пример или подскажет как сделать прокрутку списка с кнопками и другими элементами?
Хочу сделать прокрутку в окне - меню выбора текстур и других параметров!
как сделать вертикальную таб группу с кнопками + чек бокс (Но отвечающий за другой параметр) - например показать или спрятать ножку, но чтоб бил выбор текстуры!
В ScriptableEventHandler нужно писать действие, а сам ScriptableEventHandler назначить в событие OnResize нужного элементаЯ спрашиваю потому что не соображу, как записать действие в ScriptableEventHandler.
Я спрашиваю потому что не соображу, как записать действие в ScriptableEventHandler.Так это такой же скрипт, как и ScriptableOperatorCounter.
Так это такой же скрипт, как и ScriptableOperatorCounter.Мне нужно вызвать срабатывание скрипта (ScriptableOperatorCounter).
А что нужно сделать-то?
Сейчас особняком (по старинке) осталось только событие OnLoaded, остальные все описываюся в хендлерах.
Мне нужно вызвать срабатывание скрипта (ScriptableOperatorCounter).
Попробуй поменять Position счётчика.
Это я понял, а как потом возвращать значение счётчика скрипта на 0?
А чем хендлер не устраивает? ИМХО, с ними обычно проще, чем со счётчиками.В него нельзя записать этот скрипт.
И в чём сама задача?
Можно в самом скрипте обнулять свой счётчик.
Так и сам скрипт. счётчик можно обнулить, написав перед выходом State:= 0.Благодарю!
В него нельзя записать этот скрипт.А почему нельзя-то, у спектрума тоже есть событие OnResize - в нём всю арифметику и опиши.
Задача - выравнивание и растягивание элементов (спектрумов) до определённых размеров.
Интересно, а можно ли активную строку залить фоновым цветом? Если да, то каким тэгом?
А как реализована перемотка кассеты в скинах от Black_AVP для 4.50? Скриптом? Для одного проекта надоНу, наверное, кроме меня никто не знает, как реализована перемотка в моих скинах, а, скорее всего, никому и не интересно. ;D
Желательно без фиксации (только по удерживанию, на случай если спросят)
Вот только откуда мне эти таймеры взять?
Если надо, могу проект скинуть
Создать
Нажатие кнопок перемотки можно отловить обычным скриптовым счётчиком, отпускание - соответствующим хендлером. Вариантов решения может быть масса, в зависимости от того, что нужно.Мне нужно вот что:
Осталось разобраться с этим:Ответ заключён в процитированном предложении.
Всем привет!ConfigGet, параметры в справке описаны, но нам доступна только секция Custom.
Подскажите, пожалуйста, как в скрипте загрузить сохранённый параметр из файла конфигурации?
ConfigGet, параметры в справке описаны, но нам доступна только секция Custom.Я читал, и сохранять научился. Но вот обратно нет.
Я читал, и сохранять научился. Но вот обратно нет.А что, конкретно, не получается?
Если не затруднит напишите пример скрипта, как должна выглядеть строка вызова параметра.
А что, конкретно, не получается?Благодарю, всё получилось.
AValue:= ConfigGet(ValueName, DefaultValue);
Тип переменной AValue должен совпадать с сохранённым типом.
Просто я не писал DefaultValue, не сразу понял зачем нужно.DefaultValue - это то значение, которое ты хотел бы чтоб вернула эта функция в случае неудачного чтения ключа или его отсутствия.
Скрипт. сётчик подключить к ActionOnLongClick или ActionOnHold, тот, в свою очередь устанавливает вышеупомянутый счётчик IsRewind_Counter в 1 или 2, в зависимости от того, какая кнопка нажата.
Я вот насчет скрипта не понял - как именно заставить скрипт установить тот счетчик в нужное значение...Для того конкретного случая:
Как сменить текстуру\кадр у контейнера pfShadow (тень плейлиста) при откреплении\прикреплении плейлиста к главному окну?
Кадр поменять нельзя (вроде), только текстуру.
Можно, в стандартном скине так и делается
Думаю, что привязкой скрипта к точке доступа Docked окна плейлиста. В скрипте менять текстуру в зависимости от State.Спасибо. Назначил связь у скрипта, работает.
Осталось с Handlerом разобраться ...И хендлере будет точно такая же строчка:
И хендлере будет точно такая же строчка:Благодарю. 8) + в карму уже поставил.
Zhenya, у меня уже используется эта связь(на скриншоте), меняет кадры при активном окне, как там третий кадр привязать?
С помощью промежуточного коммутатора. К нему привязать Active и Docked окна. В параметрах коммутатора описать логику (с помощью функции "If"). Сам коммутатор привязать уже к State контейнера.Не получается через коммутатор. Допустим, текстура тени имеет 3 кадра, Active принимает два состояния "0" и "1", соответственно, меняет первый и второй кадр. Как третий кадр в параметрах коммутатора указать? Кажется это невозможно.
Не получается через коммутатор. Допустим, текстура тени имеет 3 кадра, Active принимает два состояния "0" и "1", соответственно, меняет первый и второй кадр. Как третий кадр в параметрах коммутатора указать? Кажется это невозможно.
У вас два входа, и один выход, неужели вы не можете сообразить как правильно посчитать выход?Да, так показывает третий кадр.
На вскидку, псевдо код: If(PlaylistDocked, 2, If(Active, 1, 0))
Как сделать, чтобы окно лирики изменяла размеры мышкой?Во встроенных проектах это можно подсмотреть.
Во встроенных проектах это можно подсмотреть.Так в том-то и дело, что смотрел, да ничего так и не понял: чем свойство одного окна отличается от другого - везде всё то же самое. F1 жал, но так ничего и не понял: как там это дело сделать. ???
Нет, нужно было выставить зоны, за которые можно цепляться мышкой - SizingHitTestArea, находится на уровне окнаАга, и всё-таки был не внимателен. Ещё вопрос: как сделать, чтобы этот самый текст переносился по строкам, в случае, если не убирается в ширину? Текст "лирик" я имею в виду.
Ага, и всё-таки был не внимателен. Ещё вопрос: как сделать, чтобы этот самый текст переносился по строкам, в случае, если не убирается в ширину? Текст "лирик" я имею в виду.За это в элементе TASETextDisplayEx отвечает свойство WordWrap (вам нужно поставить его значение в True)
За это в элементе TASETextDisplayEx отвечает свойство WordWrap (вам нужно поставить его значение в True)Так, вроде переносится, но он видимо должен как-то зависит от размера окна, а в действительности этого не происходит.
Так, вроде переносится, но он видимо должен как-то зависит от размера окна, а в действительности этого не происходит.
...либо, наоборот, autoSize выставлен по ширинеИменно, когда делал окно "Инфо о файле" в скине Sony Media Tower Reborn, тоже с этим столкнулся, поставил AutoSize только по высоте - вроде нормально отображается
Значит у вас сам элемент не меняет размеры, либо якоря неправильно выставлены, либо, наоборот, autoSize выставлен по ширинеНет, ничего не получается. Вновь разархивировал редактор скинов, и, как говорится, с чистого листа начал выставлять параметры:
Что касаемо "автозице", то они (как мне кажется) и должны быть активированы, иначе как может текстовая панель подстраиваться под изменяемый размер окна "лирик"?
... Вновь разархивировал редактор скинов, и, как говорится, с чистого листа начал выставлять параметры:Зачем?? Встроенным проектам ничего не сделается, достаточно было начать новый проект.
AutoSize подгоняет размеры под контент, а не под размеры окна. Плюс привязка у панели должна быть и по правому краю, что окошко это изменяло размер вместе с окномНу наконец-то до меня дошло. Кажется всё заработало как надо.
Если не сложно, скажите, пожалуйста, как удалить ресурс из репозитория?Заходим в репозиторий, выбираем ресурс, "Удалить" или Del... Как-то так
Если не сложно, скажите, пожалуйста, как удалить ресурс из репозитория?Не связанные ресурсы в собранный скин не попадают, но в файле проекта остаются, если это критично, то можно удалить.
как потом преобразовать его в RGB
R := Color shr 16 AND $FF;
G := Color shr 8 AND $FF;
B := Color AND $FF;
Alpha := Color shr 24 AND $FF;
и составить строку с BB-кодом?
Color := B + G shl 8 + R shl 16 + Alpha shl 24;
Color := Color AND $FFFFFFFF;
Я делал так:А зачем преобразовывать в R, G, B, а потом обратно в TColor?
Делал так:
А зачем преобразовывать в R, G, B, а потом обратно в TColor?
Для этого есть ColorToHSV и HSVToColor.
Я так и не понял. ???Так а зачем его преобразовыать сам в себя, это он и есть. $000000...$FFFFFFFF
Как преобразовать TColor в шестнадцатеричный цвет?
Так а зачем его преобразовыать сам в себя, это он и есть. $000000...$FFFFFFFFВот скрипт который у меня не получается сделать. Форат цвета из запроса не в виде RRGGBB, а просто цифры
procedure Execute(EventData: TComponent);
var
C: String;
begin
C:=FindObject('SpectrumDisplayLT').Get('Color');
FindObject('LyricsDisplay').Set('Template', Insert(C, '[Color=]%v[/Color]', 7))
end;
Вот скрипт который у меня не получается сделать. Форат цвета из запроса не в виде RRGGBB, а просто цифрыВ первой строке уже ошибка:
Из имеющихся в нашем распоряжении функций подойдёт, наверное, только Format().
procedure Execute(EventData: TComponent);
var
Color: Variant;
s, Template: String;
begin
Color := FindResource('Skin.Color.Item.Focused').Get('Value');
s := Format('%x', [Color]);
s := Copy(s, 3, 6);
Template := '[B][color=' + s + ']%v[/color][/B]';
FindObject('iwtTrackLyrics').Set('Template', Template);
end;
Не знал, что так можно. Действительно, работает:Format вообще весьма полезная и мощная функция, с её помощью можно целое предложение соорудить, вставив данные разных типов и из разных источников.
s := Copy(s, 3, 6);Обрезать прозрачность?
Не знал, что так можно. Действительно, работает:Thank you, It's very good.Code: [Select]procedure Execute(EventData: TComponent);
var
Color: Variant;
s, Template: String;
begin
Color := FindResource('Skin.Color.Item.Focused').Get('Value');
s := Format('%x', [Color]);
s := Copy(s, 3, 6);
Template := '[B][color=' + s + ']%v[/color][/B]';
FindObject('iwtTrackLyrics').Set('Template', Template);
end;
Не знал, что так можно. Действительно, работает:Большое спасибо!!!
А это зачем:Обрезать прозрачность?
Да. Сначала попытался использовать Delete, но не компилировалось, оказалось, что это процедура, а не функция.Как вариант, можно было в первой строчке замаскировать:
Заходим в репозиторий, выбираем ресурс, "Удалить" или Del... Как-то такСпасибо! Честно, не знал, что репозиторий находится во вкладке "Проект")
В каких случаях Caption кнопки принимает значение Disabled? Можно ли его использовать как 2е состояние кнопки?Когда кнопка запрещена, т.е. когда Accessibility = 0.
Спасибо! Честно, не знал, что репозиторий находится во вкладке "Проект")А чем одноимённая кнопка на панели инструментов хуже?
А чем одноимённая кнопка на панели инструментов хуже?Вы не поверите, но я только сегодня увидел эту кнопку ;D Раньше совсем не замечал ???
Когда кнопка запрещена, т.е. когда Accessibility = 0.Значит, когда Accessibility = 0, то кнопка не нажмется в дальнейшем, и использовать его для 2го состояния не получится.
А с 2х-3х-state'ными кнопками придется попотеть над скриптами, благо, менять Caption легко)Точка State доступна через биндинг, зачем через скрипты в неё лезть. Можно подключить к ней счётчик на все состояния и управлять им, он же будет переключать и Caption.
... Еще шрифт векторный, так что качество при увеличении не ухудшается, что полезно для 4K версии в дальнейшем.Не разделяю Вашего оптимизма. Всё остальные шрифты тоже векторные, однако картинка ресайзится уже, похоже, в растровом виде, от того и шрифт мылится.
Точка State доступна через биндинг, зачем через скрипты в неё лезть. Можно подключить к ней счётчик на все состояния и управлять им, он же будет переключать и Caption.
А можно поподробней? Счетчик - это LogicalOperatorCounter? В справке пример про замену текстурки, а не Caption.Если не нужно одновременно менять Caption, то это может быть простой счётчик, иначе должен быть скрипт.
Короче, я собирался менять Caption через скрипт так: :-[
А какой предложенный вами вариант?
При запуске плеера скрипты активируются не сразу, а только если нажать на кнопку, к ним привязанную.А зачем это нужно - запускать скрипты, связанные с кнопками? Вот, при сборке скина надо проследить, чтоб счётчик находился в состоянии "по умолчанию" (0) и State кнопокк соответствовала этому сосотоянию. Это относится и элементам, видимость которых определяется счётчиками. А состояния счётчиков сохраняются в ини-файле.
Примечания:
1. Значение по умолчанию в скрипте и в редакторе должно быть одно и то же, иначе интерфейс будет сбоить при изменении значения счетчика.
Есть может какой-то хитрый способ сделать бегущую строку: сбоку, дугой, уменьшением в даль и т.д? :-\ Хотел бы псевдо 3д скин сделать! :D
Не разделяю Вашего оптимизма. Всё остальные шрифты тоже векторные, однако картинка ресайзится уже, похоже, в растровом виде, от того и шрифт мылится.
Попробовал расставить галочки в "Атрибутах обложки" на "Поддержка масштабирования"(100%, 125%, 150%), и в кнопках "Подгонять под неподдерживаемые масштабы". Результат: шрифт не мылится, все красиво. Так что моя теория верна, и оптимизм считаю обоснованным)Тогда придётся текстуры для каждого масштаба свои делать, иначе они выглядят весьма "зубастыми":
Тогда придётся текстуры для каждого масштаба свои делать, иначе они выглядят весьма "зубастыми":
по идее должна появиться и кнопка, но не появляется, нужно обязательно сдвинуть указатель мыши хотя бы на пиксель.
Почему кнопка появляется только при движении указателя?
Возможно баг, это только Артём может сказать.
with FindObject('SpectrumDisplay3') do
begin
Set('Color', HSVToColor(State, 1, 1));
Set('PeakColor', HSVToColor((State + 180) mod 360, 1, 1));
end;
Однако при "сборке" возникает ошибка "[Error] 5:30: Not enough actual parameters". Это баг, или функцию как-то по другому надо использовать?
Однако при "сборке" возникает ошибка "[Error] 5:30: Not enough actual parameters". Это баг, или функцию как-то по другому надо использовать?
Похоже баг, хочет ещё аргумент Alpha. Пока что может попробовать использовать аргумент Alpha, который равен 255.Да, так и есть. В справке этот аргумент значался как необязательный
Теперь и размерность параметров другая, в частности и для Hue.
А разве тут что-то менялось? Был Single, остался Single. Или диапазон?В примере же видно, что Hue пришлось задавать в диапазоне 0..359, а не 0.0..1.0, иначе не работало.
В примере же видно, что Hue пришлось задавать в диапазоне 0..359, а не 0.0..1.0, иначе не работало.
А разве так не было раньше?Раньше, да, так и было, но ты же обещал привести все параметры к диапазону 0..1, тем более тип Single смущает.
А разве так не было раньше?
Сейчас — H от 0 до 359 (или 360?)360 = 0 - красный.
... Стоит перезапустить плеер и размеры сбрасываются.Потому что в родительском контейнере (liMain) заданы минимальные размеры, в соответствии с ними, видимо, и устанавливается.
Прикрепил пару примеров.
Если лишний контейнер выкинуть и оперировать с liMain, то всё сохраняется.Не сохраняет, если использовать скрипт(ScriptableEventHandler) сохраняет только высоту окна плеера, после перезапуска минимальная высота сбрасывается и высоту можно менять вручную.
Во втором примере размеры контейнера сохраняются.В том то и дело что сохраняет только фактический размер окна плеера, минимальный размер же сбрасывается, и высоту можно менять вручную..
В первом, если выбрать выравнивание laClient, тоже. Вот тут может быть и баг, надо будет спросить у Артёма.
Мне непонятно это поведение, должен ли ScriptableEventHandler сохранять заданную им минимальную высоту или нет..
Не сохраняет...Мне не известна поставленная задача, возможно, таким простым методом её и не решить. Может, понадобится управление и другими свойствами контейнера, может и принудительное сохранение в конфиг и чтение через onLoaded.
В первом, если выбрать выравнивание laClient, тоже. Вот тут может быть и баг, надо будет спросить у Артёма.Вообще, да. Даже с оригинальным проектом, если его первый раз запуститиь, нажать кнопку (окно увеличилось), затем закрыть, то в конфиг AIMPMainForm.Position запишется правильно, с высотой 600, а вот при повторном запуске оно как будто игнорируется.
... новое свойство Height у окон не подойдёт?Так они же Read Only.
Так они же Read Only.
Вообще, да. Даже с оригинальным проектом, если его первый раз запуститиь, нажать кнопку (окно увеличилось), затем закрыть, то в конфиг AIMPMainForm.Position запишется правильно, с высотой 600, а вот при повторном запуске оно как будто игнорируется.
Потом ещё раз запустить AIMP, ничего не трогать и закрыть — высота окна тоже 600. Может действительно какой-то баг есть.Хм... а у меня при втором запуске уже 200.
Хм... а у меня при втором запуске уже 200.
Счетчик считывает текущую высоту, и устанавливает ее как минимальную\максимальную, а раз при перезапуске плеера "загружается скин (со своими параметрами по умолчанию, тут и возвращаются старые минимальные и максимальные размеры), " то счетчик считает стандартную высоту и установит ее, т.е. размер окна изменится. Замкнутый круг..
Счетчик считывает текущую высоту, и устанавливает ее как минимальную\максимальную, а раз при перезапуске плеера "загружается скин (со своими параметрами по умолчанию, тут и возвращаются старые минимальные и максимальные размеры), " то счетчик считает стандартную высоту и установит ее, т.е. размер окна изменится. Замкнутый круг..
Сама задача сделать что-то вроде фиксатора(кнопку) текущей высоты\ширины окна, чтобы окно нельзя было растягивать.Можно же принудительно из скрипта разрешать/запрещать растягивание (AllowResizeByHeight).
Можно же принудительно из скрипта разрешать/запрещать растягивание (AllowResizeByHeight).
Тогда зачем в первоначальных примерах меняется размер контейнера?Потому я всех вопрошающих здесь и пытаю, чтоб изложили саму задачу, а не начинали "с хвоста". Если менять размеры окна - это одно, а если в этом окне кроме упомянутого контейнера есть что-то ещё и менять надо размеры именно контейнера - это уже другое.
Можно же принудительно из скрипта разрешать/запрещать растягивание (AllowResizeByHeight).Поддерживаю. Судя по задаче, ставим размеры (минимальные и максимальные) и затем устанавливаем запрет по свойствам AllowResizeByHeight/AllowResizeByWidth
В общем, прикрепил пример.
Похоже придётся сохранять значение высоты в отдельном обычном счётчике или в конфиге и считывать обратно.Получилось, рабочий пример прикрепил.
upd
Добавил поправленный проект.
Хотелось бы узнать можно ли с помощью скрипта изменять параметры BlendingMode, BlendingModeOpacity, BlurLevel и как будет выглядеть код?Всё, что присутствует в окне свойств элементов доступно в скриптах, и методы для всех свойств одни и теже - Set и Get.
Всё, что присутствует в окне свойств элементов доступно в скриптах, и методы для всех свойств одни и теже - Set и Get.А пример какой нибудь можно
А пример какой нибудь можноКакие ещё тут примеры нужны? Везде всё одно и то же:
Есть ли способ узнать список всех PropertyName у определённых провайдеров? Не нахожу, например, как можно получить время планировщика, ибо не видит свойство Time в prvSleepTime через скрипты.BindingsGetDataAsText, BindingsGetDataAsInteger, BindingsGetDataAsBoolean
Есть какой-нибудь способ получить текущее положение контейнера с прокруткой, слайдера или полосы прокрутки?У слайдера есть свойство Position (0..100), у сколлбара, вроде, нет.
У слайдера есть свойство Position (0..100), у сколлбара, вроде, нет.Хм, был уверен, что этот вариант уже пробовал. Спасибо.
var
Object, Container : TComponent;
begin
Object := FindObject('Object1');
Container := FindObject('Container1');
if(Object.Parent = Container)then дальнейшие действия;
end
Выдаёт ошибку:Could not convert variant of type (UnicodeString) into type (Double)
Вроде, всё должно работать.Нашёл ошибку, я при проверке .get('visible')=0 использовал цифру, вместо false.
Вот, аналогичная конструкция, только кнопка в контейнере:
А в системе какой DPI по умолчанию стоит?В Windows 175%.
В Windows 175%.
Вопрос: как перекрасить заголовок медиабиблиотеки? Не могу найти, какое свойство за это отвечает:
И ещё: скопировал кнопку "МЕНЮ" из стандартной обложки 4К в свой скин, её текст изменился на Lyrics... (именно так, на английском, хотя язык плеера русский). Как это исправить?
P. S. Было бы круто, если бы сам редактор тоже подружился с High DPI, а то сейчас мыльцо :)
Попробуйте на этой сборке:То же самое.
https://yadi.sk/d/gbyafX063RkjaG
То же самое.
Со скином по умолчанию такое повторяется? Я попробовал пройтись по вашим шагам - у меня все штатно отработалоНет, кстати, со скином 4К такого эффекта нет, только с моим (https://github.com/VioletGiraffe/AIMP4-skin-for-small-touchscreens).
Нет, кстати, со скином 4К такого эффекта нет, только с моим (https://github.com/VioletGiraffe/AIMP4-skin-for-small-touchscreens).Запишите видео (http://www.uvsoftium.ru/UVScreenCamera.php)
Помогите, напишите пожалуйста скрипт который бы менял тип контейнера X при пристыковывание окна Y с laClient на laTop.
procedure Execute(var State: Integer);
var
MN, PL: TComponent;
begin
PL := FindObject('liPlayerPane');
case State of
0:
begin
PL.Set('Alignment', 'laClient');
end;
1:
begin
PL.Set('Alignment', 'laTop');
end;
end;
end;
ScriptableOperatorCounter связываешь со свойством Docked окна.
Спасибо большое. Теперь осталось понять как это подключить. Где здесь X и Y?
Как написать в скрипте что бы менять минимальную высоту контейнера?Самое простое
procedure Execute(var State: Integer);
begin
FindObject('ContainerName').Set('SizeMinimal.Height', 50);
end;
Самое простоеCode: [Select]procedure Execute(var State: Integer);
begin
FindObject('ContainerName').Set('SizeMinimal.Height', 50);
end;
Салют!А как сделать масштабируемой скин без мутности, :-\ надо 2 текстуры - одна маленькая 2 большая или как? и со шрифтом тоже непонятно! Можно пример?
Спасибо, вроде методом тыка нашел :) А как себя поведут остальные элементы, не съедут при масштабировании?Не имеешь желания сделать разделение полос, хотелось бы в Антаресе по реальнее шатание динамиков?Хотя я раньше просил разделение волны через ноль для gauge!В Блиссе не съезжают.
Привет,
подскажите пожалуйста, возможно ли задать рейтинг трека слайдером вместо TASERating ?
пытался цеплять точку доступа Mark из prvPlayingFileInfo к Display1 или Display2 слайдера, но ничего не происходит
Не связанные ресурсы в собранный скин не попадают, но в файле проекта остаются, если это критично, то можно удалить.Не понял, не связанные ресурсы в скин должны попадать или нет?
Не понял, не связанные ресурсы в скин должны попадать или нет?
Заливаю в репозиторий(TextureEx) изображение размером 1.4 МБ, чисто в репозиторий, собираю скин, скин толстеет на эти 1.4 МБ.
1. Нужно нарисовать кадры для анимации и использовать не аниматор а элемент - Индикатор уровня сигнала (TASEGauge).
Как сделать что бы скрипты не сбрасывались при перезапуске? А то фигня какая то выходит, зачем скрипты если они сами отрубаются.
В смысле?
В прямом, у меня подключен скрипт который меняет тип контейнера в зависимости от прикрепления плейлиста и при перезапуске тип контейнера делается по умолчанию.
Чем представлен этот скрипт? Какие у него связи с другими элементами? Кто вызывает этот скрипт?
Script.Position <=> PlaylistWindow.Docked
И еще, у меня в скрипте по замене текстуры табов работают только при 0 и 1 если значение больше все ровно выбераются текстуры из 0 или 1. Что в скрипте не так?
Значит Script.Position будет автоматом синхронизироваться с PlaylsitWindow.Docked
Может модуль у счетчика стоит равный 2м?
Хз, я не понимаю.
Модуль равен 7-ми.
В прямом, у меня подключен скрипт который меняет тип контейнера в зависимости от прикрепления плейлиста и при перезапуске тип контейнера делается по умолчанию.У меня была та же проблема с этим скриптом. Вылечилось сменой состояния по умолчанию в параметрах провайдера.
Пришлите пример, где не работает
У меня была та же проблема с этим скриптом. Вылечилось сменой состояния по умолчанию в параметрах провайдера.
Ели я так сделаю то, у меня гв и пл будут при пристыкованном пл стоять рядом, а не один сверху другой снизу, и при отстыкованном пл, гв будет не растягиваемым.Нет, при срабатывании скрипта счетчик всё равно встанет в нужное положение
Вот:В окне редактирования скрипта есть кнопка "параметры провайдера", там стоит модуль 2.
Вот:
Как я и говорил у NewScriptableOperatorCounter модуль стоит равным 2м. + Не очень понятно зачем у вас в проекте второй счетчик - NewLogicalOperatorCounter?
Нет, при срабатывании скрипта счетчик всё равно встанет в нужное положение
Ладно щя попробую
Сделал через нот, и поменял местами 1 и 0Я вообще не про это говорил, ну да ладно, главное что работает :D
А обложка довольно хороша ;)Угу, для меня она так скоро "золотой" станет в плане вложенного в неё времени...
Здравствуйте!
Можно пример, как работать с OnMouseEnter и OnMouseLeave, справку не осилил :(
Что вы хотите сделать? А что не так со справкой?
ScriptableEventHandler можно запросто вызвать из другого скрипта:
procedure Execute(var State: Integer);
var
Event: TComponent;
begin
Event := FindObject('NewScriptableEventHandler');
if Event <> nil then
Event.Execute;
end;
Обратите внимание, что в этом случае оба аргумента - Sender и Arguments - у принимающего скрипта будут выставлены в nil.
Что за nil? Куда тут писать OnMouseEnter, куда действие при входе указателя? :-\ ;D
Code: [Select]ScriptableEventHandler можно запросто вызвать из другого скрипта:
Что за nil? Куда тут писать OnMouseEnter, куда действие при входе указателя? :-\ ;D
procedure Execute(var State: Integer);
var
Event: TComponent;
begin
Event := FindObject('NewScriptableEventHandler');
if Event <> nil then
Event.Execute;
end;
Обратите внимание, что в этом случае оба аргумента - Sender и Arguments - у принимающего скрипта будут выставлены в nil.
Прочтите про ScriptableEventHandler, там описаны его аргументы. И все-таки, что вы хотите сделать?Аргументы есть, пример непонятен. Поэтому и попросил пример.
Аргументы есть, пример непонятен. Поэтому и попросил пример.
Думал менять вкладку в многостраничной группе при входе и выходе указателя при наведении на область объекта. Смог через isActive-Visibility. В AndroEvolution реализовал смену окон при наведении на трей контрол, сегодня выложил
Напишите пожалуйста пример скрипта где один контейнер копирует высоту другого.Размер контейнера вроде нельзя менять через скрипт.
Размер контейнера вроде нельзя менять через скрипт.
procedure Execute(Sender, Arguments: TComponent);
var scaling: Double;
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling);
end;
Code: [Select]procedure Execute(Sender, Arguments: TComponent);
var scaling: Double;
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling);
end;
X копирует высоту Y
как вводить несколько переменных TComponent?Просто через запятую
var
scaling: Double;
x, y: TComponent;
зачем нужен .setЛучше, чем в справке, я объяснить не смогу :)
Просто через запятуюCode: [Select]var
Лучше, чем в справке, я объяснить не смогу :)
scaling: Double;
x, y: TComponent;
Если вообще ничего не понятно, посмотри базовые уроки по паскалю на ютубе
Напишите пожалуйста пример скрипта где один контейнер копирует высоту другого.
Как в скрипте мониторить высоту контейнера?Я сделал пример - простой скрипт. Размер контейнера узнаём при помощи за панели которая растянута к краям контейнера и привязана к ним, в скрипте это - PlaceInfo.ActualWidth и PlaceInfo.ActualHeight.
Я сделал пример - простой скрипт. Размер контейнера узнаём при помощи за панели которая растянута к краям контейнера и привязана к ним, в скрипте это - PlaceInfo.ActualWidth и PlaceInfo.ActualHeight.
При изменении размера срабатывает событие OnResize.
Можно Добавить и во второй контейнер панель и немного доработать скрипт,тогда при изменений размера любого, другой также изменит размер.
Я сделал пример - простой скрипт. Размер контейнера узнаём при помощи за панели...
Сейчас можно обойтись без неё и считывать (только считывать) размеры напрямую с элементов фона (то есть контейнера) через свойства Width / Height.Благодарю! поправил.
Спасибо, буду пробовать.)))Попробуй это.
Благодарю! поправил.
Я в начале просто ошибку в скрипте допустил, думал почему не работает решил попробовать с панелью и тогда не заработало. А когда нашёл ошибку обратно не вернул.
Попробуй это.
Прикрепил пример без панели.
Доброго здоровья! Такой вопрос. Почему при переходе, в середине трека, на другой скин идет откат на некоторое время или вообще на начало? Не на всех скинах это происходит. Только на единицах. К примеру на TEAC V-3RX .Автор обложки реализовывал в своих скинах некоторые фичи с навигацией по треку. Скорее всего из-за этого.
Попробуй это.
Прикрепил пример без панели.
Не подошло.( Мне надо чтобы один контейнер навязывал свою высоту другому, а другой что бы ничего не делал, и у первого, и у второго тип Top.Убери у одного из контейнеров в свойствах событие onResize
Убери у одного из контейнеров в свойствах событие onResize
Он не меняет высоту если тип контейнера тор.И этот не меняет?
Code: [Select]procedure Execute(Sender, Arguments: TComponent);
var scaling: Double;
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling);
end;
X копирует высоту Y
Quoteprocedure Execute(Sender, Arguments: TComponent);И этот не меняет?
var scaling: Double;
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling);
end;
И этот не меняет?
Будет ли этот скрипт адекватно работать при другом dpi?Да, для этого и указан.
Блин, не то. Можно ли взять просто высоту(не минимальную) первого контейнера и передать в минимальную высоту второго контейнера?Ну. FindObject('Y').Get('Height') берет просто высоту первого контейнера, Set('SizeMinimal.Height'... передает это в минимальную высоту второго.
Ну. FindObject('Y').Get('Height') берет просто высоту первого контейнера, Set('SizeMinimal.Height'... передает это в минимальную высоту второго.
Что то у меня размер второго контейнера ни как не меняется. Не мог бы ты прислать пример в проекте?А как ты меняешь размер первого контейнера, если он у тебя Top?
А как ты меняешь размер первого контейнера, если он у тебя Top?
Вот
Вот
Так?
К сожалению та же проблема есть и тут.Потому что при откреплении плейлиста меняется размер верхнего контейнера, срабатывает скрипт.
Я прикрепил файл проекта с данной проблемой. Что бы ее увидеть нужно открыть проект и разлочить один скрипт(иначе проект при открытии вешает редактор), потом собрать и запустить скин.
procedure Execute(Sender, Arguments: TComponent);
var scaling: Double;
begin
if (BindingsGetDataAsBoolean('NewForm', 'Docked')) then
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling + 150);
end;
end;
Это в EventHandler.
Потому что при откреплении плейлиста меняется размер верхнего контейнера, срабатывает скрипт.Code: [Select]procedure Execute(Sender, Arguments: TComponent);
Это в EventHandler.
var scaling: Double;
begin
if (BindingsGetDataAsBoolean('NewForm', 'Docked')) then
begin
scaling := BindingsGetDataAsInteger('AIMPMainForm', 'CurrentDPI') / 96;
FindObject('X').Set('SizeMinimal.Height', FindObject('Y').Get('Height') / scaling + 150);
end;
end;
Я прикрепил файл проекта с данной проблемой. Что бы ее увидеть нужно открыть проект и разлочить один скрипт(иначе проект при открытии вешает редактор), потом собрать и запустить скин.У меня на этом проекте, кстати, ничего не зависало.
Как в скриптах адаптировать конкретные числа при изменении dpi?
Не надо ничего адаптировать, движок работает в размерах 96dpi и сам потом все масштабирует.
Может ли ScriptableEventHandler определять кто его вызвал?
Artem, у меня в ScriptableEventHandler есть строки "FindObject('Ef2').Set('PlaceInfo.Margins.Left', (Arguments.Get('X')-64));" и число 64 не меняется а остается прежним.
Не очень понял. А куда оно должно меняться? Что это за число? На что оно указывает?
Это число нужно для правильного размещения объекта по событию(поправка), для 100% оно должно быть таким, а для 200% в два раза больше но, оно остается заданным.
Ну не с потолка же эта поправка взялась? Как вы ее изначально посчитали? Вы понимаете, что PlaceInfo.Margins.Left задается для 100%? А уже потом полученное число будет движком умножаться на 2 (для 200%).
procedure Execute(var State: Integer);
var A, S: TComponent;
begin
A:= FindObject('Ef2');
S:= FindObject('Ef2_2');
case State of
0:
begin
A.Set('Skin.ID', 'Krug1');
S.Set('Skin.ID', 'Krug1');
end;
1:
begin
A.Set('Skin.ID', 'Krug1_White');
S.Set('Skin.ID', 'Krug1_White');
end;
end;
end;
Что здесь не так? Вместо того что бы поменять текстуру она вообще исчезает.
Подскажите как отрегулировать параметр кнопки "Остановить после текущего", мне нужно что бы, скажем, в стандартной обложке при нажатии горячей клавиши, кнопка "стоп" не просто еле-еле видно моргала белым, а скажем моргалаНужно в текстуре кнопки стоп отредактировать 6 кадр в любом графическом редакторе.
Приветствую всех. Полистал поиск, как сказано в шапке данной темы, и ни найдя помощи в моем деле решил написать.Это второй кадр кнопки
Подскажите как отрегулировать параметр кнопки "Остановить после текущего", мне нужно что бы, скажем, в стандартной обложке при нажатии горячей клавиши, кнопка "стоп" не просто еле-еле видно моргала белым, а скажем моргала ярко зеленым, что бы было заметно что она активна, подскажите как сделать, какой параметр регулировать? Либо может есть уже готовый скин, на котором нормально видно данную функцию.
Надеюсь доступно объяснил то, что мне необходимо.
Жду ответа, благодарю.
Как называется провайдер, переключающий прямой/обратный отсчет времени?
prvPlayerState.TrackPositionА как узнать, какой отсчет используется в данный момент?
А как узнать, какой отсчет используется в данный момент?
Скажите пожалуйста, можно ли в скрипте отслеживать состояния отображения элементов плейлиста? Например включены ли переключатели или отображение дополнительной информации и т.д..
Почти уверен, что нельзя.
Скажите пожалуйста, можно ли в скрипте отслеживать состояния отображения элементов плейлиста? Например включены ли переключатели или отображение дополнительной информации и т.д..
Ну дак че?
Нет, нельзя
Нужно команду из контекстного меню "Обычный режим" прикрутить на функционал нажатия кнопки, чтобы, собственно, каждый раз за этой функцией в контекстное меню не лазать.
А сколько длится фейдинг в мсек, при изменении значения State у кнопки? Связь на скриншоте
Его может и вовсе не быть, вам это зачем?Чтобы указать такое же время анимации у контейнера TASELayoutTabbedGroup с анимацией tgaFade. В общем, прикидываю варианты с плавным появлением кнопок. Сейчас такие кнопки через смену State работают, а у многостраничной группы время анимации по умолчанию в 1000 выставлено, что явно больше чем время фейдинга.
Чтобы указать такое же время анимации у контейнера TASELayoutTabbedGroup с анимацией tgaFade. В общем, прикидываю варианты с плавным появлением кнопок. Сейчас такие кнопки через смену State работают, а у многостраничной группы время анимации по умолчанию в 1000 выставлено, что явно больше чем время фейдинга.
Как узнать, включено ли отображение кнопки на панели задач?
Если плеер на панели задач не отображается, то при нажатии на кнопку Свернуть ничего не происходит. Хорошо бы ее в этом случае делать неактивной.
Если сворачивание в трей и кнопка на панели задач отключены, ничего не происходит.
Происходит: либо кнопка появляется и программа сворачивается на панель задач, либо программа сворачивается в трей - в зависимости от того, как настроено.
Насколько я знаю, такое невозможно. Напрямую к этому меню не подобраться.Понятно :-\ . Благодарю, Zhenya, теперь хоть не буду пытаться это сделать, думая, что просто в упор не вижу чего-то очевидного (в первую очередь искал по аналогии с функцией "Поверх всех окон", которую можно юзать и из меню, и на кнопку поцепить).
и, как я понимаю, на уровне обложки оставить функцию "Прикрепить к краю монитора" и при этом отключить автоматическое спрятать/показать окно никак не получится?
Суть: "перетасовка" отдельных окон плеера на экране монитора: как задействовать "Главное окно" плеера в этом процессе на равне с подчинёнными окнами плеера?
Нет, так сделать не получится. Дочерние окна не могут быть под родительским окном.Э-эх... :( А я-то уже понадеялся на своё тугодумие и кривые руки.
Нет. Прикрепление — это отдельный режим, а примагниченное к краю окно — это тот же обычный режим...Ну, да, понятно. Просто с примагничиванием надо аккуратничать (у меня ещё и мышка за работой постоянно в разных режимах от 500 до 5000 DPI - не всегда чётко рассчитаешь усилие), а с прикреплением - красота, вот только с лазанием каждый раз в "контекст" минус...
А вообще подобные скины будут вешать систему.Это да. ;D У меня на работе есть пентиум 2008-го года на 2ГБ ОЗУ без дискретного видео на "ХРюшке" - пока скин там работает сносно, начнёт вешаться, сразу пойму, что точно уже переборщил чего-то ;) Там даже большие "катушечники" сносно, терпимо работают.
... замечаю аналогичные незначительные подрагивание "бегущей строки" и "спектрума"...подергиваний бегущей строки не замечал, но вот спектрума (https://www.aimp.ru/forum/index.php?topic=58180.msg360622#msg360622)
подергиваний бегущей строки не замечал, но вот ...Нет, у меня другое, но скорее всего я просто "пересмотрел в монитор" битые часы подбирая значения на TASEGauge и проверяя их работу, отчего стал замечать, в первую очередь на "бегущей строке" и "волноформирователе", как, словами геймеров, "ФПС незначительно подсел с 25 до 24 кадров" - едва уловимые подрагивания. Раньше не присматривался, вот и подумал, что перебрал норму с анимацией (потому и спросил, на всякий случай), но, похоже, что любая, даже самая лёгкая обложка на этих элементах так себя "подёргивает", в т.ч. и базовый "Пандемик". У меня, по крайней мере...
4.2 ГГц? А такие бывают вообще? Имейте в виду, что рендеринг использует не более одного ядраАМД гонятся все. 4.2 вполне реально.
Делал я как то скин в котором было всего 8 Gauge и это было жестко, кадров 10 наверное. Меня конечно радует наличие подобных плюх но, использовать их на максимум просто не возможно. Нагрузка на мой проц составляла около 50%, а у меня четырех ядерный проц, правда самый дешманский FX4100 4,2ггц но, я считаю что его должно хватать...Ого :-\, наверное скин по масштабам большой был? Мой i7 3770 3.40GHz стабильно грузится плеером с вот этим моим скином на 1-2% на короткое время только во время активных манипуляций, как то - формирование в плейлист новой музыки, переход к следующей композиции т.д. ... в основном активность на проце 0, по крайней мере на самом процессе плеера. Так только непосредственно оперативную память кушает и файл подкачки очень и постоянно "любит".
4.2 ГГц? А такие бывают вообще? Имейте в виду, что рендеринг использует не более одного ядра
АМД гонятся все. 4.2 вполне реально.
А насчёт 4 ядер там всё плохо: производительность на ядро мала, даже на современных Райзенах.
Ого :-\, наверное скин по масштабам большой был? Мой i7 3770 3.40GHz стабильно грузится плеером с вот этим моим скином на 1-2% на короткое время только во время активных манипуляций, как то - формирование в плейлист новой музыки, переход к следующей композиции т.д. ... в основном активность на проце 0, по крайней мере на самом процессе плеера. Так только непосредственно оперативную память кушает и файл подкачки очень и постоянно "любит".
И то - по божески как-то, скромно; врубил тут "Орбиту" с динамиками - вот это ДА ;D. Но там и масштабы не под детский и даже не под юношеский монитор, конечно...
...Я так-то хотел ещё анимацию поцепить и на CoverArt :-[ , чтоб когда композиция без "коврика" - там всё весело прыгало и вращалось... но, пожалуй, не буду искушать судьбу. Работает, вроде неплохо, и то хорошо: в понедельник если "пентиум" на работе не загнётся от всего этого "счастья", буду считать, что эксперимент увенчался успехом...
Хотелось бы чтобы АИМП использовал многопоток(даже если ядра не делятся на два логических), иначе на всех амд картина будет хуже чем на интел.
АМД гонятся все. 4.2 вполне реально.
А насчёт 4 ядер там всё плохо: производительность на ядро мала, даже на современных Райзенах.
Да знаю я про АМД, их числа никогда не соответствовали заявленным. Если реально померить частоту у этого проца, я думаю, там максимум 3 будет.Да не, это всё старо. Раньше (лет 15 назад) они свою производительность меряли в частотах какого-то старого проца 20 летней давности, поэтому знаменитый 1700+ имел реальную частоту 1433, а 5000+ имел эту цифру только за счёт двух ядер. Такого уже давольно давно нет. Райзены и FX показывают реальную частоту. И гонятся практически все выше 4 ГГц.
Да не, это всё старо. Раньше (лет 15 назад) они свою производительность меряли в частотах какого-то старого проца 20 летней давности, поэтому знаменитый 1700+ имел реальную частоту 1433, а 5000+ имел эту цифру только за счёт двух ядер. Такого уже давольно давно нет. Райзены и FX показывают реальную частоту. И гонятся практически все выше 4 ГГц.
Но производительность на ядро так и не догнала Интел, поэтому АИМПу там сложнее.
Есть-ли ограничения в самом плеере на количество одновременно задействованных элементов анимации или тех же TASEGauge, если ресурсы ПК для работы плеера не ограничиваются?
правильно-ли я понимаю, что даже не видимые на данный момент TASEGauge также полноценно активны на равне с видимыми?
TurboDISCO Adept, если не ошибаюсь то, до 40-ка элементов в одном контейнере.
А есть возможность в редакторе задать параметры отключения определённых аниматоров таким образом, чтобы при работе скина на плеере, не видимые в данным момент не задействовались плеером и активизировались только при переключении "окна-контейнера" "многопользовательской группы" в котором они находятся?
А насчёт 4 ядер там всё плохо: производительность на ядро мала, даже на современных Райзенах.
Вот этот пресловутый скин, который тормозил дико, хотя вроде простенький.
Обратите внимание, что размытие — весьма «тяжелый» эффект, старайтесь избегать его использования поверх динамического контента, что обновляется несколько раз за секунду, иначе это негативно скажется на производительности программы.
Вот тут есть ответ Артёма на этот счёт...Получается, за счёт "экономии" на отрисовке скрытых элементов плеер визуально будет основательно шустрее чем если бы все части "плясали" отображёнными одновременно. Здорово! (на ресурсы для просчитывания пока наплевать - терпимо)
Насколько я знаю, таких ограничений нет.Тоже хорошо, но ;D "пенёк" у меня и так успешно загнулся... Точнее - всё работает, но плакать хочется, глядя на всё это. Зато Core2Duo на 2Гб ОЗУ пока всё успешно тащит (параллельно с многовкладочно открытым браузером, текстовым редактором и несколькими другими не тяжёлыми программами) - будет у меня теперь базовым тестером (как раз машина на Е7200-ом номере под рукой есть), думаю, старые "пеньки" сейчас мало у кого есть в качестве "любимой" и "неразлучной" системы "для всего на досуге"... хотяяяяяяя :-\
В принципе такое точно можно сделать на скриптах. При переключении контейнеров в скрипте в этот момент привязывать и отвязывать связи у аниматоров. Тогда аниматоры точно "застынут", если будут невидимы и не будут просчитываться. Только это нужно тестировать на реальном примере и смотреть, стоит ли оно того.Скрипты? :o Не, тогда точно "отставить!". Банально уже потому, что лично я скрипты пока однозначно не потяну (даже не "пока", а "в принципе"!), да и, как выяснилось, пока ни к чему это (на площади 1300х450 пикселей с мелкими "анимашками", наверное, и так обойдётся; думаю теперь, что даже если таки приткну Gauge на CoverArt, как хотел, всё должно обойтись).
Там же анимации с блюром поверх. А блюр вещь тяжёлая...Поначалу обрадовался такой возможности в редакторе - для оформления "крышек-стёкол" и хоть проблем как-будто не было, решил всё же по старинке стандартно нарисовать "стекольный отблеск" для этих "крышек"... не зря, видимо, так как таких элементов 11 штук намечается разной площади покрытия (некоторые с растягиваемой текстурой)... :) пиши потом системные требования к "скину" как к GTA5.
звуковое сопровождение на элементы управления никак не поцепить?
Откуда такая информация?
Zhenya, блюра там нет, это лишь имитация, я понимал что блюр очень нагрузит систему и просто сделал имитацию, там даже эффектов наложения нет.
Не понимаю почему элементы поверх плейлиста грузят систему, что там такого то?
Вроде бы в справке было написано.
Ну я конкретно про "Album Art", там фон от Bliss скина, а хотелось бы свой сделать. Можете реализовать замену текстуры фона в будущих версиях?Сделайте, можно поставить любой фон, не понимаю в чём вопрос
Сделайте, можно поставить любой фон, не понимаю в чём вопрос
TASEVisualDisplay > Skin
Как прописать задержку Delay(); в скрипт? Он ее не понимает.
В скриптах не может быть задержки
Почему?
upd:: Я хочу сделать цикл для смены значения и задать задержку что бы просчет циклов происходил не мгновенно, как это можно реализовать?
Потому, что пока работает скрипт, все остальное его ждет. Анимацию нужно делать через таймер.
Я пытаюсь сделать плавную смену прозрачности по событию 0 или 1. Как пропустить скрипт через таймер или как это делается?
Как пользоваться провайдером acMLPlaySelected? При подключении к кнопке через Action ничего не происходит.
Так?
Думал обойтись одним скриптом, но не получилось.
Как пользоваться провайдером acMLPlaySelected? При подключении к кнопке через Action ничего не происходит.
Еще вопрос, Можно ли сделать так, что бы скрипт считывал положение мыши у контейнера или панели так, что бы считываемый фокус положения мыши не перехватывался элементами находящимися внутри и что бы эти элементы были доступны для мыши?
Провайдер работает только в том случае, если фокус находится либо в таблице фонотеке, либо в дереве группировки.
Провайдер работает только в том случае, если фокус находится либо в таблице фонотеке, либо в дереве группировки.
Думал обойтись одним скриптом, но не получилось.
Внезапно в голову пришёл более простой вариант.
v4:
— Основана на v3.
— Упрощён скрипт — теперь выражение связи таймера не трогается (счётчик скрипта таймером меняется только в одну сторону — увеличивается). Вместо этого State скрипта инвертируется (через отдельную переменную), если первичный счётчик (который меняется кнопкой) равен 0.
— Упрощены две связи: Timer.Accessibility <—> Script.Position и Script.Position <—> Counter.Position.
Думаю, проще уже некуда.
Есть одна проблемка, если переключить счетчик обратно раньше того как завершится анимация получается разрыв и анимация резко прыгает в конец и отрабатывает затухание.Вот без разрыва
Вот без разрыва
Вот без разрыва
Есть какой-нибудь способ отображать название следующего файла в текстовой метке?
Есть какой-нибудь способ отображать название следующего файла в текстовой метке?
s := TASEBindings(FindObject('TextDisplay').Get('Bindings')).GetDataAsText('Hint');
FindObject('TextDisplay').Set('Template', s);
Я так понимаю, что кнопка вывода окна из-за границы монитора однокадровая (технически - двукадровая) и сделать из неё трёхкадровую (для "нормального состояния", "наведения" и "жима") (технически - шестикадровую) - никак не получится?
Вопрос к администраторам:Окно визуализации не обязательно. Визуалку можно как встроить в главное окно (как это было до bliss), так и вообще отказаться от визуалки.
Правильно ли я понимаю, что окно визуализации не является обязательным элементом для полностью готового скина (для публикации в каталоге)? Я почти уверен, что правильно понимаю, но мало ли.
В правилах (https://www.aimp.ru/forum/index.php?topic=4928.0) списка обязательных окон не нашёл. Там только обозначения окон.
отказаться от визуалки.
Окно визуализации не обязательно...Былин :( ...
Видимо нет. Я попробовал 6-ти и 8-кадровые (общее кол-во в самой текстуре) — не получилось. А больше на эту кнопку никак и не повлиять.Жаль. С возможностями стандартной кнопки было бы куда интереснее оформить этот момент. Ну, теперь хоть понятно, что квадратной (как я предполагал поначалу) кнопку эту делать не стоит :-\ , будет только без толку мешаться под курсором...
Боюсь, что нет. Однако, предлагаю заменить квадрат на какое-нибудь нейтральное изображениеКак это сделать? Кадр из Skin показывается только при отключенной визуализации. Где хранится тот "серый квадрат"?
Я имею в виду доработать визуализациюТ.е. это уже не моя забота...
Есть какая-либо причина в таком различии? Можно ли как-то контролировать это поведение?
Есть какой-нибудь способ отображать название следующего файла в текстовой метке?Меня тоже заинтересовало, в трее могло бы быть полезным.
Есть какой-нибудь способ отображать название следующего файла в текстовой метке?
Меня тоже заинтересовало, в трее могло бы быть полезным.
Если бы acPlayerNextTrack.Hint состоял из обной строки, то скриптом достать было бы можно, а так, по Get('Hint') считывается лишь первая строка, в русской локали "Следующий файл". ;D
How to change the color of the text in the picture?
(https://image.ibb.co/hiNmBp/20180927171815.png)
Вопрос: возможно-ли такое или есть-ли возможность сделать так, чтобы эта самая кнопка в "Главном окне" синхронно и одновременно меняла многостраничные группы и во всех остальных окнах?Для скриптов почти ничего невозможного нет. Только графику куда удобнее менять, используя репозиторий ресурсов, причём менять только то, что нужно.
Вопрос: возможно-ли такое или есть-ли возможность сделать так, чтобы эта самая кнопка в "Главном окне" синхронно и одновременно меняла многостраничные группы и во всех остальных окнах? Или для каждого окна должна быть своя кнопка управления многостраничной группой?
Промежуточный счётчик должен помочь. Меняем счётчик, а счётчик уже привязывается к многостраничным группам.К сожалению, в этом случае биндингом не обойтись, там наоборот - группа управляет счётчиком.
К сожалению, в этом случае биндингом не обойтись, там наоборот - группа управляет счётчиком.
UPD: в Element Placement был восклицательный знак и "This element can not change sizes". Затем я в редакторе попытался отресайзить его мышью и это сработало. Теперь и в Element Placement работает.
Какой-то баг?
К сожалению, в этом случае биндингом не обойтись, там наоборот - группа управляет счётчиком.Я в своих проектах иногда делал так. Есть например 3 TabbedGroup, связываю Visibility их контейнеров друг с другом, типа если виден первый контейнер с TabbedGroup1, то виден первый контейнер с TabbedGroup2 и TabbedGroup3. Тогда если виден первый контейнер TabbedGroup1, то видны все первые контейнера. Если второй, то все вторые. Остаётся тогда кнопку привязать к первому TabbedGroup и управлять видами через него. И никаких скриптов
Проще всего кнопку привязать к скрипт. счётчику, а там по одной строчке на каждую мнгстр. группу:
FindObject('TabbedGroup_1').Set('PageIndex', State);
FindObject('TabbedGroup_2').Set('PageIndex', State);
..............................
FindObject('TabbedGroup_N').Set('PageIndex', State);
или даже в цикле, если имена дать нормальные.
Я в своих проектах иногда делал так. Есть например 3 TabbedGroup, связываю Visibility их контейнеров друг с другом, типа если виден первый контейнер с TabbedGroup1, то виден первый контейнер с TabbedGroup2 и TabbedGroup3. Тогда если виден первый контейнер TabbedGroup1, то видны все первые контейнера. Если второй, то все вторые. Остаётся тогда кнопку привязать к первому TabbedGroup и управлять видами через него. И никаких скриптов.В какой работе это реализовано? И какие элементы там переключаются? Хотелось бы пощёлкать, посмотреть как получилось... Биндинг я, по крайней мере, в большей или меньшей мере самостоятельно могу попробовать сделать, потому как скрипт - вряд-ли напишу. :)
В какой работе это реализовано? И какие элементы там переключаются? Хотелось бы пощёлкать, посмотреть как получилось... Биндинг я, по крайней мере, в большей или меньшей мере самостоятельно могу попробовать сделать, потому как скрипт - вряд-ли напишу. :)В обложке AndroEvolution, в Опубликованных обложках, проект висит в шапке. Там, помнится, колонки так реализованы. Правда, там всего 2 многостраничных, но суть будет ясна. Если нажать кнопку левого, меняется и правая колонка, и наоборот.
Окно визуализации не обязательно. Визуалку можно как встроить в главное окно (как это было до bliss), так и вообще отказаться от визуалки.Artem, Soolo, позвольте поинтересоваться в этом же направлении касательно иконок контекстного меню (https://www.aimp.ru/forum/index.php?topic=34198.msg375707#msg375707): есть у меня нехорошая идея попробовать контекстное меню вообще без них. Просто если они обязательны в скине, то и пробовать не буду (там по другому надо всё будет рисовать, хотелось бы знать на какой вариант ориентироваться больше изначально).
Artem, Soolo, позвольте поинтересоваться в этом же направлении касательно иконок контекстного меню (https://www.aimp.ru/forum/index.php?topic=34198.msg375707#msg375707): есть у меня нехорошая идея попробовать контекстное меню вообще без них. Просто если они обязательны в скине, то и пробовать не буду (там по другому надо всё будет рисовать, хотелось бы знать на какой вариант ориентироваться больше изначально).
Как получить имя воспроизводимого плейлиста? prvPlaylistManager>ActivePlaylistName возвращает имя открытого плейлиста.
Как получить имя воспроизводимого плейлиста? prvPlaylistManager>ActivePlaylistName возвращает имя открытого плейлиста.
Для чего это нужно?
Видимо, для отображения имени играющего плейлиста. Скины разные ведь бывают. Например, многостраничная группа на всё окно, которая переключает главный экран, плейлист, фонотеку и т. д.
Для чего это нужно?Чтобы сохранять положение shuffle для конкретного плейлиста
Чтобы сохранять положение shuffle для конкретного плейлиста
Ну имена вполне могут быть одинаковыми для разных плейлистов. Тогда уж какой-нибудь идентификатор плейлиста нужен.Имхо, если плейлисты называются одинаково, то и их содержимое должно быть аналогично.
Чтобы сохранять положение shuffle для конкретного плейлиста
А причем тут скины?Я делаю это средствами skin engine.
Я делаю это средствами skin engine.
Не выйдет это, каждый раз, когда вы переключаете тумблер "шафл" / "не шафл" - очередь перестраивается, т.е. при переключении плейлистов плеер будет забывать, что и где он уже проигралТак она и сейчас перестраивается, отличие только в том, что шафл я вручную переключаю.
Так она и сейчас перестраивается, отличие только в том, что шафл я вручную переключаю.
Так фича должна работать так, чтобы не ломать очередь в плейлистах, тогда это фича.Задача этой фичи - переключать шафл, с этим она справляется (почти, т.к. срабатывает при смене активного плейлиста, а не воспроизводимого).
FindObject('myContainerItem').Set('Link', FindObject('prvVisual').Get('ContextMenu'));
- выдаёт ошибку о несуществующем свойстве ContextMenu. (Если оно есть, то как к нему обратиться?)FindObject('myContainerItem').Set('Link', FindObject('prvVisual.ContextMenu'));
- ошибок не выдаёт, но желаемого эффекта тоже не происходит.- Это меню не доступно в списке стандартных меню.Есть стандартное меню pmDisplay.
И тут же ещё один вопрос. Что делает acVisualNormal?Переключает визуализацию в оконный режим.
Есть стандартное меню pmDisplay.У меня оно ничего не отображает, если установлено для произвольного контрола. Возможно баг.
У меня оно ничего не отображает, если установлено для произвольного контрола. Возможно баг.Да, скорее всего, баг и уже давно. Оно отображается только на TASEVisualDisplay. И в пользовательском меню, если его вставить контейнером, тоже не отображается.
Да, скорее всего, баг и уже давно. Оно отображается только на TASEVisualDisplay. И в пользовательском меню, если его вставить контейнером, тоже не отображается.
На новых сборках и на простой кнопке вообще никакое PopupMenu по ПКМ не вызывается.
- У объекта CustomContextMenuItemLink (или как он там внутри называется...) сейчас отсутствует свойство ContextMenu в редакторе связей.
(Feature request - добавить это свойство!)
Приведите причину, зачем надо было так извращаться, или дайте мне возможность получить список визуализаций для моего меню.
Даже, если я вам сделаю решение - оно будет работать только на новых версиях плеераМеня это вполне устраивает.
Меня это вполне устраивает.
PopupMenu корневого контейнера окна (чтобы на всё окно было одно контекстное меню), плюс ещё к кнопке (возможно кнопку потом уберу).
Странное решениеНадеюсь, когда будет готова хотя бы предварительная версия скина - будет понятно что у меня всё логично устроено.
Надеюсь, когда будет готова хотя бы предварительная версия скина - будет понятно что у меня всё логично устроено.
Да. Визуализация в своём окне. Меню специально для этого окна.
Как в скрипт считать данные из Progress провайдеров prvVolume, prvBalance, prvPlayerState?
x := BindingsGetDataAsInteger('prvVolume', 'Progress');
Как в скрипт считать данные из Progress провайдеров prvVolume, prvBalance, prvPlayerState?Для всех провайдеров-регуляторов используется свойство Position, а методы те же: Get и Set.
Для всех провайдеров-регуляторов используется свойство Position, а методы те же: Get и Set.Спасибо, это тоже пригодится, но мне был нужен доступ именно к Progress. То, что предложил Zhenya, мне как раз подходит.
Например:
FindObject('prvBalance').Set('Position', 0)
У prvPlayerState - свойство State. См. https://www.aimp.ru/forum/index.php?topic=60247.msg374791#msg374791
От него тебе нужен не прогресс, а:
PS:= FindObject('prvPlayerState');
Pt:= PS.Get('Position'); - текущая позиция в треке
Pm:= PS.Get('PositionMax'); - продолжительность трека
Спасибо, это тоже пригодится, но мне был нужен доступ именно к Progress. То, что предложил Zhenya, мне как раз подходит.С прогрессом получается довольно грубо для некоторых задач, в частности, для вычисления кадра рулона. Я производил рассчёты по вышеприведённым параметрам.
У prvPlayerState - свойство State. См. https://www.aimp.ru/forum/index.php?topic=60247.msg374791#msg374791
От него тебе нужен не прогресс, а:
PS:= FindObject('prvPlayerState');
Pt:= PS.Get('Position'); - текущая позиция в треке
Pm:= PS.Get('PositionMax'); - продолжительность трека
С прогрессом получается довольно грубо для некоторых задач. Я производил рассчёты по вышеприведённым параметрам.В моей "задаче" особая точность и не нужна. Расчёт уровня индикатора канала, с учётом громкости и баланса, что я уже прежде делал на коммутаторах, решил попробовать сделать скриптом (в первую очередь из любопытства - получится ли ;) ).
Black_AVP, известны ли ещё какие-то скрытые свойства провайдеров? Хорошо бы их все задокументировать в справке.У переключаетелей есть свойство Checked, может и ещё много чего есть...
В моей "задаче" особая точность и не нужна. Расчёт уровня индикатора канала, с учётом громкости и баланса, что я уже прежде делал на коммутаторах, решил попробовать сделать скриптом (в первую очередь из любопытства - получится ли ;) ).На то биндинга с его нехитрыми выражениями с лихвой хватает, да оно и надёжнее, чем скрипты.
На то биндинга с его нехитрыми выражениями с лихвой хватает, да оно и надёжнее, чем скрипты.У меня логарифмический индикатор, каждое положение через биндинг проверялось по "if ... then", а замеров более 20-ти! Там выражение - длиннющая "верёвка". А скрипт напрямую привязан к prvVisual/Level, им и запускается. В этом же скрипте будет и проверка Volume и Balance. Проверял - работает. Осталось придумать логику преобразования данных баланса, для каждого канала...
Кстати, как ты собираешься скриптами отслеживать изменение громкости или баланса?
У меня логарифмический индикатор, каждое положение через биндинг проверялось по "if ... then", а замеров более 20-ти! Там выражение - длиннющая "верёвка".Точности логарифмирующих выражений вполне достаточно для этих целей, тем более, что сам пишешь, что высокая точность не нужна.
... А скрипт напрямую привязан к prvVisual/Level, им и запускается...Может и не запустится, если в треке будет тишина, или на паузе, или на стопе. ИМХО, эта затея представляет лишь академический интерес.
Точности логарифмирующих выражений вполне достаточно для этих целей, тем более, что сам пишешь, что высокая точность не нужна.Выражения подходят для стрелочников, у дискретных конкретные значения могут не совпадать, сталкивался, приходилось цифирьки корректировать на шкале. Сами показания я отградуировал , а уж как там после громкости/баланса будет, - это неважно. Напрямую-то достаточно точно.
Может и не запустится, если в треке будет тишина, или на паузе, или на стопе. ИМХО, эта затея представляет лишь академический интерес.Поскольку скрипт исключительно для измерения уровня, то отсутствие показаний в отсутствие сигнала, - это нормально. И я же проверял - работает.
... приходилось цифирьки корректировать на шкале.Ну, ты сам себе противоречишь - если точность не нужна, зачем уж циферки подгонять. Да, и в этом случае можно подобрать коэффициенты в формуле с достаточной точностью, тем более, что в динамике, на реальном звуковом сигнале это будет не заметно.
Поскольку скрипт исключительно для измерения уровня, то отсутствие показаний в отсутствие сигнала, - это нормально. И я же проверял - работает.А на тестовом, к примеру сигнале, где уровень не меняется? Если при этом покрутить громкость, показания индикатора не изменятся, скипт не сработает.
ИМХО, кривой это путь.Все твои аргументы резонны, согласен, и можно было бы обойтись нелинейным преобразованием, но хочется же "повыпендриваться", а точнее - попробовать, получить новый опыт.
Да, конструкция из "верёвки" if..then превратилась в "этажерку" state..of, и я не уверен, что так лучше.Там другая проблема, при снятии скриптом сигнала с Level. Скорее всего там мгновенные значения уровня, меняются они весьма быстро, и неизвестно за какое скрипт ухватится, а пока не отработает, другое значение не примет. Gauge за нас делают эту работу, усредняя эти значения в соответствии с заданными "постоянными времени".
Там другая проблема, при снятии скриптом сигнала с Level. Скорее всего там мгновенные значения уровня, меняются они весьма быстро, и неизвестно за какое скрипт ухватится, а пока не отработает, другое значение не примет. Gauge за нас делают эту работу, усредняя эти значения в соответствии с заданными "постоянными времени".Проверил. Завёл данные с одного канала (левого) на верхний сегмент индикатора через скрипт, на нижний - с prvVisual (через промежуточный счётчик, для выравнивания условий, и, разумеется, с аналогичным логарифмическим преобразованием), - разницы в реакции не заметил.
Я пытался таким макаром сделать в индикаторе Peak Hold, в каком-то скине, вроде, даже осталось, но фигня полная получилась, хотя скрипт был построен так, что он накапливал значения за некоторый промежуток времени, а потом выбирал максимальное.
Проверил. Завёл данные с одного канала (левого) на верхний сегмент индикатора через скрипт, на нижний - с prvVisual (через промежуточный счётчик, для выравнивания условий, и, разумеется, с аналогичным логарифмическим преобразованием), - разницы в реакции не заметил.Ну, хорошо, если так. В моём случае скрипт точно пропускал некоторые значения, поскольку Peak Hold временами даже отставал от пикового индикатора под ним на основе обычного Gauge. Возможно, что дело во аремени выполнения скрипта, у меня в нём довольно много операций производилось.
Единственное, что пришлось поправить: State на выходе из скрипта не обнулять, а выставлять в максимальное значение. Иначе при остановке проигрывания посреди трека, индикатор "залипал".Всё правильно, скрипт не срабатывает. У меня тот индикатор по Visible был связан с prvPlaeyerState.State, был виден только при PLAY.
Возможно ли применить слой-маску или что-то другое к свойству Color? ???
Хочу менять цвет произвольной формы, а не только прямоугольника! :-[
Достаточно одной панели, у неё есть слой-маска.
А будет работать без нижней панели?, мне надо почти прозрачный фон, крч нужно менять цвет для https://www.aimp.ru/forum/index.php?topic=60988.0 - то-есть прямоугольник с круглёнными углами на целый скин!
А причем здесь кнопка хм.
Я знаю, но там маска по цвету все равно не работает,хз или вы за какой-то другой метод говорите? :-\
Анимация State может быть и отключена в настройках. А вот с Gauge или многостраничной группой (при её анимации) можно получить интересные эффекты.
https://drive.google.com/open?id=1ts1LbgAkkVT2Sc92A8mMpTEAazUS8zLa (https://drive.google.com/open?id=1ts1LbgAkkVT2Sc92A8mMpTEAazUS8zLa) Panel 3 - В ней есть маска, и по ней нужно менять цвет и т д .. но если прозрачность убрать в свойствах Color - то он под маской, а ее нужно убрать с рендера.
многостраничная группа не подойдет, тут будут две клиент структуры.Что мешает поверх неё положить контейнер, в котором будет вся требуха скина?
Что мешает поверх неё положить контейнер, в котором будет вся требуха скина?
Ну я по нему хотел менять цвет через скрипты, а не тупо картинки подставлять! А выходит что он, прячется за маской... а без нее будет высовываться за края.И нет, я не хотел полосами, я написал чтоб за края не высовывался - тому надо маленькими кусочками лепить рядом панели и вместе им менять цвет скриптом!
можешь например сделать панель с маской а в ней уже цветной элемент.
типа панель в панеле, первая в качестве маски а вторая в качестве цвета
Вот возьми мой первый пример и представь что вместо полосатой маски там скошенные углы а в место кнопки внутри панели другая панель и все
Поставь хоть один цвет в параметре Color(я потом скрипт добавлю) в новой панели по маске, - может мне это не получается - маску сделать! В моем проекте!
;) Только не понятно зачем было вам столько городить панелей, один одного не поняли ;D
Можете дать проект пузырька?О!!! У проекта уже и название появилось. ;D Вообще-то был просто нарисован круг, плюс пара стилей наобум, чтоб получить нечто полупрозрачное. Подобные "проекты" за пару минут делаются.
В принципе, можно, но для общего случая скрипт получится довольно сложный и громоздкий, если панель надо анимировать в произвольную сторону и на разную величину, придётся сохранять некоторые параметры в счётчиках или конфиге. Если надо просто растянуть панель за один угол, то это несложно.
Более конкретно задачу можно поставить?
Мне надо растянуть и сместить одновременно. К примеру стояла панель на координатах 0; 0; с размерами 48х48 и после анимации стала стоять на 30; 128; с размером 200х64.Скорее всего, плавно и одновременно быстро не получится - довольно большие перемещения и изменения размеров, а скачками некрасиво будет смотреться.
Скорее всего, плавно и одновременно быстро не получится - довольно большие перемещения и изменения размеров, а скачками некрасиво будет смотреться.
Может кто даст проект, как сделать на двух регуляторах выбор цвета так, чтобы был как на картинке?Типа так?
(https://i.ibb.co/0XjWXCr/fghj.jpg) (https://ibb.co/0XjWXCr)
Типа да, но лучше с регуляторами по краям, пипетка не нужна!:o Ну, на тебя не угодишь. Подобные извраты я изобретать не стану, дабы людей не смешить.
А то не понятно S{Single}, V{Single}) - там только нуль и единица, один черный цвет включает, другой белый.Подсказка {Single} - указывает на то, что переменная вещественного типа и может принимать множество значений от 0 до 1, а не только эти крайние.
Всвязи с появлением интереса к функции RepeatAB (https://www.aimp.ru/forum/index.php?topic=61262.0), выношу на ваш суд свою попытку визуализации установок точек А В.
Смутил только момент с автоотключением функции при изменении положения любого ползунка.Пришлось так сделать, сам понимаешь, что действия пользователя не предсказуемы - куда он может увести движки во время повтора, а вся система рассчёта при этом может нарушиться.
Пришлось так сделать, сам понимаешь, что действия пользователя не предсказуемы - куда он может увести движки во время повтора, а вся система рассчёта при этом может нарушиться.А в чем конкретно проблема?
А в чем конкретно проблема?По большому счёту - зачем это нужно? Уж если пользователь меняет границы отрезка, то после этого нажать ещё раз кнопку Repeat не составит большого труда.
Нужно при отпускании кнопки мыши над ползунком запоминать текущую позицию, запускать повтор с новыми границами и затем восстанавливать позицию, если она не выходит за новые границы.
Или как сделать что бы TASETextDisplayEx растягивал контейнер или панель в которой находиться?
procedure Execute(Sender, Arguments: TComponent);
begin
FindObject('NewFormClient').Set('SizeMinimal.Height', FindObject('TextDisplayEx').Get('PlaceInfo.ActualHeight'));
FindObject('NewFormClient').Set('SizeMaximal.Height', FindObject('TextDisplayEx').Get('PlaceInfo.ActualHeight'));
end;
Поместить TextDisplayEx с AutoSize.csHeight = True в контейнер. В OnResize у текстового поля назначить Handler с таким содержимым:Code: [Select]procedure Execute(Sender, Arguments: TComponent);
begin
FindObject('NewFormClient').Set('SizeMinimal.Height', FindObject('TextDisplayEx').Get('PlaceInfo.ActualHeight'));
FindObject('NewFormClient').Set('SizeMaximal.Height', FindObject('TextDisplayEx').Get('PlaceInfo.ActualHeight'));
end;
Спасибо конечно но, есть проблема. Так как у TextDisplayEx нет ограничителей он растягивается бесконечно, я вот не уверен будут ли работать ограничения контейнера или скрипт их проигнорирует и растянет контейнер свыше их.
Видимо придется делать через условия.
procedure Execute(Sender, Arguments: TComponent);
var
NewHeight: Integer;
begin
NewHeight := FindObject('TextDisplayEx').Get('PlaceInfo.ActualHeight');
if NewHeight <= 400 then
begin
FindObject('NewFormClient').Set('SizeMinimal.Height', NewHeight);
FindObject('NewFormClient').Set('SizeMaximal.Height', NewHeight);
end
else
begin
FindObject('NewFormClient').Set('SizeMinimal.Height', 400);
FindObject('NewFormClient').Set('SizeMaximal.Height', 400);
end;
end;
procedure Execute(Sender, Arguments: TComponent);
var
text, cont, a, b, c, : Integer;
begin
text := FindObject('TextDisplayEx').Get('PlaceInfo.ActualWidth');
cont := FindObject('LayoutContainer11').Get('PlaceInfo.Size.Width');
a := text + 86;
b := cont - 86;
if text <= cont then
begin
FindObject('Panel29').Set('PlaceInfo.Size.Width', cont);
end
else
begin
FindObject('Panel29').Set('PlaceInfo.Size.Width', a);
end;
end;
"Пишет" - кто?
У контейнеров нет свойства PlaceInfo, а PlaceInfo.Size.Width лучше не испоьзовать, в справке есть упоминание об этом.
2 Kibermanick
Ты бы сделал нечто вроде макета на пустом проекте - намного проще было бы помочь, зная конкретную задачу.
Установить:
FindObject('TextDisplayEx').Set('AutoSize', '[csHeight, csWidth]');
Сбросить:
FindObject('TextDisplayEx').Set('AutoSize', '[]');
procedure Execute(Sender, Arguments: TComponent);
var
text, cont, a, b, c, : Integer;
begin
text := FindObject('TextDisplayEx').Get('PlaceInfo.ActualWidth');
cont := FindObject('LayoutContainer11').Get('ActualWidth');
a := text + 86;
b := cont - 86;
if text >= cont then
begin
FindObject('Panel29').Set('PlaceInfo.Size.Width', cont);
FindObject('TextDisplayEx').Set('AutoSize', '[]');
FindObject('TextDisplayEx').Set('PlaceInfo.Anchors', '[akLeft, akTop, akRight,]');
FindObject('TextDisplayEx').Set('PlaceInfo.Margins.Right', 43);
FindObject('TextDisplayEx').Set('PlaceInfo.Margins.Left', 43);
FindObject('TextDisplayEx').Set('PlaceInfo.Size.Width', b);
end
else
begin
FindObject('Panel29').Set('PlaceInfo.Size.Width', a);
FindObject('TextDisplayEx').Set('PlaceInfo.Anchors', '[akLeft, akTop]');
FindObject('TextDisplayEx').Set('PlaceInfo.Margins.Left', 43);
FindObject('TextDisplayEx').Set('AutoSize', '[csWidth]');
end;
end;
Наверное тут логическая ошибка в том что при срабатывании условия я вроде как опять меняю размер который опять вызывает условие которое......Да, в событии onResize нельзя менять собственные размеры, будет зацикливание, надо повесить это событие на другой связанный элемент.
2. Будет ли данная функция дорабатываться? Извините, но выглядит ну очень кустарно.Это ж просто пример реализации, а не скин, претендующий на какие-либо дизайнерские изыски. ;D
Так же чтобы при изменении позиции плашки репит не сбрасывался.А вы представляете все коллизии, которые могут при этом возникнуть вследствие "дурацких" действий пользователя?
В смысле, чтоб весь текст стал bold?
Что у тебя в TextDisplayEx, лирика?
Форматирование поддерживает только TextDisplayEx, а строки надо коммутировать через StringOperatorConcatenator.
Посмотри пример, не знаю: то или не то, что тебе нужно. От кнопки переключаются строки Artist и Album, одна из них жирная.
Umniy_tetx2 - это кто и какое в нём выражение?
А почему тогда подключено к Action провайдеров? prvVolume вообще не задействован в выражении.
Ну так надо. prvVolume подключен для отображения громкости наверное, я уже подзабыл.На Action нет подходящих для твоей задумки сервисов, надо использовать State.
На Action нет подходящих для твоей задумки сервисов, надо использовать State.
Дак а мне надо только для зеленой связи, остальные как мешают?Если условие не выполнится, то будут мешать, правда с Action ничего, кроме хинта не считать.
А что за параметры: %R, %T? Что-то я таких не нахожу.
Это же "Atrist" и "Title" ты чего....А разве такое сокращение допустимо? См. Плеер-Настройки-Плейлист-Внешний вид - кнопочка "i" в кружочке.
А разве такое сокращение допустимо? См. Плеер-Настройки-Плейлист-Внешний вид - кнопочка "i" в кружочке.
Странно я сейчас попробовал сделать все тоже самое но на чистом проекте и там все работает.
А разве такое сокращение допустимо?В скин едиторе допустимо. Артем оставил поддержку старых макросов для совместимости со старыми скинами
В скин едиторе допустимо. Артем оставил поддержку старых макросов для совместимости со старыми скинами
I afraid that AIMP has no ability to calculate colors based on album art.
На втором примере AIMP.
Здравствуйте! Если пойти сюда (https://www.ironhidegames.com/Games) и поиграться со следующим элементом можно наблюдать эффект смещения.
Вопрос: возможно ли, сымитировать это в редакторе?
О каких "смещениях" идёт речь?
Hello, everyone
How to automatically change the bottombar color based on the color of album art?
(The colored background in second example is a TASECoverArtDisplay stretched 200000px wide)Вопрос: как ты сделал заливку под цвет кавера?Просто растянул обложку до неприличия, примерно 200000px в ширину
Вопрос: как ты сделал заливку под цвет кавера?Просто растянул обложку до неприличия, примерно 200000px в ширину
Вот:Это вроде смены положения камеры в 3D. Ох, и много будет кадров в аниматоре + проблема адресации к ним.
...
Просто растянул обложку до неприличия, примерно 200000px в ширинуЭто ж порядка 50 мегов памяти съест. :o
... Может создать тему с предложением о возможности получить цвет, рассчитанный на основе обложки альбома?Разве что в виде уже готовой функции, свойства или сервиса в CoverArtDisplay. Рассчитывать по пикселям на скриптах уйму времени займёт.
Разве что в виде уже готовой функции, свойства или сервиса в CoverArtDisplay. Рассчитывать по пикселям на скриптах уйму времени займёт.
;) Может кто даст пример, как сделать из панели кнопку, чтобы там был выбор кадров и работала маска как у простой кнопки?Это для того, чтоб самого себя перехитрить? ;D
Хотел сделать кнопку с изменяемым цветом Color , выходит надо тогда подгружать в скриптах каждый раз другую текстуру при действиях мыши на нажатия и т.д? :( :-\Ну, да, и микроскопом можно гвозди забивать, можно навесить хендлеры на панель и переключать текстуры из репозитория.
Слои маска и крышка панели из скриптов не доступны.Понятно, тогда надо две страницы с кнопками делать!
при наведении или нажатии этот значёк должен изменитьсяне на этот значок нажимать, а на кнопку (панель) этого значка, которая под ним! А в значке уже задан цвет через маску, с возможностью ее смены.Не знаю только как менять текстуру состояния кнопки этому значку!
менять текстуру состояния кнопки этому значкуты сам понимаешь что написал?
А что мешает в текстурах кнопки это всё нарисовать?Значки нарисованы, а если рисовать каждую кнопку под каждый цвет, много возни. Я не знаю как пример нарисовать чтоб бы вы поняли чего я хочу, может проект подскажет - но там вместо кнопок надо будет на панель менять
... не надо менять цвет - просто надо 4-е текстуры чтоб менялись из репозитория на панели ...Теперь уже и цвет не надо менять. А с чего начали? В тех дух примерах, кстати, не цвет меняется, а набор текстур кнопки.
... Нужно как на гифке, с применением панелей.На гифке всё раздельно нарисовано. Ты даже сам не представляешь, во что ввязываешься! Самый простой и разумный способ - переключать наборы текстур в кнопке.
Жаль что не экстрасенс. ;D Я вроде все доходчиво написал, ех.. ???Столько времени на тебя потратил, и всё впустую, а ты еще и претензиями. Другой бы давно уже наброса тестовый проектик или картинки, если на словах сложно объяснить.
крч - есть может у вас названия красивых дек? чтоб намного больше отличались от тех что уже нарисованы!Не будем оффтопить. На то есть поиск картинок, тем более, что мне эта тема уже не интересна.
Ну, жди, может, кто придёт и поймёт, что здесь написано.
Хочет из панели сделать кнопку!Если я правильно понял, нужно два действия: изменение текстуры стекла на "цветную текстуру"(на Panel) и изменение цвета иконки и фона кнопки?
О, уже ближе, спс, только как теперь сделать эту кнопку активной когда включена панель? То есть теперь при наведении мыши и ее нажатии она должна менять немного цвет, а когда нажата - должна стать меньше!Цвет и так меняет, немного(см. 5 и 6 кадр кнопки). Чтобы панель менялась при нажатии, у кнопки в диалоге Событий назначаем скрипты на OnMouseDown и OnMouseUp, скриптами меняем текстуру панели(маску). Пример прикрепил.
Самый простой и разумный способ - переключать наборы текстур в кнопке.
А еще, как написать выражение у связях слайдера, если хочу регулировать уровень (например прозрачности) от 30% до 100%, какая формула? А то я был троечником, а теперь уже склерозником ;DПопробовал написать, вроде всё правильно работает, но такое ощущение, что можно как-то проще сделать.
А еще, как написать выражение у связях слайдера, если хочу регулировать уровень (например прозрачности) от 30% до 100%, какая формула? А то я был троечником, а теперь уже склерозником ;DМожно было за это время хотя бы попробовать прописать в эту связ что-то, а если немного подумать, то пробовать не нужно будет, поскольку любое выражение в конкретно в этой связи не имеет смысла и будет игнорироваться.
procedure Execute(var State: Integer);
begin
FindObject('Panel').Set('BlendingModeOpacity', State + 86)
end;
... И вопрос, у меня BlendingMode грузит процессор (amd ii x2 240) до 50% -(75% - когда по маске цвет).Прозрачность не влияет вообще.Так и должно быть? Думал вот таким методом наложения менять цвет стеклянным кнопкам!
... А что насчет BlendingMode - даже выкрученная прозрачность в _0_ грузит процессор, это баг?Ну, вот, опять.... Ну, не достаточно же информации, чтоб повторить твою проблему!
При таком режиме, где-то 50%, но и плеер у меня грузит до 20%. Панель - 4А в каком именно режиме? Загрузил я этот проект, в режиме СТОП в редакторе нагрузка на проц - 0%, в режиме ПЛЕй - 0..2, в запущенном плеере изредка 1% проскакивает. ???
Она бесшовная и кратная.Если уж строго говорить, то это вообще не текстура, в смысле как паттерн она не может быть использована. Или надо делать текстуру во всё окно (тогда она просто будет растягиваться) или делать действительно бесшовный паттерн и никаких "середин" из него не вырезать в редакторе, а просто замостить, а углы скруглять надо маской (при необходимости ещё и крышкой). И то ещё надо пробовать - паттерн надо мостить, а в маске надо углы вырезать - может и не получится.
Или есть ступенчатый масштаб окна?Нет.
Может возможно тогда как-то закинуть картинку так, чтобы были скруглённые углы - самое лучшее решение для меня!Разве что вот так можно сделать (см. влож.), по-другому, скорее всего не получится, выравнивать окно скриптом для совпадения с текстурой - дурная манера.
А как инвертировать прокрутку слайдера?...0 информации в вопросе. И что значит "инвертировать" - чтоб слайдер двигался в противоположную сторону от вращения колеса и убегал в другой угол от места клика? ;D
Короче - надо перевернуть на 180 градусов слайдер.Такое наверное через счетчик делается или нет?Не совсем. В параметрах связи прописываем "100 - Value" и все
Но все же интересно, как же инвертировать слайдер для лирики?Никак. Никакими выражениями в связи этого не добиться. И зачем такие извращения? Когда есть скроллбар и графику его можно сделать неотличимой от слайдера.
Поискал информацию, нашел несколько ответов, но все спрошу здесь.Анимация "выезжания" возможна для отдельного дочернего окна, прикрепленного к материнскому.
Это правда, что окно эквалайзер не выезжает в AiO обложках ? (ну, анимация выезжания, как раньше было)
Подскажите как будет выглядеть код скрипта для получения доступа к mbLeft, mbRight и координатам X, Y
... примеры из сети типа таких (http://www.festra.com/wwwboard/messages/12909.html) не получилось применить в редакторе ???Почти так же:
case Arguments.Get('Button') of
'mbLeft': ShowMessage('LEFT button');
'mbRight': ShowMessage('RIGHT button');
end;
1. Нужен ещё onLoaded.И за это спасибо. Я поошибке поставил в Panel_Lid BlendingModeOpacity 200 а должно быть 255. Не получается исправить самому.
2. ...если рейтинг меньше 1 звезды?
4. ...(разворачивание, сдвиг, ресайз) панелей не добиться...
Если рейтинг текущей дорожки равен 1-й звезде то плеер его отключает и переходит на следующий.Именно равен одной, а если больше или меньше? Наверное логичнее сказать меньше 2-х?
А что если использовать аниматор. Может ли провайдер им управлять?На аниматоре контролы не расположить.
Именно равен одной, а если больше или меньше? Наверное логичнее сказать меньше 2-х?Но при меньше 2-х отключаются также и с оценкой 0.
procedure Execute(var State: Integer);
begin
if FindObject('ToggleSwitchWhenMark_Counter'). Get('Position') > 0 then
if State = 1 then
begin
FindObject('acPlayableFileToggleSwitchInPlaylist').Execute;
FindObject('acPlayerNextTrack').Execute;
end
end;
Код работает. Но при последовательном проигрывании дорожек с оценкой 1 отключает всего лишь одну и затем перестает отключать. И снова работает после того как играет дорожку с любой другой оценкой.Но при меньше 2-х отключаются также и с оценкой 0.Ну, если Вам именно это нужно, то код верный. Мне просто не понятна логика такой затеи: пропускать треки с одной звездой, а без звёзд и больше одноё играть...
.... Я поошибке поставил в Panel_Lid BlendingModeOpacity 200 а должно быть 255. Не получается исправить самому.Там только множитель изменится:
...не понятна логика такой затеи: пропускать треки с одной звездой, а без звёзд и больше одной играть...Всё как раньше в школе. Получил 5-ку это отлично, - 1 значит очень плохо. Одной звездой отмечаются дорожки которые уже поднадоели, а так как оценки заносятся в фонетику, то и отключать их вручную уже нет необходимости. Да и списки воспроизведения я не храню.
1. А не рискованно ли треки удалать по жанру? В 90% случаев в этом поле либо пусто, либо неадекватная чушь.Пример был написан для эффекта комического. Ибо упомянутый жанр слушается с виликим трудом.
...есть вот такое решение...Какое-то волшебство (https://youtu.be/TsBEG0ITnSg?t=928). Тысяча слов "спасибо".
Возможно ли сделать эдакий "мод свободного размера" который:Я у себя через ScriptableOperatorCounter сделал:
1. разрешит рястягивать окно по высоте и ширине
2. но при его отключении запомнит новые размеры и не сбросит к начальным?
Стрелк-о-растягушки очень мешаются в мини-плеере (https://youtu.be/ejxiEVd9KRs?t=195).
procedure Execute(var State: Integer);
begin
case State of
0:
FindObject('AIMPMainForm').Set('SizingHitTestAreaWidth', 5);
1:
FindObject('AIMPMainForm').Set('SizingHitTestAreaWidth', 0);
end;
end;
Я у себя через ScriptableOperatorCounter сделал:Класс, класс, (https://youtu.be/gYBksoY_RDI?t=470)класс. Благодарю!
Прямо, какая-то любовь ;) у всех к этому оператору case ofИз-за его читаемости и расширяемости.
Из-за его читаемости и расширяемости.Ну, если не лень писать это всё ...
Допустимо ли отображать данную всплывающую подсказку (https://i.imgur.com/1rDyTos.png) в TASETextDisplay?
Спасибо Artem, но %Char(59) не работает. Решение можно найти здесь StringOperatorConcatenator (https://www.aimp.ru/forum/index.php?topic=62114.msg384328#msg384328).
Честно изучал "Работа с датой и временем" но увы.Что-то не похоже ;), проще уж некуда:
Зачем это нужно?В рамках обложки.
Что-то не похожеОказалось что забыл привязать prvSystemTime.
Оказалось что забыл привязать prvSystemTime.Для приведённого скрипта этого и не нужно, текущее время возвращает функция Date.
Исправил, но формат 3/14/2035 не тот.Стало быть у Вас в системе такой формат времени выбран.
...текущее время возвращает функция Date.Я подозревал (https://www.youtube.com/watch?v=TC9dMHOPsLY), но про Set('Template', EncodeDate(Y, M, D)) не знал и по старинке делал через связь DisplayValue от провайдера который дёргался от prvSystemTime.
Стало быть у Вас в системе такой формат времени выбран.А форсировать нельзя?
... А форсировать нельзя?Можно, конечно, в обход системных настроек:
Я не знаю, конечно, глобальной задачи...А также того что Вы являетесь со-автором-не-по-своей-воле (https://youtu.be/QjDaXM01UOI?t=107) обложки, в которой половина скриптов написана Вами.
... Как через SliderHorizontal регулировать AnimationTime от LayoutTabbedGroup в диапазоне 100min-1000max?Так у Вас всё уже написано, осталось только циферки подставить.
Так у Вас всё уже написано, осталось только циферки подставить.Спасибо! (https://youtu.be/LBsTaYM0bzc?t=4)
Так всё-таки, поддерживается или не поддерживается?Возможно, баг. Конкатенатор тоже не спасает. В текстовом редакторе Template, вроде, всё правильно интерпретируется...
Пробовал через StringOperatorConcatenator, то же самое.
Такое крепление к краю монитора автоматом растягивает окно на всю высоту и это понятно, мне интересно можно-ли так же крепить окно к краю, чтобы оно автоскрывалось, когда изменение размера заблокировано.
... Тут должна быть установлена связь между "состоянием" 'iwtTrackComposer' и состоянием контейнера...Как раз такой связи и не требуется, должна быть связь, как я уже и писал, prvPlayingFileInfo.FileInfo с видимостью контейнера, содержащего эту текстовую метку:
А вот тег Lyricist АИМП, похоже, не поддерживает.Немного не так - в редакторе тегов АИМПа этого поля нет, а так всё работает, правда, в своей коллекции нашёл единственный трек, у которого эти теги заполнены.
Немного не так - в редакторе тегов АИМПа этого поля нет
Есть, на странице с текстом песниСколько раз бывал на этой вкладке, только сейчас дошло, что это поле для ввода тега Lyricist. :-\
Не, такой возможности нет. Я просто в OnLoaded сбрасываю позиции.Да, тоже думал про сброс позиций, в общем, так и сделал.
[...] без скриптов.Решение блеск не вопрос, но я чего в скрипт полез, да потому что в оригинале (http://download2260.mediafire.com/cbbc3975x4yg/0f7rc7nuz6wc9zz/Exodus_1.3.1.zip) (опция МАСКА/ART MASK) помимо переключения контейнеров предосмотра, он также отвечает и за смену текстур. В общем не смертельно.
[...] может, пригодится для чего-нибудь).На этой основе я придумал (https://youtu.be/dY4nMdY_xjM?t=493) TabCompact.
... в оригинале (опция МАСКА/ART MASK) помимо переключения контейнеров предосмотра, он также отвечает и за смену текстур.Если нужно сохранить скрипт, то тот счётчик можно подключить к группе (без всяких выражений в связи, модуль должен совпадать с числом страниц):
На этой основе я придумал TabCompact.Связка TabControl <--> LayoutTabbedGroup неплохо подходит для диалогов кастомизации, где несколько вкладок с настройками. Вкладки, к тому же, могут быть и вертикальными.
[...] модуль должен совпадать с числом страниц):В группе ещё 8 страниц (подсказки и т.п.). Возможно ли в выражении написать диапазон стр. 2-5 к примеру?
!!! Ес-но, в скрипте не должно быть никаких команд управления мнгстр. группой !!!Вовремя (https://youtu.be/jNAWDhFN9t8?t=10).
[...] подходит для диалогов кастомизацииЭто была моя первая мысль, но потом понесло (https://www.youtube.com/watch?v=ecaYvEwth44).
В группе ещё 8 страниц (подсказки и т.п.). Возможно ли в выражении написать диапазон стр. 2-5 к примеру?В данном случае, как заметили, группа управляет счётчиком, а не наоборот, поэтому надо уточнить, какой странице соответствует каждое состояние счётчика, что должно быть в счётчике вне его диапазона. Выражение в связи может оказаться довольно громоздким, если отсутствует математический "порядок", т.е. какое-то произволное сочетание номеров страниц и значений счётчика.
Салют! ;) А как сохранить настройки цвета ColorPicker-а от Black_AVP? Куда-то наверное надо записывать значение цвета и с этого места его считывать? - в TaseTextDisplay может или он не сохранит данные?Текстовая метка только отображает информацию.
ClipChildren: Определяет, будут ли дочерние элементы обрезаться границами родительского.
На что влияет свойство ClipChildren у контейнеров?У красного ClipChildren включен. Его ковер арт режется границей между контейнерами.
По справке не понял. Разницы в тестовом проекте тоже не увидел.
У красного ClipChildren включен. Его ковер арт режется границей между контейнерами.
У зеленого - выключен. Ковер арт вылезает за границы контейнера
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=57409)
На что влияет свойство ClipChildren у контейнеров?За свою практику ни разу не довелось использовать это свойство для контейнеров, а вот для окон это, к сожалению, не работает - обрезается в любом случае.
Не самое элегантное решение ...Разумеется. Чтоб зрительно менее был заметен этот переход на регуляторе, остаётся, разве что, увеличивать число кадров. Но и здесь, при 120 кадрах, это почти не заметно.
... но по-другому похоже действительно никак не сделать.По-другому - уговорить Артёма добавить вышеупомянутое событие.
Как редактировать обложку в режиме All-in-one, в редакторе не нашел
FindObject('Slider_A').Set('Position', Arguments.Get('X') / FindObject('cmfSeekBar').Get('PlaceInfo.Size.Width') * 100);
Подскажите, можно ли как-то сделать, чтобы размер окна всегда был кратен, например, пятиприкрепил пример
прикрепил примерСпасибо, работает ;)
прикрепил примерХотя, поторопился я, сказав, что все работает.
Откуда берётся цвет текста в фонотеке при зажатой клавише Ctrl? (синий на скриншоте)IncSearchColorText
Откуда берётся цвет текста в фонотеке при зажатой клавише Ctrl? (синий на скриншоте)
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=58473)
В моём скине он чёрный (#000000) на почти чёрном (#000C00):
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=58474)
В свойствах TASEMusicLibraryTable нигде нет чёрного цвета!
Есть прозрачные (None), но это StyleContent.FocusRectColor и StyleFilterBox.StyleTreeListContent.FocusRectColor.
Более того - во всём скине нет чёрного цвета, кроме Skin.FF000000 в репозитории, но и он ничего не меняет!
В репозитории у шаблонов только один цвет тёмно-синий - Skin.Color.Item.IncSearchText, больше неоткуда, вроде, взяться.
Но он не влияет на цвет текста с подчёркиванием.Да, но я подумал, что он мог быть использован для другого свойства.
Заметил странную штуку:Повторил. Может, это как-то связано с выделением гиперссылок...
....................................
Баг - не баг, но мне нужен нормальный цвет, а не чёрный, но негде его задать? ???
Какие версии плеера и SE используете? Пробовали v4.60? Там так же?Редактор v4.51 (1045).
Хотя, поторопился я, сказав, что все работает.Тут я не знаю, может особенность скриптов.
Размер изменяется, но скин не перерисовывается, а просто обрезается.
Прикрепил пример, попробуйте изменять размер окна
Black_AVP, Не совсем, я просто хочу разместить много кнопок в одном контейнере и вращать их вокруг.Была у меня подобная идея (https://www.aimp.ru/forum/index.php?topic=27831.msg378774#msg378774), но только я хотел перемещать контролы специальными кнопками (на той картинке - со стрелками). Задача осложняется тем, что надо скролировать контролы с определённым шагом, на LayoutScrollView у меня не получилось.
Black_AVP, Блестяще! Это именно то, что мне нужно...Минус такого решения в том, что не видно следующей/предыдущей кнопки и пользователю не просто будет догадаться, как с этим работать.
Тут я не знаю, может особенность скриптов.Еще раз спасибо, все работает как надо!
Через таймер работает, прикрепил.
Does anyone know how to disable forced hints? I remember doing it through binding hint service to one of the providers, or something like that.Можно сослаться в свойстве Hint на несуществующую строку локализации.
keyboardwarrior, существует ещё одна, на мой взгляд, интересная связка: LayoutTabbedGroup и TabControl, про которую не все знают. Так же можно использовать для экономии места в скине или для диалогов настройки.How to add hint on the tab in this case? thanks.
How to add hint on the tab in this case? thanks.Каждой отдельной вкладке, похоже, никак. Заголовки вкладок - это DisplayName контейнеров в группе, если им давать адекватные имена, то и особой надобности в подсказках не будет.
Ещё одна реализация Color Picker (AIMP 4.6). Все парамеры цвета элементов сохраняются в ini-файле скина.Скажите, пожалуйста, как мне обратиться к этому сохраненному цвету, чтобы использовать его для другого элемента?
Как видно присутствуют рывки из-за того что деление округляется до 1% (одного процента). Если у вас есть решение этому - буду благодарен.Position, PositionMax (https://www.aimp.ru/forum/index.php?topic=61370.msg379245#msg379245) - Вам в помощь.
пустая это затеяО, я полон этих идей. Мои идеи на самом деле не мои, я просто читаю то, что люди просят сделать и нахожу это интересным.
... По правде говоря, я не мог понять Position, PositionMax ::)Position - текущая позиция в треке при воспроизведении,
Есть ли примеры таких математических функций, как Random или Randomize?Randomize - это просто перезапуск генератра случайных чисел.
И как через EventHandler переключить OperatorCounter?У счётчиков тоже есть свойство Position, в том же ^ примере можно увидеть.
Position - текущая позиция в треке при воспроизведении,Да, я понял это. Но я не могу справиться с математической частью :-\
PositionMax - продолжительность трека, оба параметра в секундах.
.... Но я не могу справиться с математической частью :-\Если поделить Position / PositionMax, получим тот же прогресс, только в диапазоне 0,000 ... 1,000 и более высокой точностью. Таким образом можно рассчитать координаты WaveForm.
как через EventHandler переключить OperatorCounter?Я имею в виду что-то вроде Value+1
Прикольная штука но, бесполезна если нужно что бы объект от которого отслеживается позиция мыши, должен быть недоступен для кликов мыши и если внутри этого объекта есть другие объекты которые должны быть кликабельны.
Но вопросы, всё же, лучше задавать в вышеупомянутой теме, дабы и эта тема не превратилась в свалку. (https://i.imgur.com/zz6cWkm.jpg)
1. Перед созданием темы пользуйтесь поиском/головой.Вот чего человечеству недостает.
Посоветуйте как лучше сохранять анимации размерами 23600x200, бо acs4 вырос как на дрожжах, а за proj я ваще :-XТак это мелочь. ;) А как вам аниматор 137340*810 и проекты размером в гигабайт?
Так это мелочь. ;) А как вам аниматор 137340*810 и проекты размером в гигабайт?Увидел, испугался, убежал :o
Есть решение задачи?Так и не понял из всего этого словоблудия, в чём, собственно, задача: скопировать меню со всем биндингом? Оно что, для всех кнопок одинаковое? ???
в чём, собственно, задача...?Спасибо (https://www.youtube.com/watch?v=gYBksoY_RDI&feature=youtu.be&t=4123) ;D
В простейшем случае в onLoaded запретить таймер:
procedure Execute(EventData: TComponent);
begin
FindObject('Timer').Set('Enabled', False)
end;
Ув. Black_AVP, а альфа-канал не получилось встроить в Ещё одна реализация Color Picker (https://www.aimp.ru/forum/index.php?topic=61370.msg386921#msg386921)? Ещё бы отображение HEX-кода отсюда (https://www.aimp.ru/forum/index.php?topic=61370.msg379237#msg379237) был бы полный комплект. :-[Ну, а кто ж мешает? Проекты выложены, для альфы достаточно ещё один слайдер добавить, для вывода цвета в HEX-формате есть функция:
Ну, а кто ж мешает?Помогите (https://youtu.be/V3FrY0fWOLY?t=446) (https://spac.me/i/sm/poklon.gif)
Добавил новый бегунок, а как подключить? (https://spac.me/i/sm/neznaet.gif) К дополнительному Prop_Name с BlendingModeOpacity?Для начала надо все функции типа HSVToColor заменить на HSVToColorA, а ini-файл как раз трогать не нужно.
Получилось вывести HEX (https://spac.me/i/sm/privet.gif)Какой прок с него? Ни скопировать, ни вставить значение. Цвет по нему представить тоже затруднительно, никогда не пользуюсь и в ФШ RGB-моделью, только HSB.
типа вот тебе начальные координаты, вот конечные, и сделай за (таймер)времени и что бы с плавным замедлением в конце.Это всё та же задача (https://www.aimp.ru/forum/index.php?topic=27831.msg378445#msg378445)?
градиент...Вроде линейный с Midpoint Opacity на 50%.
Это всё та же задача (https://www.aimp.ru/forum/index.php?topic=27831.msg378445#msg378445)?
По своему опыту скажу, что любая анимация с перемещением элементов нашими подручными средствами - это тормоза и плавности при этом не получить, не говоря уж о каком-то законе изменения скорости/ускорения.
Для "жёстких" конструкций можно использовать аниматор, показывать его над UI на время анимации, затем прятать, и переключать видимость начального и конечного положения элементов. Можно получить вполне приемлимую картинку, поскольку в этом случае анимация выполняется в коде самого плеера, а не в наших скриптах.
... Вроде линейный с Midpoint Opacity на 50%.Если это в ФШ делано, то градиент должен выглядеть так:
Если упереть альфа-ползунок в самый потолок, то подконтрольный цвет становиться полностью видимым. Поменял значение в параметрах на 255.Вот тут непонятки... Если в редакторе, к примеру, у контейнера установить цвет $00FF0000, то он буде прозрачным, что логично, но если то же самое сделать в скрипте, то будет $FFFF0000, т.е. красный:
... можно ли подобное поведение реализовать в AIMP?Даже если знать размеры экрана (косвенно можно, считав размеры максимизированного окна), позиционировать окна мы всё равно не можем.
Даже если знать размеры экрана (косвенно можно, считав размеры максимизированного окна), позиционировать окна мы всё равно не можем.Если позиционирование в принципе невозможно, то предложенный вариант пусть и частично решает поставленную задачу. Попробовал внедрить в свой скин, - получилось, спасибо.
В аттаче пример (кривокостыльный), может, наведёт на какие-то мысли.
Правда, максимизация как включается, так и выключается.От этого триггерного эффекта легко избавиться - бросить ещё одну связь от того же AIMPMainForm.Maximize к Button.Visibility или к .Accessibility (как нравится) с выражением NOT Value.
От этого триггерного эффекта легко избавиться - бросить ещё одну связь от того же AIMPMainForm.Maximize к Button.Visibility или к .Accessibility (как нравится) с выражением NOT Value.Проблем а не в триггер-эффекте, надо чтобы после смещения или мамштабирования скина он возвращался к исходному размеру и положению автоматически. Это я сделал. Но было бы вообще здорово, если бы скин не максимизировался, а привязывался к боковой стороне, растягиваясь на весь экран. Такое можно сотворить?
К боковой стороне? И как будет выглядеть тогда эта "палка", приклеенная к боку? К верху экрана ещё, наверное, можно прикрутить, но тогда и магнеты надо пересчитывать скриптом или менять порядок контейнеров.Да я тут ещё подумал, нынешнее - приклеенное к трею - положение логически оправдано, пожалуй так и оставлю. Ещё раз спасибо за подсказку!
У нас нет информации о примагничивании окна к краям экрана, да и в таком состоянии, боюсь, что размеры его менять нельзя.
Можно ли в пользовательском контекстном меню создать пункт Обложки, идентичный Обложкам контекстного меню главного окна, т.е. с выпадающим списком установленных скинов?Такого меню в списке доступных стандартных нет, но можно создать тему с предложением добавить в этот список нечто вроде pmSkins.
позиционировать окна мы всё равно не можем.Можем, либо я чего-то не понял:
У винамповского скина FLO есть интересная фишка: главное окно автоматически растягивается по ширине экрана. Любые изменения горизонтального размера или положения, относительно горизонтали, по отпусканию кнопки мыши тут же корректируются, - скин опять растягивается от границы до границы. То есть, как я думаю, помимо привязки к нулю координаты X, горизонтальный размер скина задаётся в соответствии с горизонтальным разрешением монитора. Я начал портировать FLO (https://www.aimp.ru/forum/index.php?topic=43429.msg265520#msg265520) под AIMP, но без этой фишки продолжать начатое не вижу смысла. Резонный вопрос: можно ли подобное поведение реализовать в AIMP?Прикрепил пример, вдруг пригодится.
FindObject('AIMPMainForm').Set('Left', 0);Опа! Ещё одно недокументированное свойство. Никак уж не думал, что координаты окна будут публичными, да ещё read/write.
Можем, либо я чего-то не понял:Спасибо, может куда и сгодится. Но для FLO я, пожалуй, остановлюсь на решении Александра. В процессе реализации столкнулся с проблемой: дочерние окна (плейлист, фонотека...), спрятанные за боковые стороны экрана, выезжая, частично перекрывают главное окно. Пришлось "нарастить" их снизу пустыми контейнерами на нужную высоту. Понятно, что сей "финт" прокатывает лишь с главным окном прижатым к трею...
FindObject('AIMPMainForm').Set('Left', 0);
Прикрепил пример, вдруг пригодится.
Прикрепил пример, вдруг пригодится.Посмотрел пример. Это ж самое то!!!
Посмотрел пример. Это ж самое то!!!Я так и не понял: какое поведение главного окна тебе нужно?
Я так и не понял: какое поведение главного окна тебе нужно?В прототипе окно фиксированной высоты растягивается на весь экран по ширине по отпускании мыши, но позиция по высоте экрана сохраняется. Это условие в предложении D2NP соблюдается. Но плейлист и фонотека, выезжая из-за края экрана (а им там самое место), растянуты по высоте и перекрывают значительную часть главного окна, а у меня там кнопки. Поверх всех окон мало помогает. Вот если бы главное окно всегда было выше дочерних...
В прототипе окно фиксированной высоты растягивается на весь экран по ширине по отпускании мыши...При запуске оно не по всей ширине экрана, размеры по ширине всё же меняются мышкой? Мне просто не хочется ради этого винамп ставить.
...позиция по высоте экрана сохраняется. Это условие в предложении D2NP соблюдается.Если окно всегда растягивается по ширине экрана, лучше тогда сделать его размер фиксированным и запретить растягивание. Смысл - избавиться от обработчика мыши в панели, который будет постоянно вызываться когда мышь елозит по окну, что может тормозить анимацию и дабл-кликом, как писал выше, окно в трей не сворачивается.
... Вот если бы главное окно всегда было выше дочерних...Ну, это без костылей не победить, как и то, что при пристыковке к боковой стороне экрана главное окно распахивается во весь экран, тут даже onResize почему-то не срабатывает, скорее всего, в таком состоянии размеры вообще не изменить.
При запуске оно не по всей ширине экрана, размеры по ширине всё же меняются мышкой? Мне просто не хочется ради этого винамп ставить.Горизонтальный размер у оригинального FLO определяется разрешением экрана, изменить его, наверное можно (тоже не могу проверить, даже дистрибутивов Винампа под рукой нет), но оно сразу же растягивается, стоит отпустить мышь.
Если окно всегда растягивается по ширине экрана, лучше тогда сделать его размер фиксированным и запретить растягивание. Смысл - избавиться от обработчика мыши в панели, который будет постоянно вызываться когда мышь елозит по окну, что может тормозить анимацию и дабл-кликом, как писал выше, окно в трей не сворачивается.
Во вложении упрощенный вариант от D2NP без панели и без возможности ресайза (ширина определяется в onLoaded по размерам экрана при запуске).
Ну, это без костылей не победить, как и то, что при пристыковке к боковой стороне экрана главное окно распахивается во весь экран, тут даже onResize почему-то не срабатывает, скорее всего, в таком состоянии размеры вообще не изменить.
Кстати, дефолтный скин пристыковывается к боковым границам и не расползается на весь экран.Всё правильно, он сохраняет ту же ширину, а раз у этого скина она во весь экран, так и ...
Пример работы со цветом. Как с помощью слайдеров изменять раздельно оттенок, насыщенность и прозрачность элементов.
:-[
I did not do as follows
Hue_Counter
with FindObject('Mask_Panel') do
with FindObject('Mask_Panel1') do
with FindObject('Mask_Panel2') do
with FindObject('Mask_Panel3') do
Satur_Counter
with FindObject('Mask_Panel') do
with FindObject('Mask_Panel1') do
with FindObject('Mask_Panel2') do
with FindObject('Mask_Panel3') do
???
I was going to ask a question
I want to use Mask_Panels more
How do we duplicate panels? ...
I will be glad if you help me
Из google-перевода, я так и не понял, в чём проблема и какова задача. Если в понимании конструкции with (http://www.delphibasics.co.uk/RTL.asp?Name=with), то можно обойтись и без неё, перечисление типа "with A, B, C, D" в данной реализации скрипт-движка не поддерживается, поэтому к каждому объекту придётся обращаться отдельно.
И зачем размножать панели? Для задания цвета любых элементов можно использовать один диалог (https://www.aimp.ru/forum/index.php?topic=61370.msg386921#msg386921).
Regarding Mask_Panel, I need to use more than one panel. How do I do this?Повторить всё для других панелей: и слайдеры и скрипты, естественно, скорректировав в скриптах имена.
Повторить всё для других панелей: и слайдеры и скрипты, естественно, скорректировав в скриптах имена.
Мне не понятна до конца задача, что Вам нужно: от одного слайдера менять цвет нескольких панелей или для каждой панели должны быть свои настройки?
Opacity Slider я удалил, поскольку он ни с чем не связан.
Файл во вложении.
Не могу сообразить почему не отображаются вкладки, может кто объяснить чего не хватает?
Спасибо, заработало! :D
P.S. Из-за удалённой текстуры не заводилось.
Есть способ без неё рисовать вкладки?
Как получить доступ к этому свойству из скрипта?
В pmEqualiser есть пункт "Автоматический выбор преднастроек эквалайзера для файла", можно ли через скрипт получит к нему доступ, для переключения/отслеживания его состояния?
... Но какую функцию там выбрать для обрезки?Никакую.
... пропустить значение prvVolume.Progress через StringOperatorConcatenator с внутренним выражением %ValueX.Если к Value1 подключен, значит %Value1.
Никакую. Если к Value1 подключен, значит %Value1.Создаём DisplayText, привязываем к StringOperatorConcatenator > Result, в самом StringOper... не делаем преобразований, а Value1 привязываем к prvVolume > Progress. Если всё сделать так, то громкость так и будет отображаться как 100.00%
... Если всё сделать так, то громкость так и будет отображаться как 100.00%Ну, я не знаю тогда, как ещё объяснять... Пример во вложении.
Во вложении упрощенный вариант от D2NP без панели и без возможности ресайза (ширина определяется в onLoaded по размерам экрана при запуске).В аттаче компиляция из ваших вариантов, повыкидывал ненужное, работает так, как мне надо. Но хотелось бы реализовать ещё одну фишку прототипа.
Думаю, тут нужен либо цикл положения Left от 0 до Display_Width минус там сколько-то пикселей, либо по условию положения... ???С попиксельной анимацией даже и не думай заморачиваться: по одному пикселю - это страшно медленно, а по несколько - будет рывками. Пробовал уже всякие варианты подобных ресайзов - авантюра это делать на скриптах. Если устроит не растягивание, а выезжание, то можно посмотреть в сторону анимации на основе мнгстр. группы, там и скриптов не нужно.
С попиксельной анимацией даже и не думай заморачиваться: по одному пикселю - это страшно медленно, а по несколько - будет рывками. Пробовал уже всякие варианты подобных ресайзов - авантюра это делать на скриптах. Если устроит не растягивание, а выезжание, то можно посмотреть в сторону анимации на основе мнгстр. группы, там и скриптов не нужно.D2NP прислал мне рабочий вариант, завтра попробую на свой проект навесить...
... завтра попробую на свой проект навесить...Всё это должно делаться в коде плеера, Артём занимается этим вопросом, вот тема (https://www.aimp.ru/forum/index.php?topic=64382.0).
Всё это должно делаться в коде плеера, Артём занимается этим вопросом, вот тема (https://www.aimp.ru/forum/index.php?topic=64382.0).Полагаю, мой случай проще, никакой перестройки, просто изменение положения...
D2NP прислал мне рабочий вариант, завтра попробую на свой проект навесить...если что пример прикреплен в этом сообщении (https://www.aimp.ru/forum/index.php?topic=27831.msg397001#msg397001), v6
Black_AVP, может добавить их пример в Нехитрые полезности?Можете сами добавить, + краткое толковое описание. Ссылку в шапке я потом сделаю.
Ещё один нюанс: функция FindObject('AIMPMainForm').Get('Width/Height') при максимизированном окне на моём FullHD возвращает 1926 и 1056, видимо, с учётом невидимой рамки окна в 3 пикс.Это не рамка, это магнеты!
Это не рамка, это магнеты!В моём варианте магнетов не было: SizingHitTestAreaWidth = 0 и MagnetRectOffets = 0, в твоём, кстати, они тоже не нужны, поскольку вручную изменять размеры нет надобности.
В моём варианте магнетов не было: SizingHitTestAreaWidth = 0 и MagnetRectOffets = 0, в твоём, кстати, они тоже не нужны, поскольку вручную изменять размеры нет надобности.SizingHitTestAreaWidth не влияет, а вот несимметричный магнет...
И от магнетов эти размеры (1926 и 1056) не зависят, это же легко проверить. По вертикали ещё вычитается высота панели задач - 30 пикс.
если что пример прикреплен в этом сообщении (https://www.aimp.ru/forum/index.php?topic=27831.msg397001#msg397001), v6Опробовал на FLO. Есть, конечно нюансы, но работает!
Опробовал на FLO. Есть, конечно нюансы, но работает!у меня вообще не вытягивалось..
Разумеется, пришлось "выкинуть" масштабирование.
Нюанс такой: прикрепляем окно к верхней или нижней границе; нажимаем кнопку (чтобы значение на ней было 40); вытягивает окно за основную панель к центру экрана. Окно отстаёт от левой границы на 47 пикселей. Два клика по иконке в трее возвращают окно к левой границе, но сдвиг окна отступ восстанавливает. Закрытие же проигрывателя, повторный запуск и сдвиг окна, увеличивают отступ вдвое, до 94 пикселей (значение сдвига отображает и TextDisplayEx1)...
SizingHitTestAreaWidth не влияет, а вот несимметричный магнет...И как ты проверяешь? Элементарно же, хотя бы на встроенном скине, бросить метку и скриптик в одну строчку, который возвращает размеры окна в ту метку, распахнуть окно во весь экран/рабочий стол и убедиться, что никакие "магнеты" на возвращаемый размер не влияют. Магнеты - внутреннее дело АИМПа и смещения направлены внутрь окна. Можно, разумеется, вручную растянуть окно так, что его размеры будут превыщать размер экрана, но речь то идёт о получении размеров рабочей области, как всегда, кривыми методами и на зыбких предположениях.
Right плюсуется к горизонтальному размеру, Left - минусуется. Аналогично с Bottom и Top для вертикали.
И как ты проверяешь? Элементарно же, хотя бы на встроенном скине, бросить метку и скриптик в одну строчку, который возвращает размеры окна в ту метку, распахнуть окно во весь экран/рабочий стол и убедиться, что никакие "магнеты" на возвращаемый размер не влияют.Проверял на проекте от D2NP (https://www.aimp.ru/forum/index.php?topic=27831.msg397001#msg397001), менял магнеты у AimpMainForm, текстовое окно после сборки всё показывает.
Проверял на проекте от D2NP (https://www.aimp.ru/forum/index.php?topic=27831.msg397001#msg397001), менял магнеты у AimpMainForm, текстовое окно после сборки всё показывает.Так у него размеры экрана - величины рассчётные, скрипт-то глянь.
Ещё один нюанс: функция FindObject('AIMPMainForm').Get('Width/Height') при максимизированном окне на моём FullHD возвращает 1926 и 1056, видимо, с учётом невидимой рамки окна в 3 пикс.
...переделал, по идее этих проблем не должно бытьРаботает, даже приклеенное к границе. Но то пустой контейнер. А с реальной текстурой выезжает размер шире экрана. Где что подправить?
Теперь окно всегда в позиции Left = 0, и, получается, сдвиг идет за счет изменения ширины внутреннего контейнера. Судя по прилипающим окнам к невидимой части главного окна в винаповском скине сдвиг реализован таким же образом.
А с реальной текстурой выезжает размер шире экрана. Где что подправить?Текстуру в панели разместить
Текстуру в панели разместитьСпасибо, всё получилось, и даже лучше, чем у прототипа :P
Есть ли возможность реализовать принудительное переключение масштаба скина, поддерживающего масштабирование?
Зачем?У винамповского скина -Flo- есть такая фишка, вот и подумал, коль масштабирование у AIMP есть, почему бы не быть возможности переключать масштаб оперативно?
Проект не секрет, тогда просто это ни у кого интереса не вызвало, да и сейчас, скорее всего, тоже. :-[
Визуализация функции Repeat AB.
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=55772)
Выделяю объект в дереве элементов, возможно ли перекинуть фокус в рабочую область чтобы объект остался выделенным?Разве что ткнуть в него мышкой в рабочей области, Tab почему-то фокус в неё не перемещает.
То есть чтобы потом можно было переместить объект стрелками.
Hi, can this function be changed so that when you reach point "B" the playback goes to the next track?Проект приложен, можете менять его по своему усмотрению.
Also, can points "A" and "B" be stored for each track?Это не имеет смысла, поскольку продолжительность треков разная и эти точки могут оказаться за пределами трека.
Выделяю объект в дереве элементов, возможно ли перекинуть фокус в рабочую область чтобы объект остался выделенным?
То есть чтобы потом можно было переместить объект стрелками.
Клавишей Tab точно можно. Но неудобно, потому что надо нажимать несколько раз, плюс визуально не видно, когда фокус оказывается на рамке элемента в рабочей области.15 раз Tab, или 8 раз Shift+Tab. Tab мне этим и не нравился. Хотя, сейчас подумал, что можно скрипт для ahk написать, чтобы 15 раз нажимал Tab, и повесить на какую-нибудь клавишу.
Вроде быстрей туда добраться в обратном порядке, с помощью Shift + Tab. Плюс так видно (если присмотреться), когда фокус оказывается на маленьких кнопках рядом с рамкой (если опция «Разрешить использование команд быстрого доступа» не выключена в настройках).
15 раз Tab, или 8 раз Shift+Tab.Да, уж... Столько раз я нажать не догадался. Логичнее бы оставить только три контрола для обхода фокуса: дерево элементов, список свойств и окно рабочей области.
... от +1.5дб>0>-1.5>3>......>27 шаг 1.5дбС такой дискретностью это невозможно в диапазоне ниже -18..-20 dB.
Да, с аниматором всё получилосьПодскажите пожалуйста как грамотно связать этот слайдер с провайдером prvVolume?
Подскажите пожалуйста как грамотно связать этот слайдер с провайдером prvVolume?"Грамотно" - это, как понимаю, чтоб работал и от горячих клавиш?
Для меня загадка - почему теперь аниматор работает и от вращения колеса мышки? С Action он не связан... :-\Он меняет громкость колесиком, как и любой другой неактивный элемент скина :)
Для меня загадка - почему теперь аниматор работает и от вращения колеса мышки? С Action он не связан... :-\Кстати и не обязательно, что бы курсор находился над аниматором при прокрутке колёсика. Спасибо, возьмём на вооружение.
По скрипту из одной строчки на каждую кнопку:Подскажите пожалуйста, можно ли считать целочисленное значение из oldVolume в уже записанной строке конфига, но в другую переменную или лучше в LogicalOperatorCounter?
для запоминания
ConfigSet('oldVolume', FindObject('prvVolume').Get('Position'))
для восстановления
FindObject('prvVolume').Set('Position', ConfigGet('oldVolume', 0))
Решил добавить индикатор очереди в мини-плеер,Не совсем понятно о каком индикаторе идёт речь?
Не совсем понятно о каком индикаторе идёт речь?на скрине надпись queued
Решил добавить индикатор очереди в мини-плеер,Нужно добавить ещё одну связь "Action - DisplayValue"
Нужно добавить ещё одну связь "Action - DisplayValue"Это ничего не меняет (да и не должно по идее)
Это ничего не меняет (да и не должно по идее)Проверьте, проект имеется. Только не забудьте добавить какой нибудь трек в очередь ;)
Кстати и без этой связи всё работает так - же как и в главном окне, тогда не пойму в чём собственно проблема?Иконка должна исчезать, когда в очереди нет треков. Этого не происходит, если главное окно скрыто
Иконка должна исчезать, когда в очереди нет треков. Этого не происходит, если главное окно скрытоВерно.
procedure Execute(var State: Integer);
var
RI: Integer;
begin
RI:= FindObject('VisualisationClient').Get('ActualWidth');
FindObject('Resize_Counter').Set('Position', RI);
end;
Я знаю, но мне нужны текстуры по умолчанию сразу увеличенные в самом скине ...Нужны именно текстуры? Если вопрос всё-таки стоит "Как запустить плеер сразу в нужном масштабе?", то ответ - никак, такой функции на уровне скина нет.
Скажите пожалуйста, можно ли сделать так, чтобы по нажатию кнопки невидимый контейнер появлялся слева и не сдвигал всю форму вправо как в тесте? ???А куда он будет выезжать - за пределы MainForm? ;D
Подскажите пожалуйста как работают точки доступа "OnTrackFinished" и "OnTrackStarted" провайдера prvPlayerState?Собственно, как обозваны, так и работают - события, возникающие в начале и конце трека.
Собственно, как обозваны, так и работают - события, возникающие в начале и конце трека.А можно простенький пример использования, а то я до сих пор "на костылях"?
1. Тут уж у кого на что фантазии хватит, массу интересных вещей можно сделать особенно в начале трека, а в магнитофонных скинах они просто для нас подарок.
А можно простенький пример использования, а то я до сих пор "на костылях"?Пример чего? В Denon'e у меня по этим событиям меняются кассеты, в Equinox'e выводится растворяющийся текст с названием трека и исполнителя, в магнитофонах срабатывает автореверс, в TrackPreview осуществляется переход к выбранному участку трека (ссылка как раз на тот пример), да, всего уже и не вспомнить... Все эти примеры далеко не "простенькие".
А можно простенький пример использования, а то я до сих пор "на костылях"?Набросал тест того, что я хочу сделать.
... Ниже представлена схема того во, что это вылилось ...Чем та схема из TrackPreview не понравилась? По сути дела всё готово, только лишнее удалить. ???
Напомните пожалуйста. Как перевести 100,00% в 100%? В редакторе связей.ЕМНИП, только воткнув в связь StringOperatorConcatenator с внутренним выражением %Value1.
ЕМНИП, только воткнув в связь StringOperatorConcatenator с внутренним выражением %Value1.
Использовать условные операторы, могут быть варианты (по вкусу ;)):
procedure Execute(var State: Integer);
begin
if State in [10..100] then
begin
// нужные действия
end
end;
procedure Execute(var State: Integer);
begin
if (State >= 10) and (State <= 100) then
begin
// нужные действия
end
end;
procedure Execute(var State: Integer);
begin
if (State < 10) or (State > 100) then Exit;
// нужные действия
end;
procedure Execute(var State: Integer);
begin
case State of
10..100: {нужные действия};
0..9: {какие-то действия};
101..200: {ещё какие-то действия};
end
end;
... как теперь это привезать к например позиции мыши по Х?Так надо было сразу об этом и спрашивать.
Так надо было сразу об этом и спрашивать.
Всё тоже самое, только это будет Handler на событи onMouseMove и вместо переменной State будет Arguments.Get('X'):
procedure Execute(Sender, Arguments: TComponent);
begin
if Arguments.Get('X') in [10..100] then
////////
end;
Подскажите ;) как задать какой-то параметр всем элементам начинающимся например от Skin.Font. (разный текст)? Ибо перечислять названия шрифтов будет очень долго.
Хочу сделать выбор шрифта почти для всех Font - ов. І таким же макаром можно будет масштабировать шрифт?
FindObject('Object').Set('Texture.ID', '');
...
FindObject('Object').Set('Texture.ID', nil);
...
FindObject('Object').Set('Texture.ID', null);
Может быть кто то знает хорошую информацию, или мануал по скриптам ?В справке
В справкеПриходится всё проходить методом проб и ошибок и скрипты брать из примеров на форуме , из справки только самые азы. У меня даже папка со скриптами и лог операциями есть , это очень удобно , а не справка. Мозгов то тю-тю.У кого своих нет мой совет , прошерстите весь форум , всё скачайте , проверьте и сохраните .https://s8.hostingkartinok.com/uploads/images/2021/04/84fd1f07d657ec78c63d419eb83e2178.jpg (https://s8.hostingkartinok.com/uploads/images/2021/04/84fd1f07d657ec78c63d419eb83e2178.jpg)
У панели задана текстура из репозитория ресурсов.Спасибо ты кстати решил и мой вопрос ))
Как из скрипта задать панели отсутствующую текстуру («удалить» её)?
Пробовал так:Code: [Select]FindObject('Object').Set('Texture.ID', '');
...
FindObject('Object').Set('Texture.ID', nil);
...
FindObject('Object').Set('Texture.ID', null);
Во всех случаях ошибка «Invalid property type: Texture».
upd
Блин, мой фейл. Скопировал код от контейнера, а у панели свойство называется не Texture, а Skin.
Все способы работают.
Подскажите пожалуйста, как отцепить от главного окна waveform? Для этого обязательно использовать редактор скинов, или можно простым способом по аналогии з откреплением плейлиста?Вопрос можно превратить в обобщённый: можно ли открепить элементы обложки (кнопки, надписи и т.п.). Если в обложке какие-то элементы вынесены в отдельное окно и есть кнопка скрытия/открепления этого окна, то тогда можно повлиять на эту зону. В ином случае оно остаётся на том окне, где расположено.
procedure Execute(var State: Integer);
begin
case State of
0:
begin
FindObject('Panel4').Set('Visible',0);
FindObject('CoverArtDisplay').Set('Visible',0);
FindObject('CoverArtDisplay1').Set('Visible',0);
FindObject('SliderHorizontalBlur').Set('Visible',0);
FindObject('SliderHorizontalBlur1').Set('Visible',0);
FindObject('SliderHorizontalBlur11').Set('Visible',0);
end;
1:
begin
FindObject('Panel4').Set('Visible',1);;
FindObject('CoverArtDisplay').Set('Visible',1);
FindObject('CoverArtDisplay1').Set('Visible',1);
FindObject('SliderHorizontalBlur').Set('Visible',1);
FindObject('SliderHorizontalBlur1').Set('Visible',1);
FindObject('SliderHorizontalBlur11').Set('Visible',1);
end;
end;
end;
Объясните пожалуйста что я делаю не так, при первоначальном открытии скина в скрипте не срабатывает параметр Visible=0, только после 2х нажатий на кнопку привязанную к нему (в дальнейшем при переключении кнопкой все переключает нормально).Code: [Select]procedure Execute(var State: Integer);
begin
case State of
0:
begin
FindObject('Panel4').Set('Visible',0);
FindObject('CoverArtDisplay').Set('Visible',0);
FindObject('CoverArtDisplay1').Set('Visible',0);
FindObject('SliderHorizontalBlur').Set('Visible',0);
FindObject('SliderHorizontalBlur1').Set('Visible',0);
FindObject('SliderHorizontalBlur11').Set('Visible',0);
end;
1:
begin
FindObject('Panel4').Set('Visible',1);;
FindObject('CoverArtDisplay').Set('Visible',1);
FindObject('CoverArtDisplay1').Set('Visible',1);
FindObject('SliderHorizontalBlur').Set('Visible',1);
FindObject('SliderHorizontalBlur1').Set('Visible',1);
FindObject('SliderHorizontalBlur11').Set('Visible',1);
end;
end;
end;
Объясните пожалуйста что я делаю не так, при первоначальном открытии скина в скрипте не срабатывает параметр Visible=0, только после 2х нажатий на кнопку ...Всё, что должно принудительно принимать какие-то значения при запуске скина, описывается в событии onLoaded. При этом ещё надо следить, чтоб связи, заданные биндингом были синхронизированы со значением по умолчанию. Все скрипты при запуске срабатывают и могут сотворить то, что совсем не нужно в этом случае.
можно ли получить цифровые данные его диапазона 1..100 в процессе отработки
У Gauge есть свойство Position (0..100).
То есть если я правильно понял это можно получить через Gauge.Get('Position') ?Разумеется.
Разумеется.
А как в скриптах логарифмы пишуться?Так и пишутся: натуральный - Ln(), десятичный Log10().
Так и пишутся: натуральный - Ln(), десятичный Log10().
Нажми на свободном месте редактора скриптов Ctrl+Space - появится подсказка с перечнем всех доступных функций.
А логарифм с основанием 100 как? Log100?;D Неа... Такой функции ни в одном языке программирования нет. Тут уже надо вспоминать школьную арихметику:
;D Неа... Такой функции ни в одном языке программирования нет. Тут уже надо вспоминать школьную арихметику:
LogaB = Log(B) / Log(a);
Тип логарифма значения не имеет.
блин что то оно не работает. Кароче я делаю так пока что:
Log10(Gauge.Get('position'))
но оно выдает ошибку
Хм. А как транслировать Arguments из handel в другой скрипт например counter?А никак. Если эти праметры можно привести к типу Integer или String, то можно их передать через глобальные переменные.
"Огласите весь список, пожалуйста!" (с) "Кавказская пленница", т. е. полностью весь скрипт. Переменная Gauge определена?
Пока я не увижу весь скрипт и от чего от тактируется, не смогу сказать, где ошибка, скорее всего элементарно не определены переменные.
Вот тестовый проектик, сделал недавно для сравнения позиции Gauge со входным сигналом, поступающим с prvVisual. В нём всё работает.
FindObject('Panel15').Set('PlaceInfo.Margins.Right', (Arguments.Get('X')/100*(Log10(Gauge.Get('Position')))));
procedure Execute(Sender, Arguments: TComponent);
var
Gauge , txt: TComponent;
Log: Real;
begin
FindObject('Panel15').Set('PlaceInfo.Margins.Right', (Arguments.Get('X')/100*(Log10(Gauge.Get('Position')))));
txt:=FindObject('TextTT');
txt.set('Template', (Arguments.Get('X')/100*(Log10(Gauge.Get('Position')))));
end;
Ну, как я и предполагал - переменная Gauge не инициализирована.
В общем при наличии логарифма вылетает ошибкаВидимо потому, что логарифм 0 не существует, надо прибавить единичку.
Видимо потому, что логарифм 0 не существует, надо прибавить единичку.
Переменная Log - лишняя, нигде не используется, ошибки не вызовет, но порядок должен быть.
Мне не совсем понятна глобальная задача - ты хочешь сделать имитацию свайпа по панели, чтоб она расширялась в нужном направлении с некоторой скоростью?
Вряд ли это можно реализовать, тем более, с использованием Gauge. Будет всё та же беда - слишком медленное перемещение компонента.
В твоём примере панель перемещается рывками и в другую сторону от курсора.
остался только момент с тем что обработка OnMouseMove замирает вместе с курсором
Может не стоит изобретать костыли? Скрипты все равно работают адски-медленно. Оформите лучше предложение с наглядным его объяснением.
Не нужно тут никакого Gauge - он всё-равно спадает и нарастает по линейному закону. Проще всего управлять по таймеру.
Набросал пару примеров:
test_ComponentMove - тут перемещение происходит на 1 пикс., таймер на пределе - 1 мс, что вряд ли реально отрабатывается, разве что на крутой машине;
test_ComponentMove2 - перемещение через 5 пикс., скорость приемлимая, но рывки уже заметны.
И всё это ради того чтоб кавер дёрнуть?
Может, попробовать в таком направлении покумекать - две расположенные рядом многостраничные группы, там можно и с анимацией поиграться.
В примере работает от кнопки. но можно и от перемещения мышки сделать.
Проект надо запускать, анимация в редакторе для групп не работает.
Скриптов нет.
И всё это ради того чтоб кавер дёрнуть?
Может, попробовать в таком направлении покумекать - две расположенные рядом многостраничные группы, там можно и с анимацией поиграться.
В примере работает от кнопки. но можно и от перемещения мышки сделать.
Проект надо запускать, анимация в редакторе для групп не работает.
Скриптов нет.
Ну а как по вашему это можно оформить без скриптов?
Пока я в вообще не понимаю, что за задачу вы решаете. Поэтому и прошу формализовать это в виде предложения.
Сейчас вы увидели лазейку через скрипты, но это не значит, что единственный и правильный вариант
Вот он кстати даже работая линейно свою задачу выполняет ...В том моём примере test_ComponentMove функцию, как ты называешь "дежурного скрипта" выполняет скриптовый счётчик ComponentMoveCounter (он постоянно срабатывает, пока разрешён таймер, т. е. мышь в панели), в нём доступны и координаты мыши (передаётся через глобальную переменную) и координаты перемещаемого компонента можно получить и перемещать можно не по пикселям, а с привязкой к Gauge, раз уж так нравится.
В том моём примере test_ComponentMove функцию, как ты называешь "дежурного скрипта" выполняет скриптовый счётчик ComponentMoveCounter (он постоянно срабатывает, пока разрешён таймер, т. е. мышь в панели), в нём доступны и координаты мыши (передаётся через глобальную переменную) и координаты перемещаемого компонента можно получить и перемещать можно не по пикселям, а с привязкой к Gauge, раз уж так нравится.
Там нет файла проекта я не смог посмотретьДа, это моя оплошность - не те файлы упаковал. Перезалил.
Запускаете скин-эдитор, нажимаете "F1", затем слева в содержании ищете "Структура скина" и жмёте слева от надписи по плюсику, далее ниже по плюсику элементы фона, за тем по плюсику "Контейнер (TASELayoutContainer)", далее в открывшемся списке "Пример: Всплывающая панель" кликаете по этой надписи и справа читаете информацию)))
Может это поможет, правда с отображением времени - беда...У меня сейчас через StringConcatenator реализовано ("%IF(%Value1,%TextValue1,@Lng:45;)", где Value1 это время). Время показывает, но хотелось бы вместо пользовательской локализации в скине использовать локализацию, имеющуюся в плеере, и вместо простого времени отображать более подробную информацию, которую предоставляет точка доступа Task в prvScheduler.
Может это поможет, правда с отображением времени - беда...Получилось на базе Вашего примера сделать рабочий, спасибо за помощь!
Как узнать, прикреплено ли окно к краю экрана? Нужно для отключения скругленных углов в этом режиме.
Точка доступа Pin возвращает 1 только если окно закреплено без возможности скрытия.
По идее, нужное мне значение возвращает сервис Accessibility точки доступа Pin, но как к нему получить доступ?
Возможность сделаю в будущей версииСпасибо
Возможность сделаю в будущей версииВ 1232 такая возможность появилась?
В 1232 такая возможность появилась?
В 1240, что для 5.03А, что-то не заметил её, теперь вижу
В момент отпускания кнопки возникает событие onMouseUp.Спасибо, всё получилось.
Правда, как оказалось, момент нажатия фиксируется onMouseDown, а не onClick, как я думал... ;DonClick, в отличие от onMouseDown, возникает тоже при отпускании кнопки. В том примере это можно увидеть даже в самОм редакторе в тестовом режиме, кликая по панели. Все доступные нам события мыши на неё и повешены.
Много полезных вещей уже утонуло в теме [FAQ] Вопросы по работе в AIMP SkinEditor v3.50+ (https://www.aimp.ru/forum/index.php?topic=27831.0), да и в других тоже
.....................................................
Но вопросы, всё же, лучше задавать в вышеупомянутой теме, дабы и эта тема не превратилась в свалку.
...Is there any way to make the frames loop seamlessly?У Вас 19 текстур, поэтому и счётчик должен иметь модуль 19, а не 20.
Ошибка в Вашем скрипте (исправление во вложении).У Вас 19 текстур, поэтому и счётчик должен иметь модуль 19, а не 20.
при вставке в редактор скинов он вообще белыйЭто же ограничение. Нужен хоть один "цветной" пиксель, иначе не читается прозрачность. В зависимости от настроек формата будет белый или чёрный цвет.
Насколько помню, для "пустого" файла (полная прозрачность без данных) проводник и не умеет создавать прозрачный эскиз.Понятно, спасибо. Раньше, видимо, этого не замечал
на обложку вывел порядковый номер проигрываемого файла в плейлисте (DisplayValue - prvPlayingFileInfo %Index). К примеру, сейчас играет 6/50 трек и если удалить предыдущие 5 треков, то должно стать 1/45, но остается 6/45 до того момента пока не переключится на другой трек, только тогда начинает правильно считать 2/45. Можно ли как сделать, чтобы автоматически обновлялась величина эта?
Используйте провайдер prvPlaybackQueueТакого нет, есть только prvPlayerState, prvPlayingFileInfo, prvPlaylistManager
Такого нет, есть только prvPlayerState, prvPlayingFileInfo, prvPlaylistManager
Версия редактора у вас какая?редактор и плеер 4.70
редактор и плеер 4.70
как-то делал кое какие изменения 3 года назад, но файл проекта потерял, сейчас не могу вспомнить как
Актуальная версия - 5.11. Обходные маневры вы может какие-то и нашли, только это неправильно и не факт, что будет работать в будущем.
отображается количество файлов в плейлисте
Может кто подскажет как сохранить цвет в репозитории от системного ColorPicker-а ?
Помогите пожалуйста, ситуация следующая:
Необходимо увеличивать количество столбиков спектрума при растягивании контейнера(панели) в котором он находится. Предположим при растягивании на 10 пикселей, добавить +1 столбик. Цель такая чтобы при растягивании окна количество увеличивалось пропорционально :-[
procedure Execute(Sender, Arguments: TComponent);
begin
Sender.Set('ColumnsCount', Sender.Get('ActualWidth') / 10);
end;
Вешаем обработчик на событие OnResize и там пишем скрипт:Благодарю ;)Code: [Select]procedure Execute(Sender, Arguments: TComponent);
begin
Sender.Set('ColumnsCount', Sender.Get('ActualWidth') / 10);
end;
Есть какой-нибудь способ получить разрешение монитора, на котором находится окно? В конфиге эта информация есть: "ScreenSize=0,0,2560,1050"; в самой обложке - только DPI.
Зачем? Что за задача?Подстраивать обложку под мониторы с низким разрешением, не затрагивая при этом отображение на обычных мониторах
Подстраивать обложку под мониторы с низким разрешением, не затрагивая при этом отображение на обычных мониторах
Мне кажется, тут нужно плясать от размеров окна плеера, а не размера экранаДа, просто уменьшать минимальный размер окна не хотелось бы. Думал сделать исключение для низких разрешений + менять размер контекстных меню и прочих мелочей
Есть какой-нибудь способ получить разрешение монитора, на котором находится окно? ...На костылях можно. ;) Но результат будет верным только при первом применении скина (главное окно выводится по центру экрана).
procedure Execute(EventData: TComponent);
begin
with FindObject('AimpMainForm') do
begin
ScreenWidth:= Get('Width') + Get('Left') * 2;
ScreenHeight:= Get('Height') + Get('Top') * 2
end;
// FindObject('TextW').Set('Template', ScreenWidth);
// FindObject('TextH').Set('Template', ScreenHeight)
end;
На костылях можноУ меня была идея создать пустое окно, разворачивать его на весь экран и снимать с него размеры, но это тоже костыли
Как вариант, можно так (см. влож., в OnLoaded есть скрипт + два хендлера).Спасибо конечно, но не то что я хотел. Такой вариант я уже рассматривал, хотелось именно по клику.
... хотелось именно по клику.По "клику" куда, на пустое место, с риском попасть по чему-то не нужному? ИМХО, такое поведение более естественно.
По "клику" куда, на пустое место, с риском попасть по чему-то не нужному? ИМХО, такое поведение более естественно.Ну стандартном плеере Windows 11 так все и работает, клик в пустом месте работает именно как клик на панель или что-то другое, без риска попасть по чему-то не нужному.
Если уж очень нужно, то обработчик Panel_Handler можно назначить на тот элемент, но у контейнеров нет обработчиков событий мыши, поэтому придётся использовать панель или что-то другое.
Как сделать всплывающую панель по типу "панели громкости", чтобы можно было ее вызвать кликом по иконке, а свернуть по клику в любом месте вне панели.
https://imgur.com/a/jNE3Vzc
Как можно узнать, что в плейлисте выделено более 1 записи? Задача - отображать количество/время/размер только при выделении.
Думал сравнивать Playlist->Сount с общим количеством файлов в плейлисте, но нашел его только в подсказке вкладки плейлиста, к ней доступа нет.
Про какие настройки речь?Настройки внутри самой обложки, например моей А4 (тема, вид, видимость элементов, размеры шрифтов, визуальные эффекты и т.д. то что реализовано скриптами и не только)
Настройки внутри самой обложки, например моей А4 (тема, вид, видимость элементов, размеры шрифтов, визуальные эффекты и т.д. то что реализовано скриптами и не только)
Собственно, только вы сами и можете это сброситьЯ то думал есть какой-то путь к файлу настроек который создаётся и хранится рядом с обложкой в папке пользователя :-\
Я то думал есть какой-то путь к файлу настроек который создаётся и хранится рядом с обложкой в папке пользователя :-\
Хм, странно. У меня не повторяется. Что за ОС у вас?
Возможно ли добавить отступы этой всплывающей подсказке? В плейлисте заданы HeaderIndents и ItemIndents, она их не учитывает.
DisplayAreaOffsets тоже, кстати, игнорируется
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=72843)
Оно больше похоже на баг. Что за скин? (чтобы потестить)Что именно? В Charm-е всё точно так же
Есть какой-нибудь способ получить разрешение монитора, на котором находится окно?Artem, а нельзя доступ к Form.Monitor.Width/Height вернуть?
Artem, а нельзя доступ к Form.Monitor.Width/Height вернуть?
т.е. обладатели больших мониторов не смогут сделать окно маленьким?Да. У меня "большой" (>720p) монитор, я не хочу, чтобы окно складывалось до слишком маленьких размеров. В то же время, неплохо бы иметь совместимость с низкими разрешениями.
А как быть с перетаскиванием окна между разными мониторами?Если масштаб у мониторов одинаковый - проверять разрешение через медленный таймер; разный масштаб ловится через провайдеры
ItemIndents, она их не учитывает.
DisplayAreaOffsets тоже, кстати, игнорируется
Если масштаб у мониторов одинаковый - проверять разрешение через медленный таймер; разный масштаб ловится через провайдеры
Жуть... а стоит ли оно того?Пробовал разные варианты (переключение вручную, изменение размера в две ступени, привыкнуть к меньшему размеру) - этот удобнее всего.
Про DisplayAreaOffsets не понялВот, например, если добавить полупрозрачную панель над плейлистом, используя DisplayAreaOffsets, то эта подсказка залезет под панель:
P.S. Еще сейчас заметил, что в примере выше первое прокручивание плейлиста вниз от крайнего положения идет на величину DisplayAreaOffsets.Top, а не на 1 строку
подсказка залезет под панель:
Пробовал разные варианты (переключение вручную, изменение размера в две ступени, привыкнуть к меньшему размеру) - этот удобнее всего.
А есть скины, где это использовалось?В этом (https://www.aimp.ru/?do=catalog&rec_id=923), начиная с версии 3.10
начиная с версии 3.10
Ок, что ж, придется костылить...Ну костыли тут только с моей стороны
Ну костыли тут только с моей стороны
Раз скин уже есть, значит Monitor придется опубликовать.Так, по-хорошему, тогда уж надо отслеживать WM_DISPLAYCHANGE, добавить точку доступа в AIMPMainForm, к ней подключать хендлер.
Так, по-хорошему, тогда уж надо отслеживать WM_DISPLAYCHANGE, добавить точку доступа в AIMPMainForm, к ней подключать хендлер.
Пока я лишь сделаю, чтобы скин не падалОн не падает, там есть обработка исключений
Раз скин уже есть, значит Monitor придется опубликовать.Я вот что забыл - там еще Monitor.Top используется для автоматического ресайза окна, если оно не вписывается при перемещении на маленький монитор (при изменении размера центр окна может уйти обратно на большой монитор). Буду благодарен, если Top/Left тоже вернете
Я вот что забыл - там еще Monitor.Top используется для автоматического ресайза окна, если оно не вписывается при перемещении на маленький монитор (при изменении размера центр окна может уйти обратно на большой монитор). Буду благодарен, если Top/Left тоже вернете
...правда с Action ничего, кроме хинта не считать.А в StringOperatorConcatenator можно с Action хинт считать? У меня считывается единица ???
Значки появляются автоматически, но они работают только с биндингом. Единственный вариант - цеплять скрипты через биндингМожно подробнее, на примере
Можно подробнее, на примере
Увы, оказывается провайдеру нельзя задать подсказку, а без этого ничего не получится. А что у вас за задача?Ничего особенного, просто висит 2 функции на кнопке(ах) их несколько таких, хотелось бы без костылей чтобы все было красиво и понятно для пользователей (меня просили сделать чтоб всё было понятно, иначе нужно чтото колхозить)
Ничего особенного, просто висит 2 функции на кнопке(ах) их несколько таких, хотелось бы без костылей чтобы все было красиво и понятно для пользователей (меня просили сделать чтоб всё было понятно, иначе нужно чтото колхозить)
пользовательское меню меню
Можно попробовать через вот такой трюк:В примере дочерние окна не перекрывают друг друга, а мне нужно, чтобы из двух, перекрывающих друг друга окон, одно всегда было на первом плане. Пока я решил задачу кратковременным переводом приоритетного окна, когда оно уходит на второй план, в режим поверх всех. Правда, для этого пришлось сбрасывать StayOnTop для всех остальных, включая главное.
В примере дочерние окна не перекрывают друг друга, а мне нужно, чтобы из двух, перекрывающих друг друга окон, одно всегда было на первом плане
Так не получитсяА было бы здорово, если бы у равноправных дочерних окон был параметр, типа ZOrder, т.е. все равны, а я равнее! ;D
► Привет, ребята.Пробовали удалить и/или заново создать новое контекстное меню, с нужными пунктами?
► Пересобираю, частично перерисовывая свой скин под размер нового монитора (с 1080 на 1440) и по ходу решил добавить функцию копирования в окне лирики, как в базовом скине. В первый раз после сборки обложки, вроде всё работало:
► Пересохранил проект, чтобы не поломать базовую сборку и двигаться дальше... пересобрал и запустил обложку - ... уже не каждый раз высвечивается слово "копировать" и функция перестала работать, а если жать на троеточие OnClick, то редактор каждый раз стабильно вылетает:
► Что-то я где-то напартачил...
► Где ещё нужно посмотреть, чтобы починить это всё?
-----------------------------------------------------------------
► Временами (после закрытия редактора и открытия какого-то иного проекта и потом последующего открытия этого проекта) "троеточие" позволяет "прорваться", но копирование всё-равно не происходит:
Пробовали удалить и/или заново создать новое контекстное меню, с нужными пунктами?► Ещё нет. Я просто добавил недостающие компоненты к тому меню, что было создано ещё в 2019/20 годах...
если к нему применить полупрозрачный цвет?
Как именно определен цвет тонировки? он ссылается на репозиторий?Нет просто задан, позже попробую из репозитория
Нет просто задан, позже попробую из репозитория
Ок, скорее всего баг.Благодарю, вопрос решен. Просто нужно было брать цвет из репозитория. Если же применять цвет непосредственно, неважно есть прозрачность или нет, то тонировка не работает.
Благодарю, вопрос решен. Просто нужно было брать цвет из репозитория. Если же применять цвет непосредственно, неважно есть прозрачность или нет, то тонировка не работает.
Возможно ли подцепить связь с функцией "Зафиксировать положение окна"? Хочу в окнах вывести соответствующую иконку для информативности.Увы, сейчас такой возможности нет
Кнопка Проверить Обновления Обложки/Check For Skin Updates Button [Scriptless]Воспользовался этой фишкой, и столкнулся с проблемой.
Has 2 frames. You could add the third frame for "pressed state" which would require a script in Events (OnClick) section.
(https://i.imgur.com/gMBEhRP.png)
Don't forget to change the Hint also.
Существуют ситуации и без скриптов. К примеру, у меня в некоторых скинах кнопка включения эквалайзера кроме своей родной функции по ПКМ вызывает пользовательское меню меню, и приходиться выводить такой хинт:У тебя хинт выводится в две строки? Если да, то как?
ЛКМ - Эквалайзер Вкл./Выкл.
ПКМ - Настройки эквалайзера
Потому и предлагал не так давно возможность добавлять глифы в хинты, чтоб смотрелось в едином стиле, но той темы, вроде, уже нет.
У тебя хинт выводится в две строки? Если да, то как?В приведённом примере хинт просто набран в две строки в редакторе.
К сожалению, с CustomMenu такой номер не проходит.
На уровне меню подсказка уже есть, но она не выведена в редакторе. ДоделаюЭто о CustomMenu речь?
Это о CustomMenu речь?CustomMenu, навешенное на ПКМ, в довесок к основному действию по ЛКМ, далеко не лучшее решение, поскольку, после клика по ПКМ, появится данное меню, по которому нужно ещё раз кликнуть уже ЛКМ. По ПКМ действие должно вызываться сразу, а вот вопрос с его хинтом, отсутствующим у "непровайдеров", актуален.
Напрашивается как бы ещё одно свойство - заголовок (хинт) на само меню.
Куда только его вставить? В редакторе CustomMenu у каждого пункта свой набор свойств, а это должно быть общим для всего меню. Может, в тот же список пунктов? А в нём - ссылка на локаль. Ну, или отдельным полем ввода в том же диалоге.
... после клика по ПКМ, появится данное меню, по которому нужно ещё раз кликнуть уже ЛКМ. По ПКМ действие должно вызываться сразу ...Это почему вдруг? По ПКМ во всех софтинах обычно ожидаемо появление контекстного меню, а потом пользователь из него выбирает нужный пункт, ЛКМ, ес-но.
Это почему вдруг? По ПКМ во всех софтинах обычно ожидаемо появление контекстного меню, а потом пользователь из него выбирает нужный пункт, ЛКМ, ес-но.Соглашусь, когда биндингом связаны ContextMenu с ContextMenu. Там вызывается меню из нескольких строк, требующих выбора/подтверждения ЛКМ.
Нигде не видел, чтоб по ПКМ выполнялось какое-либо действие, кроме наших скинов, конечно, что есть ненормальное поведение..
Системный провайдер привязанный Action биндингом к ContextMenu срабатывает по ПКМ без лишних телодвижений, и его предполагаемое действие анонсируется хинтом. Ты считаешь, что такое использование ContextMenu противоестественно?..Считаю, что это изначально костыльно и работает только потому, что от ContextMenu есть прямая связь (аналогично Action), а могла быть только обратная, тогда бы все эти наши действия по ПКМ вообще бы не работали.
В приведённом примере хинт просто набран в две строки...Кстати, вывод хинта в две строки у меня сделать получилось.
» two-line hint.jpg (https://www.aimp.ru/forum/index.php?action=dlattach;topic=27831.0;attach=73825)А это что за чудо такое? Сразу даже не обратил внимания. Игрушка что ли какая?
А это что за чудо такое? Сразу даже не обратил внимания. Игрушка что ли какая?Выглядит игрушечным?
Нормальный магнитофон (https://www.dastereo.ru/t/audio-system-components-gmbh-asc-as-6002s-magnitofon-iz-krasnoj-knigi/105123).Да, уж .... Не думал, что такое может быть. В плане дизайна мне стыдно за немцев - пластмассовая мыльница, даже наша Нота-203, и та более стильно смотрится.
Да, уж .... Не думал, что такое может быть. В плане дизайна мне стыдно за немцев - пластмассовая мыльница, даже наша Нота-203, и та более стильно смотрится.Так прошлый же век, выпуск его начат в 1981-ом. Дизайном может и неказист, но за характеристики его в своё время хвалили. А ка по мне, так и дизайн не вызывает отторжения.
Или это вообще можно как-то по другому сделать, если можно, конечно?В самом коде плеера это, конечно, можно реализовать.
Кстати, всё чаще почему-то попадают треки (похоже, только mp3), которые при обратной перемотке не останавливаются в начале, хотя счётчик показывает нули. С чем это связано - загадка.У обратной перемотки есть особенность, что в режиме Плей трек всё время норовит убежать вперёд. Тут может не нуль нужен, а позиция к нему близкая.
Тут может не нуль нужен, а позиция к нему близкая.Оно так и сделано, скрипт выключает перемотку при достижении времени менее 0,1 с от начала трека. Пробовал и 0,5 и 1 с - результат тот же. Причём повторяется не в 100% случаев, иногда срабатывает нормально. :-\
Оно так и сделано, скрипт выключает перемотку при достижении времени менее 0,1 с от начала трека. Пробовал и 0,5 и 1 с - результат тот же. Причём повторяется не в 100% случаев, иногда срабатывает нормально. :-\Совсем недавно фиксилась проблема с перемоткой, правда вперёд: https://www.aimp.ru/forum/index.php?topic=74576.0
Оно так и сделано, скрипт выключает перемотку при достижении времени менее 0,1 с от начала трека. Пробовал и 0,5 и 1 с - результат тот же. Причём повторяется не в 100% случаев, иногда срабатывает нормально. :-\У нас же есть счётчик, управляющий рулоном ленты, поставить условием для окончания обратной перемотки достижение какого-то там кадра, №1 или №2...
Загвоздка лишь в том, как, после перехода на предыдущий трек по acPlayerPrevTrack, "заморозить" дальнейшее исполнение скрипта (вычисление длины трека, и переход в его конец) до момента инициализации параметров этого предыдущего трека? :-\Я понял тебя, сам когда-то над такой задачей башку ломал. Дело в том, что трек может грузиться долго, надо поймать момент, когда он загрузился и началось воспроизведение, перейти в конец трека, но не в самый, иначе опять будет переход на следующий трек. Тогда я пробовал поймать переходы из STOP в PLAY, мне казалось, что в тот момент проскакивает состояние STOP, но так ничего и не вышло.
У нас же есть счётчик, управляющий рулоном ленты, поставить условием для окончания обратной перемотки достижение какого-то там кадра, №1 или №2...Так, номер кадра и рассчитывается по позиции в треке.
Может так будет надёжнее? ???
Я понял тебя, сам когда-то над такой задачей башку ломал. Дело в том, что трек может грузиться долго, надо поймать момент, когда он загрузился и началось воспроизведение, перейти в конец трека, но не в самый, иначе опять будет переход на следующий трек.Вот в том и суть. Есть ли в структуре АИМП что-то, могущее показать, что трек опознан и инфа о нём доступна?
Тогда я пробовал поймать переходы из STOP в PLAY, мне казалось, что в тот момент проскакивает состояние STOP, но так ничего и не вышло.А мне кажется, что STOP при смене трека точно проскакивает. Например, я навешиваю на кнопку лонгтап для перемотки вперёд. Перемотка должна заканчиваться лишь при отпускании кнопки, срабатыванием хэндлера OnMouseUp. Но! Видимость кнопки завязана на prvPlayerState.State>0. И при переходе на следующий трек перемотка прерывается. А у постоянно видимой кнопки перемотка продолжается и продолжается...
Так, номер кадра и рассчитывается по позиции в треке.Ты писал про время от начала трека, я так понял, что его ты непосредственно из Position и считываешь. А кадры для рулона просчитываются по Position относительно PositionMax. Их максимальное число равно числу кадров, но можно отдельный счётчик замутить, с любым нужным модулем, хоть 1000, для особой точности. Но, видимо, это не важно.
Но при переходе на предыдущий трек по acPlayerPrevTrack.Execute в PositionMax остаётся информация о продолжительности текущего (теперь уже прежнего текущего) трека.Так в этом и есть основная проблема и она, скорее всего, непобедима.
Так в этом и есть основная проблема и она, скорее всего, непобедима.Я что, скины для кого-то делаю? В первую очередь - для себя, интересно просто.
Да, забей ты на это. Думаешь этой перемоткой кто-то пользуется? В моих скинах перемотка сделана ещё и по ПКМ без лонгтапа, а про это даже мало кто знает. :-[ ;D
Взять какой-нибудь исключительный признак трека, который можно получить в скрипт, и ждать его изменения.Для этой цели подойдёт, разве что, номер трека в плейлисте, но можно ли его получить...
Ну и как зациклить процедуру проверки идентичности/неидентичности параметра без выхода из скрипта?Скрипт нельзя зацикливать. Как вариант, вызывать по таймеру.
Для этой цели подойдёт, разве что, номер трека в плейлисте, но можно ли его получить...Скрипт нельзя зацикливать. Как вариант, вызывать по таймеру.Боюсь, что с номером не прокатит.
А как задержку определять? Треки разной длины, грузятся разное время. Кроме того, в плеере есть опция "Предзагрузка трека", ещё не известно, будет ли она работать в обратную сторону и как-то влиять на этот процесс.Попробую, для начала, с PositionMax. Значение исходного сравнивать со считанным. Если одинаковое, на второй круг через минимальную задержку, и так, пока не обнаружится неравенство. Новые данные уменьшить, записать в Position и продолжить перемотку. Для сравнения нужны именно данные трека, для того, чтобы удостовериться, что он загрузился. Инфа из плейлиста тут не поможет.
В любом случае надо как-то определить, что загружен предыдущий трек.
... пока не обнаружится неравенство.Несерьёзно это, так и тянет тебя покостылить. Теоретически продолжительности треков могут оказаться одинаковыми или просто один и тот же трек продублирован в плейлисте.
Несерьёзно это, так и тянет тебя покостылить. Теоретически продолжительности треков могут оказаться одинаковыми или просто один и тот же трек продублирован в плейлисте.Я выше писал, что продолжительность трека не уникальна, но хочу проверить, будет ли это работать в принципе.
Несерьёзно это, так и тянет тебя покостылить. Теоретически продолжительности треков могут оказаться одинаковыми или просто один и тот же трек продублирован в плейлисте.На деле всё оказалось гораздо проще. Два скрипта; первый "дёргает acPlayerPrevTrack за Execute" и переключает счётчик, запускающий через делайер второй скрипт. Тот считывает PositionMax, уменьшает значение на единицу и записывает в Position.