0 Members and 2 Guests are viewing this topic.
Я хотел сделать скрипт на основе твоего для обложки в панели. Но я не знаю как заставить сработать провайдер после изменения размера, изменения размеров можно узнать как
Я хотел через видимость Главного окна и окна миниплеера, по логике они же не должны одновременно быть видимы.
Размер контейнера(окна) я меняю через "SizeMinimal.Width" и "SizeMinimal.Height", но тогда их после увеличения окно нельзя уменьшить, так что после того как скрипт уравняет стороны SizeMinimal надо сбросить назад (может после выравнивания осуществить паузу, а затем сбросиить). А знаний для всего задуманного не хватает.
Я хочу чтобы при изменении размера окна оно сохраняло пропорции - было квадратным. Т.е. если меняешь размер окна в большую сторону срабатывал скрипт и размер меньшей стороны приравнивал к большей, а когда уменьшаешь наоборот желательно.
Скрипт Panel.onResize срабатывает сам при изменении размеров панели - событие, возникающее в результате действия пользователя.Я пытался как-то "квадратить" окно, но, скорее всего, ничего не выйдет, т.к. любые попытки изменить размеры панели, равно, как и контейнера, жёстко связанного с ней, внутри её собственного обработчика onResize, вызывают AV - видимо зацикливается скрипт или переполняется стек, не знаю.
У меня есть пример с пропорциональным изменением обложки, но он только с контейнером в SpliView, а не окном. Приложил, может чем-то поможет. С окном вроде пробовал, но пример не нашёл - видимо, не получилось так сделать.
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-
И, без разницы, какая зависимость?Применительно к индикаторам уровня, приходится логарифмировать данные провайдера, чтобы показания, хоть примерно, соответствовали шкале в децибеллах:Log10(Value / N + 1) * KN позволяет менять степень логарифмирования, а множитель К нужен для приведения результата при уровне с провайдера = 100 к отметке в 0 дБ.
Вот так будет для максимального логарифмирования http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiJsb2coeC8xKzEpKjUwIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwLCJ3aW5kb3ciOlsiLTE0LjQ0MjMwNzY5MjMwNzY1OCIsIjExMC41NTc2OTIzMDc2OTIyOSIsIi0xMS44NDM3NDk5OTk5OTk5NjQiLCIxMTMuMTU2MjUiXX1d