AIMP Forum

AIMP для Windows => Skin Editor / Skin Engine => Вопросы => Topic started by: runfm on March 06, 2018, 02:14:55

Title: Баг при попытке скрыть контейнер скриптом
Post by: runfm on March 06, 2018, 02:14:55
При попытке выставить свойство Visible равным нулю вылезает ошибка (см. скриншот)

(https://www.aimp.ru/forum/index.php?action=dlattach;topic=59199.0;attach=53552)

Версия плеера 4,50 билд 2058

Узнать версию скинедитора не получилось, так как пункт о программе показывает версию плеера а не редактора

Скрипт под катом

procedure Execute(Sender, Arguments: TComponent);
var
  LeftContainer:TComponent;
  AddContainer: TComponent;
  W: Integer;
begin
    LeftContainer := FindObject('LeftContainerBorder');
    AddContainer := FindObject('LeftContainerBorder');
   
    W:=  AddContainer.Get('Width') ;
    if W > 50 then
      AddContainer.Set('Visible',1);
    if W < 50 then
      AddContainer.Set('Visible',0); 
end;
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: Artem on March 06, 2018, 09:46:09
Можете выложить пример скина, на котором повторяется эта ошибка?

Узнать версию скинедитора не получилось, так как пункт о программе показывает версию плеера а не редактора

Серьезно?
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: runfm on March 06, 2018, 18:34:14
Можете выложить пример скина, на котором повторяется эта ошибка?


EventHandler с именем "is" висит на событии OnResize контейнера LeftContainerBorder

Баг возникает если двигать разделитель сплит контейнера до упора влево или если он уже в крайнем левом положении при запуске программы
 
Проект во вложении
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: Artem on March 06, 2018, 22:49:50
Ошибка возникает из-за того, что в момент расчета разметки SplitView возникает скрытие контейнера, что приводит к рекурсивному пересчету и ссылки на нужные данные становятся недействительными.

А зачем нужно скрывать этот контейнер? Почему нельзя разрешать ему принимать нулевой размер?
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: runfm on March 07, 2018, 02:50:30
А зачем нужно скрывать этот контейнер? Почему нельзя разрешать ему принимать нулевой размер?

не знаю как сейчас, но на прошлой версии программа грохалась с ошибкой property width not exist или что то типа этого. я  описывал эту ошибку в другом посте , там скрины и отладочная информация

https://www.aimp.ru/forum/index.php?topic=58955.0
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: Artem on March 07, 2018, 08:36:23
И все же, зачем в SplitView прятать контейнер по ресайзу?
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: runfm on March 07, 2018, 11:40:13
И все же, зачем в SplitView прятать контейнер по ресайзу?


Идея была такова - скрывать/показывать левый контейнер SplitView по кнопке, но если разрешить нулевой размер в настройках скина и полностью задвинуть левый контейнер влево то как потом вытащить его обратно ? вот я и подумал что лучше продублировать полное скрытие/отображение скриптом. А событие OnResize было выбрано просто чтобы тестить скрипт.
Title: Re: Баг при попытке скрыть контейнер скриптом
Post by: Artem on March 07, 2018, 13:04:28
полностью задвинуть левый контейнер влево то как потом вытащить его обратно ?

Так сплиттер-то останется, прячется только контейнер.