• VOsipov © (20.05.17 11:42) [0]
    Скажите, а в Delphi возможно создать НЕГЛЮЧНОЕ приложение для Android (посложнее, чем Hello World и демки)?

    У меня на ровном месте зависания, на ровном месте программа может просто закрыться (без сообщения Access Violation). Тот же самый код, скомпилированный под Windows, работает, как часы.

    Пользуюсь Delphi 10.1 (без апдейтов правда) и последней версией TMS FMX Pack.
  • Dimka Maslov © (20.05.17 12:05) [1]
    Я вот недавно изучал этот самый вопрос. И пришёл к выводу, что нет, нельзя. Последней каплей для меня стала невозможно просто так заменить цвет фона (одержимость "стилями" просто зашкаливает, как это сделать написано в блогах абсолютными придурками - читать пришлось раз десять, прежде чем смог понять), тем более, что после запуска под андроидом с трудом настроенный стиль  просто не нарисовался, а png картинка нарисовалась на белом фоне с рамочкой... После чего я решил-таки разбираться с джабой и андроид студио. Там тоже практически всё делается через одно место, но по крайней мере, написанное работает.
  • Игорь Шевченко © (20.05.17 20:37) [2]

    > Скажите, а в Delphi возможно создать НЕГЛЮЧНОЕ приложение
    > для Android (посложнее, чем Hello World и демки)?


    Возможно
  • Кто б сомневался © (20.05.17 22:15) [3]
    Можно, я этим занимаюсь, таких моментов как вы описали, замечал только на старых версиях Delphi (XE5).

    Delphi 10.1 update 2 (для Android это оптимальная версия)

    > У меня на ровном месте зависания, на ровном месте программа
    > может просто закрыться (без сообщения Access Violation).
    >  


    Прикрепите полный проект. Может вы там создаете кучу форм и визуальных компонентов и Android просто закрывает вашу программу из за нехватки ресурсов?


    > Последней каплей для меня стала невозможно просто так заменить
    > цвет фона (одержимость "стилями" просто зашкаливает,

    Ну так в стилях и меняйте его, в чем проблема. Можно же редактировать текущий стандартный стиль. Можно взять Premium стили - там есть интересные скины.
    Имхо стили гораздо удобнее чем тот Custom Draw что был раньше - сейчас свой вид сделать гораздо проще и быстрее чем в VCL , если конечно знать как это делать.

    http://fire-monkey.ru/
  • Кто б сомневался © (20.05.17 22:33) [4]

    > Dimka Maslov ©   (20.05.17 12:05) [1]


    Самый просто путь заменить цвет фона на любой цвет, градиент или текстуру без стилей - это кинуть TRectangle, изменить у него цвет, и на него уже кидать другие компоненты.
  • Dimka Maslov © (20.05.17 23:48) [5]

    > Ну так в стилях и меняйте его


    Мне не нужны были стили, мне нужен был цвет фона, который на телефоне не был нормально отображён.
  • Кто б сомневался © (21.05.17 00:32) [6]

    > а png картинка нарисовалась на белом фоне с рамочкой...


    Никогда таких проблем не замечал с PNG. Они всегда рисовались корректно с альфаканалом и прозрачностью.

    Вы TImage надеюсь использовали?
  • Dimka Maslov © (21.05.17 00:53) [7]
    Пытался использовать то, что у них в палитре - два компонента, оба не рисуют нормально png.
  • Кто б сомневался © (21.05.17 03:53) [8]
    Ну там несколько компонентов:

    TImage (оптимальный вариант, с ним никогда не было проблем)
    TimageControl
    TImageViewer
    TImage3D - для 3D форм.
    TGlyph
     
    Вообще я вам очень рекомендую поставить Delphi 10.1 Berlin update 2 для пробы.
    http://fire-monkey.ru/ вам в помощь, там много полезной инфы.
  • Dimka Maslov © (21.05.17 10:31) [9]
    Спасибо за совет. Но я уже попробовал и отказался, как учил некто С. Гаутама. Тем более, что мне нужна не кроссплатформенность, а нормальная работоспособность. Для этого есть андроед-студия (кстати, такое же поделие, выросшее в нормальную систему).
  • manaka © (21.05.17 11:44) [10]

    > VOsipov ©   (20.05.17 11:42) 
    > Скажите, а в Delphi возможно создать НЕГЛЮЧНОЕ приложение
    > для Android (посложнее, чем Hello World и демки)?


    Простая мысль в голову приходит - если таки существуют приложения, то их возможно написать, да? )))
  • Кто б сомневался © (21.05.17 19:55) [11]

    > Dimka Maslov ©   (21.05.17 10:31) [9]


    ну это сейчас вам не надо, а потом понадобится iOS и Mac.

    Тем более если вы собираетесь в будущем работать независимо, разрабатывая проекты с нуля, будет тяжело конкурировать с индусами, которых много и которые клепают Android приложения за копейки.
    Т.е. конкурировать с ними можно, за счет мултиплатформенного предложения, Android, iOS, Mac, Windows.
  • Dimka Maslov © (21.05.17 20:23) [12]
    Я не собираюсь конкурировать с индусами. Я не зарабатываю программированием. Мне для телефона нужна программа исключительно для собственных нужд.
  • Кто б сомневался © (22.05.17 08:26) [13]

    > Dimka Maslov ©   (21.05.17 20:23) [12]


    Тогда имхо быстрее было бы спросить некоторые ньюансы на форуме выше, чем изучать новую среду и язык.
  • Dimka Maslov © (22.05.17 10:50) [14]

    > изучать новую среду и язык
    даже интереснее
  • VOsipov © (22.05.17 10:54) [15]

    > Игорь Шевченко ©   (20.05.17 20:37) [2]
    >
    >
    > > Скажите, а в Delphi возможно создать НЕГЛЮЧНОЕ приложение
    > > для Android (посложнее, чем Hello World и демки)?
    >
    >
    > Возможно


    Вы на Delphi писали серьезные приложения (с десяткой форм) для Android?
    Можно пруф?
  • Игорь Шевченко © (22.05.17 11:27) [16]

    > Можно пруф?


    Это платная услуга
  • ухты © (22.05.17 11:29) [17]
    Много форм это пережиток.
  • VOsipov © (22.05.17 13:15) [18]

    > ухты ©   (22.05.17 11:29) [17]
    >
    > Много форм это пережиток.


    А какое решение для Android предлагаете? (кроме голословных утверждений)
  • VOsipov © (22.05.17 14:25) [19]
    У меня почему-то на небольших приложениях этот код работает (имитация модального окна):

    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_FireMonkey_Modal_Dialog_Boxes

    А в больших приложениях с кучей форм программа вылетает(
  • Кто б сомневался © (23.05.17 01:21) [20]

    > А в больших приложениях с кучей форм программа вылетает(


    Ну а причем тут Delphi?
    Это просто ваша криворукость. Android закрывает программы если недостаточно памяти или программа отжирает много. iOS еще строже в этом плане.
    Это не Windows с его бесконечным свопом. Нужно переучиваться кодить с десктоп стиля "а создам как я все сразу при старте", на мобильный где ресурсов мало.

    Формы нужно создавать тогда, когда они нужны, а затем уничтожать.
    У меня на проекте, над которым сейчас работаю уже 11 форм. И работает, даже на древнем Ice Cream 4.0.1 без тормозов.

    Никаких ограничений нет на кол. экранов\форм, просто их нужно в нужное время создавать, и затем по возможности уничтожать.

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

    Еще народ бывает понапихает в один ListBox Item всего разного (который на деле ScrollBar с визуальными компонентами), и создают потом по 100 Items и удивляются что ж тормозит то (для этого есть ListView с DynamicApearance ).
  • Кто б сомневался © (23.05.17 01:37) [21]
    И кстати имитировать модальное окно-диалог проще так (конечно он будет вызываться через Show, т.к. на Android все окна должны быть асинхронные):
    Прозрачная форма - transparent (+ установить цвет с альфаканалом), на нее TPanel - Align = VertCenter или Timage с png с альфаканалом или просто выставить Opacity, на нее Tlayout - HorzCenter, все что на Layout будет отцентрировано посередине экрана .

    Форма будет поверх других, причем полупрозрачно закрывая формы на заднем фоне.
    Я еще добавляю спецэффект - плавный переход от прозрачного к непрозрачному, слегка затемняя фон:

    frmDial.Fill.Color := TColorRec.Null;
    frmDial.Show;
    Application.ProcessMessages;
    TAnimator.AnimateColor(frmDial, 'Fill.Color', FADE_OUT_COLOR, 0.3);
  • Eraser © (23.05.17 02:13) [22]

    > Кто б сомневался ©

    как у знатока FMX спрашиваю, чем плох Tokio для андроид и в каких именно ситуациях плох? решаю тут, стоит ли переходить на новую версию или подождать с подпиской.
  • Кто б сомневался © (23.05.17 03:11) [23]
    Плох тем, что он там фактически не работает, а именно сильно тормозит и часть функционала потеряна - не работают эффекты, проблемы с анимацией, все порушилось.

    Раньше был основной Android GUI поток и Delphi main поток.
    Они решили перенести Delphi главный поток в Android поток, как в Delphi IOS кстати сделано, и недотестировали, и началась неуправляемая цепная багореакция, деления тяжёлых багов полученными при делении багов в предыдущем поколении, уход элементов за пределы объёма кода, поддерживающего цепной процесс, что приводит юзеров к энерговыделению в больших масштабах.
    Марко, одев защитный костюм из HL пообещал остановить экспоненциальную
    багореакцию, и где то там сейчас глубоко в жшахтах сражается с сущностями, порожденными этим ветвлящимся процессом. Лишь бы не дошло до критической массы, тогда процесс уже не остановить..

    https://forums.embarcadero.com/thread.jspa?threadID=248231&tstart=90
  • VOsipov © (23.05.17 09:01) [24]

    > Кто б сомневался ©   (23.05.17 01:21) [20]
    >
    >
    > > А в больших приложениях с кучей форм программа вылетает(
    >
    >
    > Ну а причем тут Delphi?
    > Это просто ваша криворукость. Android закрывает программы
    > если недостаточно памяти или программа отжирает много.


    Поосторожнее с оскорблениями. Формы не открыты все одновременно. Открыта главная, из нее вызывается ТОЛЬКО одна второстепенная форма, которая освобождается из памяти согласно примера из оф.справки
  • Дмитрий Белькевич © (23.05.17 10:32) [25]

    > Формы не открыты все одновременно.


    Не открыты или не созданы?
  • Кто б сомневался © (23.05.17 13:04) [26]

    > VOsipov ©   (23.05.17 09:01) [24]


    Это не оскорбление, это дружеский стеб. :)

    Зайдите в
    Project > View Source и посмотрите какие формы создаются.

    Должна создаваться одна главная форма, и если есть DataModule, на котором лежат общие стили и ImageList .

    Например:

    begin
     GlobalUseGPUCanvas := true;
     Application.Initialize;
     gCore := TCore.Create;
     Application.CreateForm(TDataMod, gDataMod);
     if gCore.Settings.HasSetupInfo then
       Application.CreateForm(TfrmMain, frmMain)
     else
       Application.CreateForm(TfrmSetup, frmSetup);

     Application.Run;
     gCore.Free;
    end.
  • Кто б сомневался © (23.05.17 13:13) [27]
    Чтобы создать форму, а затем уничтожить, нужно создавать ее без указание владельца (т.к. ARC).

    frmForm := TMyForm.Create(nil);

    А вот с уничтожением тут все хитро, но можно использовать Release (не Free!).
    Но лучше и проще всего сделать так - событие формы OnClose и там:

    procedure TfrmEmrgNums.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     Action := TCloseAction.caFree;
     frmEmrgNums := nil;
    end;


    А форму уничтожать просто вызвав Close.

    А создаю я формы делая class метод для каждой.

    class procedure TfrmMy.ShowMyForm;
    begin
     if frmMy = nil then
       frmMy := TfrmMy.Create(nil);

     frmMy .Show;
    end;


    Соответственно из главной формы просто вызываем одной строчкой
    TfrmMy.ShowMyForm.
  • Кто б сомневался © (23.05.17 13:16) [28]

    > class метод


    Да, тогда это называется class процедура, а не метод. Т.к. у метода есть скрытая переменная Self.
  • VOsipov © (23.05.17 14:32) [29]

    > Кто б сомневался ©


    Формы создаются не автоматически (перекидываю их в правую колонку в Project Options).

    Пользуюсь примерами из официальной справки:
    http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Using_FireMonkey_Modal_Dialog_Boxes

    Там ни слова про Release.
    А что это за строчка:
    frmEmrgNums := nil  ?
  • Eraser © (23.05.17 16:21) [30]

    > Кто б сомневался ©   (23.05.17 03:11) [23]

    ия разработчиков, точнее, практически полное ее отсутствие, в т.ч. в QA. буду ждать хотфикс или апдейт, посмотрим.
  • Eraser © (23.05.17 16:21) [31]

    > Eraser ©   (23.05.17 16:21) [30]
    >
    > > Кто б сомневался ©   (23.05.17 03:11) [23]
    >
    > ия разработчиков, точнее, практически полное ее отсутствие

    удивляет реакция разработчиков, точнее, практически полное ее отсутствие
  • Кто б сомневался © (23.05.17 21:54) [32]
    VOsipov ©   (23.05.17 14:32) [29]

    frmEmrgNums := nil  ?

    Обнуляет переменную формы. Чтоб, если случайно к ней обратятся, сработало исключение, и сразу было видно что формы нет. По идее в ARC она должна сама обнулятся, но для универсального кода (для Mac и Windows) лучше обнулять ее.

    Release - это еще с VCL метод отложенного уничтожения формы или фрейма или контрола. Она уничтожается не сразу, а через время, когда выйдут из ее методов. Т.е можно вызвать Release прямо в методах (напр. в OnClick ) уничтожаемой формы\фрейма.
    Чтобы точно знать уничтожается форма или нет, надо ставить точку останова на Form OnDestroy.


    > Eraser ©   (23.05.17 16:21) [31]


    Реакция есть, но они в основном пишут в багтрекере, конкретно Марко Кэнту. Он говорит что активно работают над багом, пытаясь оставить изменения.
  • Eraser © (23.05.17 22:33) [33]

    > Кто б сомневался ©   (23.05.17 21:54) [32]


    > Реакция есть, но они в основном пишут в багтрекере, конкретно
    > Марко Кэнту. Он говорит что активно работают над багом,
    > пытаясь оставить изменения.

    я читал. через месяц после его обещаний выпустили хотфикс, в котором, судя по всему, проблему не устранили.
  • Кто б сомневался © (23.05.17 22:43) [34]

    > Eraser ©   (23.05.17 22:33) [33]


    Просто баг сложный, на этом потоке основана вся инфраструктура логики GUI программы и это также системный Android поток программы.
    К примеру спец. оконные флаги устанавливаются только через Android поток, через спец. обертку, соответственно нужно перелопатить кучу кода и проверить его.
    Плюс еще Android компилятор медленный, плюс возможно на некоторых устройствах может по другому работать, так что им там весело.
  • Кто б сомневался © (23.05.17 23:39) [35]
    Кто б сомневался ©   (23.05.17 01:37) [21]

    Я ошибся, нужно у обоих компонентов выставить - Align = VertCenter.
    Не надо там HorzCenter,
  • Eraser © (26.06.17 22:57) [36]
    RAD Studio 10.2 Patch for Android Released

    FireMonkey Android Compatibility Patch for RAD Studio 10.2 Tokyo
    This patch addresses critical Android issues in Delphi, C++Builder and RAD Studio 10.2 around text input for newer versions of Android (issues that were already present in Berlin), control rendering and performance regressions (issues introduced in Tokyo).

    https://cc.embarcadero.com/item/30781
  • Кто б сомневался © (27.06.17 00:45) [37]
    Вот здесь основные комменты по поводу этого бага и по поводу патча..

    https://quality.embarcadero.com/browse/RSP-17162

    Патч решает часть проблем, остальная часть осталась
  • Eraser © (27.06.17 15:32) [38]
    остается только ждать update 1.
Есть новые Нет новых   [118243   +31][b:0.001][p:0.001]