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

notricky

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

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

  • Посещение

Весь контент notricky

  1. Я честно не понял. Ведь даже в нативном коде такой вызов является правильным решением. Разве CallInUIThread не выполняет код внтури основного (всмысле интерфейсного) потока? И второй вопрос - пишут, что до ХЕ7 нужно было выполнять в таймере CheckSync чтобы прокачивать очередь. Начиная с ХЕ7 пишут что пофиксен баг. Получается что SendMessage из рабочего потока в окна, созданные главным потоком должны правильно обрабатываться. Или тоже есть какие-то интересные особенности?
  2. Буду признателен, если кто-то что-то по этому поводу скажет.
  3. Нет, похоже и этот метод какой-то багонутый. Последовательность внутри потока {$IFDEF ANDROID} CallInUIThreadAndWaitFinishing(ShowOverlay); Sleep(1000); CallInUIThreadAndWaitFinishing(ShowForm); Sleep(1000); CallInUIThreadAndWaitFinishing(HideOverlay); {$ELSE} не всегда заканчивается тем, что HideOverlay реально хайдит оверлейную форму. То есть да, в метод хайда заходит (анимация останавливается), но непосредственно сам хайд окна заканчивается одним из трех вариантов, при том рандомно: Анимация заморожена, окно висит Окно скрыто, видны какие-то артефакты Окно скрыто штатно Ни в варианте прямого вызова Overlay.Hide Ни в варианте TMessageSender.SendMessage(). Интересно вообще в чем именно заключается баг. Баг ли это или это нормальная работа Андроида...
  4. Если кто зайдёт настолько далеко, то решение кроется в FMX.Helpers.Android: CallInUIThreadAndWaitFinishing {$IFDEF} в нужных местах делает своё дело. Не смотрел внутрь компонентов FGX, может быть там сделано кросплатформеннее?
  5. А у него таких проблем с отрисовкой/показом нет/решены? А стилизацию/настройку цветов, прозрачности имеет?
  6. Посмотрел. Этокак я понял компонент и его надо класть на каждую форму. У меня другая задача - форму-бизибокс сделать. Но за хинт спасибо.
  7. Да, в комментах на Stackoverflow выяснили это с Remy Lebeau. Решение - IFDEF-ить для андроида моменты синхронизации интерфейса через FMX.Platform.Android.TPlatformAndroid Пока не проверял, но looking forward to Если кто попробует и отпишется, будет классно всем на будущее. fgx ActivityDialog Не сочтите за наглость, O-kami :), но если вкратце, то это про что?
  8. На Android код, который работает исправно на Win вызывает ошибку "CalledFromWrongThreadException: Only the original thread that created a view hierarcy can touch its views" Смысл таков, что я пытаюсь показать форму из треда, у которой BorderStyle=none (роли это не играет). Решение в Андроиде заключается в том, чтобы пускать через runOnUiThread (то есть выполнять интерфейсные штуки в главном потоке). Как я понимаю, в firemonkey эту фичу должен выполнять Synchronize(). Тем не менее, ошибка возникает. А при запуске в режиме дебага на андроид девайсе событие кнопки вообще не срабатывает иногда. А если срабатывает, то возникает описанное выше исключение. Я собрал тестовый пример и в нем не сразу видна ошибка, тогда как получил я ее на рабочем проекте. Цель: показать бизибокс на время бекграундных действий. Этот бизибокс у меня сначала был просто на каждой форме и я интерфейсно его вызывал, но теперь решил сделать отедльной формой (как и тоаст), но почему так происходит я не понял. Вы что скажете? unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TWorkThread = class(TThread) public procedure Execute; override; end; var Form1: TForm1; implementation {$R *.fmx} uses unit2; procedure TForm1.Button1Click(Sender: TObject); var t: TWorkThread; begin t := TWorkThread.Create(True); t.FreeOnTerminate := true; t.Start; end; { TWorkThread } procedure TWorkThread.Execute; begin inherited; Self.Synchronize(procedure begin Form2.Show; Form2.Top := Form1.Top; Form2.Left := Form1.Left; Form2.BringToFront; end); Terminate; end; end.
  9. Модуль? Какой модуль? О чем речь? Функцию и пару строк кода в программе если можно назвать модулем то да, это он.
  10. Обновление он-лайн. На винде и андроиде (не через стор) работает. На маке вот пока нет. Нужно скачать и обновить. Ну или если не получается, то может как то пользователю открыть файндер и указать на файл. Не понятно совсем почему штатный unzip через консоль не справляется.
  11. Ладно, я явно этого не указал, а ты мысли читать не умеешь, потому вопрос справедлив. Сорри. Я архив создаю в Винде. 7Zip. Если разархивирую в маке дважды кликнув - запускается. Если разархивирую в маке unzip в консоли - не запускается. Если разархивирую своим приложением - не запускается.
  12. Ооох.... Ну что за вопросы... 1) да 2) да 3) какая разница. формат zip.
  13. Я же писал, что даже при использовании консольного unzip РУКАМИ ПРЯМО В МАКЕ, ситуация такая же. Дело вообще рядом не лежит про "место запуска самой программы".
  14. А какая именно разница между разархивацией внутри своей проги и разархивацией встроенными осью средствами? И как это повторить?
  15. В принципе можно и консольную команду выполнить. По сути мне без разницы, хотя конечно было бы круто, если бы это работало через апп. Но вот только консольный unzip не работает тоже.
  16. Про андроид не забыл?
  17. Спасибо, Кэп. Я это наблюдаю в опыте. Описал ты все верно. Лучше расскажи, почему "не получится"?
  18. Update: в терминале Мака unzip -uo zipfile -d wantedDirectory Дает такой же эффект, что программное разархирирование. То есть не запускается приложение. Вообще без никаких уведомлений.
  19. Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку. Ну а дальше приложение не запускается, хотя: - Настройки безопасности настроены на установку из любых мест - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов"). - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают. Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? Сам нетривиальный код: var z: TZipFile; begin try {$IFDEF MSWINDOWS} RenameFile(ParamStr(0),ExtractFileName(ParamStr(0)) + '.old'); Application.ProcessMessages; {$ENDIF} SetLength(Result, 1); Result[0] := ''; z := TZipFile.Create; z.Open(ZipFile, zmRead); z.ExtractAll(ExtractTo); Result := z.FileNames; finally z.Close; z.Free; end; end; В архив кладу: - .app взятый с мака (а по другому никак) - .entitlements - .DS_Store В надобности последнего я сильно сомневаюсь.
  20. Ну я полагаю в этом как всегда всё дело. Только маркетинг, никаких багфиксов.
  21. А версия у вас какая дельфи?
  22. Какие-то непопулярные у меня вопросы Разработчиков мобильных приложений на Файрманки и так немного, но чувствую чем дальше, тем их меньше, тк в инете практически нет никакой поддержки...
  23. Почему-то не возможно использовать константы цветов, заданные в TAlphaColorRec, TColorRec. Они есть, но при присвоении, например, TextSettings.Font.Color = TColorRec.cRed или TAlphaColorRec.Red ничего не происходит. Нужно явно задавать $FFFF0000. Если так у кого-то ещё, напишите. А если что-то можно с этим сделать - тоже
  24. Почему-то код, исправно работающий для WIN, не работает на ANDROID. procedure AssignEventToComponent(C: TComponent; MethodName: String; const Evt: TNotifyEvent; OnlyIfNil: boolean = true); var M: TMethod; begin M := GetMethodProp(C,MethodName); if not OnlyIfNil or (M.Code = nil) then begin TNotifyEvent(M) := Evt; SetMethodProp(C,MethodName,M); end; end; Есть какие-то особенности работы TMethod для ANDROID?
  25. сюда никто не заходит или просто нет идей?
×
×
  • Создать...