Jump to content

[Animation] Новая анимация - крашится приложение при вызове HideForm.


dervish00
 Share

Recommended Posts

Posted (edited)
Скрытый текст



class procedure TfgAnimationHelper.HideForm(const AForm: TObject; const AOptions: TfgAnimationOptions;
  const ADuration: Integer; const AFinishCallback: TfgCallback);
var
  LDuration: Integer;
  LForm: TfgCustomForm;
{$IFDEF IOS}
  LAnimation: TfgAnimation;
  LNewTopForm: TfgCustomForm;
{$ENDIF}
begin
  TfgAssert.IsNotNil(AForm, 'AForm');
  TfgAssert.IsClass(AForm, TfgCustomForm);

  LForm := TfgCustomForm(AForm);

  if LForm <> TfgFormManager.Current.TopMost then
  begin
    LForm.Hide;
    if Assigned(AFinishCallback) then
      AFinishCallback;
    Exit;
  end;

  if ADuration = PlatformDuration then
    LDuration := TfgAnimationManager.ShortAnimationDuration
  else
    LDuration := ADuration;
{$IFDEF IOS}
  LNewTopForm := TfgFormManager.Current.PreviousTopMost;

  LAnimation := LForm.AnimationManager.AddTranslationAnimation(TPointF.Zero, TPointF.Create(LForm.Width, 0), LDuration);
  LAnimation.Options := AOptions + [TfgAnimationOption.ReleaseAnimationOnFinish];
  LAnimation.OnFinishCallback := procedure
    begin
      LForm.Hide;
      if Assigned(AFinishCallback) then
        AFinishCallback;
    end;
  LAnimation.Start;

  if LNewTopForm <> nil then
  begin
    LAnimation := LNewTopForm.AnimationManager.AddTranslationAnimation(TPointF.Create(-LNewTopForm.Width / 3, 0),
      TPointF.Zero, LDuration);
    LAnimation.Options := [TfgAnimationOption.ReleaseAnimationOnFinish];
    LAnimation.Start;
  end;
{$ELSE}
  LForm.Show;
  &Out(LForm, TfgAnimationInOutMode.LeftToRight, AOptions, LDuration,
    procedure
    begin
      LForm.Hide;
      if Assigned(AFinishCallback) then
        AFinishCallback;
    end);
{$ENDIF}
end;

 

При вызове процедуры HideForm из-за вызова LForm.Show (после {$ELSE}) у меня крашится приложение с ошибкой "Component with name ... already exist", т.к. на форме есть компоненты, которые создаются в рантайме в обработчике формы OnShow. На предыдущей версии библиотеки этого не было. Сделал копию файла FGX.Animation с закомментированным вызовом LForm.Show - всё работает.

Edited by dervish00
Link to comment
Share on other sites

  • dervish00 changed the title to [Animation] Новая анимация - крашится приложение при вызове HideForm.
  • Administrators

Добрый день,

  • Какая платформа?
  • Какая версия IDE используется?
  • Демо проект?
  • В каком месте вы создаете компоненты в рантайме?

Спасибо

Link to comment
Share on other sites

1. Android

2. 10.4

3. Демо проект практически нереально - очень много времени понадобится.

4. Создаются кнопки в обработчике OnShow

Link to comment
Share on other sites

  • Administrators
3 минуты назад, dervish00 сказал:

4. Создаются кнопки в обработчике OnShow

При каждом отображении формы вызывается ее обработчик OnShow. Собственно, если вы кнопки создаете в OnShow, то вы их создаете на каждого отображение формы. Что не верно. Их надо создать один раз, например в конструкторе или в событии OnCreate.

Link to comment
Share on other sites

  • Administrators

Хотя, я понял в чем дело. Посмотрим. Как минимум не должно быть вызова отображения формы при ее скрытии. Разберемся с этим. Но и создание компонентов в любом случае не надо делать в OnShow.

Link to comment
Share on other sites

Это фрейм. Он каждый раз уничтожается и показывается, когда необходим. Т.е. нет ситуации, когда он мог бы показываться без уничтожения. Я HideForm вызываю с опцией ReleaseControlOnFinish

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...