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

SVTX

Пользователи
  • Постов

    86
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Сообщения, опубликованные SVTX

  1. Уважаемые эксперты, столкнулся с неприятным мерцанием форм на показе и деактивации после перехода на Александрию 11.

    Раньше такого не было.

    Сейчас создал пустой тестовый проект чтобы проверить.

    procedure TForm1.Button1Click(Sender: TObject);
    var
       AForm: TForm1;
    begin
      AForm := TForm1.Create(nil);
      AForm.Show; //мерцание тут
     OR  
     AForm.ShowModal(procedure(ModalResult: TModalResult) //мерцание тут
     begin
       //AForm.Free;
     end);
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
     ModalResult := mrOk; //мерцание тут
     OR  
     Hide; //мерцание тут
     Close;
    end;

    Формы пустые, пробовал разные заливки и что угодно.

    Оно мерцает и все! 
    А на рабочем проекте просто показывается рабочий стол на полсекунды при любом показе/закрытии новой формы.

    Подскажите куда копать, не форумах не могу найти ничего.

     

  2. 7 минут назад, Slym сказал:

    type
    TOpenForm=class(TForm) end;

    TOpenForm(FForm).ReleaseForm;

    Ты так никогда не делал?
    До protectedов регулярно так делаю

     

    Забывается если не используешь регулярно.

    Спасибо, уже получилось. Пробую.

  3. 1 минуту назад, Slym сказал:

    не надо глобальные переменные... делай локальные 

    var FFrom := TFrom.Create(nil);

    Я и так и так пробовал. Один корень. 

    Поэтому пока решил что найду правильное решение и потом буду переводить на правильный код.

    FFrom.Release также генерит ошибку.

    Такое ощущение что чтото "держит" форму даже после завершения ForceQueue.

  4. Я пробовал даже такой изврат, оно иногда работает, иногда нет, я так понимаю я упускаю чтото концептуальное и делаю неправильно.

    FFrom := TFrom.Create(nil);
      TThread.ForceQueue(nil, procedure
      begin
        FFrom.ShowModal(procedure(Res: TModalResult)
        begin
          //FreeForm(FFrom); //--> и тут получаем кучу ошибок - как правило на Form.Hide почемуто
          TThread.ForceQueue(nil, procedure
          begin
            FForm.Free;
          end, 100);
        end);
      end);
  5. Slym спасибо что откликнулись

    На IOS а конкретно iPhone 12/13 изменилась архитектура и появился баг с ShowModal.

    Описано в тикете https://quality.embarcadero.com/browse/RSP-36095

    И там описан обходной путь именно как я написал.

    Он работает, но если очищать форму все ломается. А если не чистить приложение падает через 20 новых созданных форм.

     

  6. Добрый день уважаемые эксперты.

    Помогите разобраться с функцией TThread.ForceQueue

    Пришлось внедрить ее как костыль в IOS для показа модальных форм, и получаем кучу ошибок на очистке памяти.

    Подскажите кто и как правильно ее использует в работе.

    Ниже рабочий код который гарантированно приведет к ошибке и у нас таких более 100 мест в проекте.

    FFrom := TFrom.Create(nil);
      TThread.ForceQueue(nil, procedure
      begin
        FFrom.ShowModal(procedure(Res: TModalResult)
        begin
          FreeForm(FFrom); //--> и тут получаем кучу ошибок - как правило на Form.Hide почемуто
        end);
      end);
  7. В 18.12.2017 в 06:46, kami сказал:

    Поправка: RemoveQueuedEvents  вызывается само в деструкторе TThread.

    Если важно, чтобы все синхронизируемые события отработали - при уничтожении TThread в главном потоке нужно вызывать System.Classes.CheckSynchronize(0) до того момента, как оно вернет False.

    Уважаемый Kami очень прошу помощи. Внедрили в IOS  костыль TThread.ForceQueue для ShowModal и получили кучу ошибок как Вы и пишете.

    Так как Вы явно понимаете суть работы, посмотрите что можно сделать и подскажите.

    Итак что мы делаем почти везде 

    Надо создать динамически форму, сделать ей ShowModal (для этого используем в IOS TThread.ForceQueue) и освободить форму после завершения.

    Примерно так.

    FFrom := TFrom.Create(nil);
    
      TThread.ForceQueue(nil, procedure
      begin
        FFrom .ShowModal(procedure(Res: TModalResult)
        begin
          FreeForm(FFrom); //--> и тут получаем кучу ошибок - как правило на Form.Hide почемуто
        end);
      end);

    Подскажите как с этим борются правильно. Спасибо.

     

  8. Добрый день.

    На Windows 10 FMX.TWebBrowser не получается запустить в режиме Edge. (из Samples)

    Что сделано

    1) Установлен сам Edge (устанавливал из репозитория Windows)

    2) Скачаны dll и положены рядом с exe.

    3) Внесены изменения в реестр в ветку FEATURE_BROWSER_EMULATION

    4) Проверена работа  VCL.TEdgeBrowser - все работает.

    5) TWebBrowser в режиме edge не выдает никаких ошибок, просто пустое пространство на месте где должен быть браузен.

    Подскажите что делаю не так, чтото упускаю из виду. Либо как запустить VCL.TEdgeBrowser на FMX.

    Благодарю.

  9. При запуске многолетнего работающего приложения на новой IOS 15 (IPhone 12/13) полетели все формы.

    Падает ShowModal форм.

    Была найдена причина - на IOS 15 используются асинхронные методы.

    Детально описано тут 

    https://en.delphipraxis.net/topic/5762-showmodal-hangcrashes-on-ios-15-with-iphone-12-13/

    Созданы тикет https://quality.embarcadero.com/browse/RSP-36095

     

    Вопрос к нашим экспертам, возможно ктото уже нашел решение как обойти данный баг, прошу помощи и совета так как самого устройства с IOS 15 нет (брали на прокат чтобы поймать баг), а приложение уже ставят на новые девайсы и получают неприятное неработающее приложение.

  10. Ребят всем кто помогал советами больше спасибо!.

    Удалось все запустить.

    Итак все проблемы миграции с Delphi 10.3.4 были от 4-x источников.

    Решение первых двух описано в теме https://en.delphipraxis.net/topic/5627-d11-android-new-app-billing-service/

    А именно

    1) Обязательно добавить в манифест 2 строки

               

    В блоке meta-data 
    <meta-data
                    android:name="com.google.android.play.billingclient.version"
                    android:value="4.0.0" />  
    и в конце после </activity>
    <activity android:name="com.android.billingclient.api.ProxyBillingActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" />		

    2) Включить  BILLING permission в настройках приложения.

    3) Далее (не уверен что обязательно) но все источники крайне рекомендуют.

     - залить на Google Store Alpha или Beta или Рабочую версию. (версия для внутреннего тестирования не подходит) и подождать от 2 часов до суток.

    4) И самое важное кто мигрирует с Delphi 10.3.4. В старой версии был баг, когда QueryProducts нужно было вызывать извращенным способом, а проверку 

    IsProductPurchased нужно было проводить в таймере. В Delphi 11 все это пофиксили, и нужно переписать код по канону.

      - а) вызываем SetupInAppPurchase

      - б) в событии InAppPurchaseSetupComplete вызываем QueryProducts

      - в) в любом месте проверяем IsSetupComplete=true and CanMakeInAppPurchases=true и вызываем PurchaseProduct

       - г) кто менял в файле файл Helpers.pas тип переменной для таймера TinAppPurchased - нужно удалить из проекта измененный файл.

    Вуаля, все работает.

    Пользователю Maka респект за советы.

  11. Maka это обнадеживает.

    У меня работает 

    а) SetupInAppPurchase

    б) QueryProducts

    в) IsSetupComplete = True

    г) CanMakeInAppPurchases = True 

    Падает PurchaseProduct.

    Не затруднит Вам посмотреть код где Вы вызываете PurchaseProduct?

    Может там какаято инициализация предварительная нужна.

    Хз уже куда копать, начал писать покупку на нативной жаве (чтобы проверить), но если у Вас работает, то должно работать у всех.

  12. Всем добрый день.

    Таже проблема.

    После перехода на 11 версию покупки перестали работать.

    а) добавил в манифест  android:name="com.google.android.play.billingclient.version"

    б) убрал из манифеста BILLING permission (если оставить тоже не работает)

    в) переопубликовал Альфа версию в Google Play 

    И ничего.

    Покупки которые раньше работали не работают.

    "service connection is disconnected".

    В мануале embarcadero только Sydney.

    Куда копать, кто подскажет??

  13. Друзья нужна подсказка куда копать.

     В старом проекте файл classes.dex создавался по канону, делалось merge с classes.dex из поставки и через Deployment заливалось на устройство.

    Сейчас все теже действия перестали работать. 

    Вопросы

    - как создавать новый файл classes.dex   (какой использовать компилятор, новый D8 или старый DX)

    - нужно ли делать Merge с файлом из папки папки Android\Debug\Project1.classes\

    - есть ли какойто иной путь?

     

    Спасибо все кто откликнется

  14. В 18.01.2016 в 10:59, Rusland сказал:

    fsdb, вот в этой статьей довольно подробно описано как этой сделать... писать на java ничего особенного не придется.

     

     

     

    ToAll: Видел на stackoverflow писали что можно не заменять classes.dex, а создать новый dex и прикрепить его к проекту. Что изменить в bat-файле чтобы это сделать?

    Коллега можете скинуть ссылку на stackoverflow с этой статьей?

  15. В 13.10.2021 в 14:28, Евгений Деревянкин сказал:

    все нормально, classes.dex собрал, файл классов использовал из папки Android\Debug\Project1.classes\, пока полет нормальный

    https://docwiki.embarcadero.com/RADStudio/Sydney/en/Creating_and_Deploying_a_classes.dex_File_Manually

    извиняюсь в deployment файл классов также подключен как и раньше, отображение прозрачное какое то и я его не заметил

    Коллега прошу подсказки.

    Вы создали classes.dex и смерджили его с Android\Debug\Project1.classes\ верно? А потом подключили его как и раньше через deployment classes.dex?

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