Перейти к содержанию
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. Update: в терминале Мака unzip -uo zipfile -d wantedDirectory Дает такой же эффект, что программное разархирирование. То есть не запускается приложение. Вообще без никаких уведомлений.
  18. Собственно зазипованый файл качается, разархивируется и все файлы помещаются в папку. Ну а дальше приложение не запускается, хотя: - Настройки безопасности настроены на установку из любых мест - Встроенный архиватор разархивирует в папку и "из-под" него приложение запускается (до настроек безопасности просто выдавало ошибку "неизвестный автор" и "у вас настроено только на аппстор или известных авторов"). - Разумеется при деплое приложения работают. Если их просто скопировать на флешку и потом закопировать обратно - тоже работают. Следовательно проблема при разархивировании программно. Что-то нужно добавить. Есть понимание что именно? Сам нетривиальный код: 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 В надобности последнего я сильно сомневаюсь.
  19. Ну я полагаю в этом как всегда всё дело. Только маркетинг, никаких багфиксов.
  20. Какие-то непопулярные у меня вопросы Разработчиков мобильных приложений на Файрманки и так немного, но чувствую чем дальше, тем их меньше, тк в инете практически нет никакой поддержки...
  21. Почему-то не возможно использовать константы цветов, заданные в TAlphaColorRec, TColorRec. Они есть, но при присвоении, например, TextSettings.Font.Color = TColorRec.cRed или TAlphaColorRec.Red ничего не происходит. Нужно явно задавать $FFFF0000. Если так у кого-то ещё, напишите. А если что-то можно с этим сделать - тоже
  22. Почему-то код, исправно работающий для 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?
×
×
  • Создать...