Jump to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Message added by Yaroslav Brovin,

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

  • Status: Fixed
  • Priority: Normal
  • Resolution: Fixed
  • Platform: Android
  • Affects version 1.11.0.0
  • Fix version: 1.11.1.0
Скрытый текст




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 - всё работает.

User Feedback

Recommended Comments

  • Administrators

Добрый день,

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

Спасибо

dervish00

Active subscription

1. Android

2. 10.4

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

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

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

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

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

  • Administrators

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

dervish00

Active subscription

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

  • Administrators

Значение Статус изменено на: Fixed

Значение Резолюция изменено на: Fixed

Значение Версия с исправлением изменено на: 1.11.1.0

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.