Перейти к содержанию
Fire Monkey от А до Я
  • 0

Смена родительского компонента для аниматора №2


Евгений Корепов

Вопрос

Задача следующая - добавить анимацию в ListBoxItem по клику, ListBoxItem может быть несколько десятков. Создавать для каждого Animation накладно.

 

 

Update:

Нашел решение в теме http://fire-monkey.ru/topic/1073-smena-roditelskogo-komponenta-dlia-animatora/ :

но мне нужно также событие AnimationFinish, по нему происходит смена содержимого ListBox. (Пишу компонент файл-менеджера для одного проекта).

 

Update:

Вроде нашел решение, все работает. Подскажите корректно ли я это делаю? 

 

procedure TFormMain.FormCreate(Sender: TObject);
begin
  FloatAnimation.Parent:=Nil;  // FloatAnimation создан в дизайнатйме, лежит на форме, поэтому нужно так сделать.
  FloatAnimation.Enabled:=False;
end;


procedure TFormMain.ListBoxFilesItemClick(const Sender: TCustomListBox;  const Item: TListBoxItem);
begin
  CurrentItem:=Item;
  if CurrentItem.Tag=1 then // Смена папки
  begin
    FloatAnimation.Parent:=Item;
    FloatAnimation.PropertyName:='Opacity';
    FloatAnimation.Enabled:=True;
    FloatAnimation.Start;
  end;
end;


procedure TFormMain.FloatAnimationFinish(Sender: TObject);
begin
  FloatAnimation.Enabled:=False;
  FloatAnimation.Parent:=Nil;
  FillListBoxFile(CurrentItem.TagString);
end;

Причем без этого куска кода:

  FloatAnimation.Enabled:=False;
  FloatAnimation.Parent:=Nil;

работать не хочет. 

Хотя работает и ладно... ;-)

 

 
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

 

Задача следующая - добавить анимацию в ListBoxItem по клику, ListBoxItem может быть несколько десятков. Создавать для каждого Animation накладно.

 

 

Update:

Нашел решение в теме http://fire-monkey.ru/topic/1073-smena-roditelskogo-komponenta-dlia-animatora/ :

но мне нужно также событие AnimationFinish, по нему происходит смена содержимого ListBox. (Пишу компонент файл-менеджера для одного проекта).

 

Update:

Вроде нашел решение, все работает. Подскажите корректно ли я это делаю? 

 

procedure TFormMain.FormCreate(Sender: TObject);
begin
  FloatAnimation.Parent:=Nil;  // FloatAnimation создан в дизайнатйме, лежит на форме, поэтому нужно так сделать.
  FloatAnimation.Enabled:=False;
end;


procedure TFormMain.ListBoxFilesItemClick(const Sender: TCustomListBox;  const Item: TListBoxItem);
begin
  CurrentItem:=Item;
  if CurrentItem.Tag=1 then // Смена папки
  begin
    FloatAnimation.Parent:=Item;
    FloatAnimation.PropertyName:='Opacity';
    FloatAnimation.Enabled:=True;
    FloatAnimation.Start;
  end;
end;


procedure TFormMain.FloatAnimationFinish(Sender: TObject);
begin
  FloatAnimation.Enabled:=False;
  FloatAnimation.Parent:=Nil;
  FillListBoxFile(CurrentItem.TagString);
end;

Причем без этого куска кода:

  FloatAnimation.Enabled:=False;
  FloatAnimation.Parent:=Nil;

работать не хочет. 

Хотя работает и ладно... ;-)

 

 

FloatAnimation.Parent:=Nil; // не обязательно, достаточно выключить анимацию

Ссылка на комментарий
  • 0

FloatAnimation.Parent:=Nil; // не обязательно, достаточно выключить анимацию

 

Без "FloatAnimation.Parent:=Nil" вылетало исключение. Какой именно не скажу, грохнул весь этот код. Опять наступил на старые грабли и изменил принципу  "Никогда, никогда не использовать ListBox в проектах". Самодельный аналог на вертикальном скроллбоксе работает на порядок красивее и стабильнее. Этот компонент переписал на ListView. 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...