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.

Featured Replies

Скрытый текст



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

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

1. Android

2. 10.4

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

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

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

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

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

  • Administrators

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

  • Author

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

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.