gonzales
-
Постов
334 -
Зарегистрирован
-
Посещение
-
Победитель дней
27
Активность репутации
-
gonzales получил реакцию от #WAMACO в Переезд на 10.3 Rio
Чего Вы привязались к прогрессбару, это никак не связано с потоками, я просто уточнял, нужно ли обращаться к форме, созданной в потоке через синхронизацию.
Прочитайте посты выше, вроде как уже больше недели это обсуждаем.
У вас очень странное представление о UI. Вы правда считаете, что я демонстрирую пользователю одновременно Сплэш, две формы, и повергающий его в экстаз прогрессбар??
-
gonzales получил реакцию от Ingalime в Как отловить нажатие на кнопку "Домой" на android
Тоже столкнулся с необходимостью запретить пользователю нажимать на кнопку Домой. Нашел достаточно простое решение (для себя), заставить приложение быть Лаунчером, при этом доступна шторка и кнопка включения. Но основные фишки работают: после перезагрузки автоматически стартует моя программа, она не висит в списке задач, ее нельзя выгрузить, не работает кнопка Домой.
Суть в изменении манифеста. В файле AndroidManifest.template.xml находим строки
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> И добавляем
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> Пересобираем приложение, запускаем. На 6-ом Андроиде при нажатии на кнопку Домой система предложит выбрать Лаунчер, выбираем нашу программу и нажимаем Всегда. Чтобы изменить, через шторку входим в настройки - выбор системного интерфейса. На 8-ом Андроиде также через настройки принудительно выставляем лаунчер на нашу программу.
-
gonzales получил реакцию от Евгений Корепов в Переезд на 10.3 Rio
Спасибо!
До меня начало доходить, нужно полностью отойти от метода программирования, когда в коде основной формы пишутся все процедуры и функции, все выносить в отдельные юниты, в которых в потоках (потоке) обрабатывается вся логика и лишь через синхронизацию выдает информацию в главный поток. А главный поток по сути свободен, занят лишь перерисовкой форм и получением событий мыши.
-
gonzales отреагировална krapotkin в Переезд на 10.3 Rio
научили конечно ))) все придумано до нас
вот статья
вот так в грубом приближении должно это быть
p.s. Забыл удалить из ваших форм эти циклы, которых там быть не должно
Форма - это интерфейс взаимодействия с пользователем. Данные должны жить отдельно.
test10.3.zip
-
gonzales получил реакцию от Ingalime в Переезд на 10.3 Rio
Прошу прощения за долгое отсутствие
Вот накидал простой исходникtest10.3.zip. В проекте 3 формы, первой создается SplashForm. Остальные формы имеют в OnCreate высоконагруженные вычисления, поэтому после каждого создания формы отображаю на SplashForm статус формы. Дабы все это отрисовывалось использую Application.processmessages.
-
gonzales отреагировална IVGSoft в обновление визуальных компонентов
По умолчанию - да. Но можно указать флаг Suspended при создании. Тогда метод Execute будет запущен после снятия єтого флага.
Синхронизация нужна при обращении к визуальным компонентам. И то только при обновлении (перерисовке) их свойств. Для чтения не надо.
Да, именно так. Если есть изменения визуальных компонентов - надо использовать синхронизацию.
-
gonzales получил реакцию от Alex Bozhko в Переезд на 10.3 Rio
Есть подозрение, что в 10.3. перестала работать функция Application.ProcessMessages. В 10.1 для Андроид она прекрасно работала, а теперь, как будто ее нет. Формы не перерисовываются, вовремя не отображаются те или иные вещи. На что можно заменить ее. Пример такой, создаю форму в рантайме и показываю ее пользователю.
Application.CreateForm(TForm27, Form27); Form27.ProgressBar1.Visible := false; Form27.StartUpLabel.Text := 'Ждите...'; Form27.Visible := true; Application.ProcessMessages; На андроид в 10.3. форму не вижу, хотя остальной код отрабатывает.
-
gonzales получил реакцию от Barbanel в Рабочая комбинация программ для публикации в AppStore
Продолжаем разговор...
Вчера радостные мужеложцы из Apple повизгивая сообщили, что с марта 2019 перестают принимать приложения с SDK ниже 12.1. Ну, думаю, какие проблемы, скачал новый пакет SDK, запускаю, получаю file not found: /usr/lib/system/libcache.dylib for architecture arm64
Гугления и педалирования темы показали, что проблема была пофиксена каким-то там хотфиксом к 10.2.
Но проблема в том, что пока не могу использовать ни 10.2, ни 10.3, в силу того, что под новые стандарты придется переписать половину кода. А выложить новую версию необходимо.
Проблема решилась достаточно просто, вдруг кому пригодится. Фокус в том, что SDK для всех версий Delphi хранятся в одном месте. Соответственно сначала скачал SDK для 10.1, а затем тоже самое для 10.3. Делфа спросила, заменять ли ей файлы, соглашаемся. После чего все компилируется на ура с SDK 12.1.
-
gonzales получил реакцию от Ingalime в PUSH и Android8
Нашел причину, в API 26 формирование уведомления строится по другому. https://startandroid.ru/ru/uroki/vse-uroki-spiskom/515-urok-190-notifications-kanaly.html
Перевел приложение на API 25 и все заработало как надо.
Подозреваю, что для работы пушей в API 26 нужно обновить саму делфу. (у меня сейчас берлин)
-
gonzales получил реакцию от #WAMACO в Рабочая комбинация программ для публикации в AppStore
Такой же рецепт для XCode 10.1, который работает в MacOS Mojave (10.14)
-
gonzales получил реакцию от Anatoliy в Рабочая комбинация программ для публикации в AppStore
В связи с требованием Apple выкладывать в AppStore программы с SDK не ниже 11.0 опять возникла необходимость использовать XCode выше 8.2.
По итогу все срослось, конфигурация такая
Delphi 10.1 Up2
Xcode 9.2
SDK 11.2
Для того, чтобы все компилилось необходимо сделать две вещи.
1. В SDK добавить FileProvider
2. В XCode добавить PackageApplication (https://stackoverflow.com/questions/43068608/xcrun-error-unable-to-find-utility-packageapplication-not-a-developer-tool)
-
gonzales получил реакцию от Anatoliy в Сортировка элементов Скроллбокса
Решил вот так, если вдруг кому надо
procedure TForm1.SortGroup; var i, j: integer; elementscount: byte; begin elementscount := Form1.RoomsScrollBox.Content.Children.Count; for i := 1 to elementscount do for j := 0 to elementscount - 1 do begin if (Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).SortIndex = i then begin (Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).Position.Y := 10000; break; end; end; end; соответственно элементы с самым низким индексом будут наверху. Единственное ограничение, что индексы элементов должны быть подряд, без пропусков. Это не очень удобно, надо будет переделать
-
gonzales получил реакцию от Alisson R Oliveira в Сортировка элементов Скроллбокса
Решил вот так, если вдруг кому надо
procedure TForm1.SortGroup; var i, j: integer; elementscount: byte; begin elementscount := Form1.RoomsScrollBox.Content.Children.Count; for i := 1 to elementscount do for j := 0 to elementscount - 1 do begin if (Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).SortIndex = i then begin (Form1.RoomsScrollBox.Content.Children.Items[j] as TEssence).Position.Y := 10000; break; end; end; end; соответственно элементы с самым низким индексом будут наверху. Единственное ограничение, что индексы элементов должны быть подряд, без пропусков. Это не очень удобно, надо будет переделать
-
gonzales получил реакцию от Anatoliy в Пуши в IOS
Так а в чем конкретно проблема?
В коде есть OnReceiveNotificationEvent - вызывается когда придет пуш. Соответственно вместо ShowMessage(aText); пишите вызов новой формы. Если она уже создана, то просто FormB.visible:=true;, если не создана, то вызов конструктора, (примерно так FormB:=TForm.Create;, соответственно конструктор должен быть описан)
-
gonzales получил реакцию от Ingalime в Пуши в IOS
Так а в чем конкретно проблема?
В коде есть OnReceiveNotificationEvent - вызывается когда придет пуш. Соответственно вместо ShowMessage(aText); пишите вызов новой формы. Если она уже создана, то просто FormB.visible:=true;, если не создана, то вызов конструктора, (примерно так FormB:=TForm.Create;, соответственно конструктор должен быть описан)
-
gonzales получил реакцию от Kitty в Пуши в IOS
Все правильно, так и работает. При публикации в аппсторе sandbox (песочница) надо снять
-
gonzales получил реакцию от Равиль Зарипов (ZuBy) в Пуши в IOS
Все правильно, так и работает. При публикации в аппсторе sandbox (песочница) надо снять
-
gonzales получил реакцию от Anatoliy в Пуши в IOS
Все правильно, так и работает. При публикации в аппсторе sandbox (песочница) надо снять
-
gonzales получил реакцию от Rusland в Пуши в IOS
Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
-
gonzales получил реакцию от Kitty в Пуши в IOS
Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
-
gonzales получил реакцию от #WAMACO в Пуши в IOS
Еще доп. накину на вентилятор, вдруг кому пригодится. Чтобы в iOS появилась наклейка с цифрой на иконке программы нужно добавить в JSON запроса пуша в объект notification пару badge=цифра
-
gonzales отреагировална kami в Как убить кнопку кликнув на нее саму
Зачем вообще указывать имя компоненту, создаваемому в runtime? Они прекрасно живут и без этого, а для идентификации конкретного - есть куча свойств TagXXX
-
gonzales получил реакцию от MAD_EVAL в Вылетает приложение для Андроид
Сам нашел!!!
program Project1; uses //System.StartUpCopy, FMX.Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. закоментировал модуль System.StartupCopy и все заработало. Странно, попробывал на других, полноценных приложениях, тоже все завелось. Зачем вообще этот модуль нужен?????
-
gonzales получил реакцию от UFatueks в У меня перестает работать фокус после смены фокуса с TWebBrowser на TEdit
Доброе время суток!
Среда: RAD Studio Delphi XE5 Устройство: Android 4.0.4, HTC Incredible S Столкнулся со следующей проблемой, необходимо использовать браузер для аутентификации пользователя. Как Вы наверное знаете, компонент TWebBrowser не имеет фокуса ввода, то есть виртуальная клавиатура не отображается при клике на поле ввода в браузере. лечится такая фигня строками кода
webbrowser1.canfocus := true; webbrowser1.SetFocus; НО!!!
оказывается после таких строк фокус ввода не переходит на обычные поля вводя, типа TEdit. Даже строки
edit6.canfocus := true; edit6.SetFocus; не помогают.
Что делать???
Да, забыл сказать, что прога под Андроид
-
gonzales получил реакцию от UFatueks в WebBrowser и фокус ввода
Начало вопроса http://fire-monkey.ru/topic/193-u-menia-perestaet-rabotat-fokus-posle-smeny-fok/
В XE6 WebBrowser действительно работал правильно, с выходом апдейта опять начались проблемы, имеется тело Samsung Galaxy S3, при вызове клавиатуры в WebBrowser не отображаются вводимые буквы в поле ввода браузера. С телом HTC Incredible S работает правильно.
Вот такая незадача, придется видимо откатываться обратно на XE6