Tumaso
-
Постов
331 -
Зарегистрирован
-
Посещение
-
Победитель дней
39
Активность репутации
-
Tumaso получил реакцию от Sergionn в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.
А потестировать её как нибудь можно на своих аппаратах?
-
Tumaso получил реакцию от HyperZen в Это приложение было создано для более ранней версии Android
1. Проверь AndroidManifest.template.xml, параметры minSdkVersion и targetSdkVersion
2. Перекомпилируй в Rio (предварительно сделав Revert System Files to Default у узла Target Platforms->Android->Libraries)
-
Tumaso получил реакцию от HyperZen в Это приложение было создано для более ранней версии Android
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> - так по умолчанию указано в AndroidManifest.template.xml в корне проекта, но при редактировании вручную вместо переменных можно указать конкретные значения. Если собирать с помощью Rio, то minSdkVersion = 19, targetSdkVersion = 28.
<uses-sdk android:minSdkVersion="конкретное значение" android:targetSdkVersion="конкретное значение" /> - так указано в AndroidManifest.xml после компиляции, на них и реагирует ОС при попытке запуска приложения. Если там указано использование старых sdk, тогда андроид и ругается.
Решение простое - перекомпилите в Rio и проблема уйдет.
-
Tumaso получил реакцию от Ingalime в Это приложение было создано для более ранней версии Android
<uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> - так по умолчанию указано в AndroidManifest.template.xml в корне проекта, но при редактировании вручную вместо переменных можно указать конкретные значения. Если собирать с помощью Rio, то minSdkVersion = 19, targetSdkVersion = 28.
<uses-sdk android:minSdkVersion="конкретное значение" android:targetSdkVersion="конкретное значение" /> - так указано в AndroidManifest.xml после компиляции, на них и реагирует ОС при попытке запуска приложения. Если там указано использование старых sdk, тогда андроид и ругается.
Решение простое - перекомпилите в Rio и проблема уйдет.
-
Tumaso получил реакцию от Евгений Корепов в Это приложение было создано для более ранней версии Android
1. Проверь AndroidManifest.template.xml, параметры minSdkVersion и targetSdkVersion
2. Перекомпилируй в Rio (предварительно сделав Revert System Files to Default у узла Target Platforms->Android->Libraries)
-
Tumaso получил реакцию от Ingalime в Это приложение было создано для более ранней версии Android
1. Проверь AndroidManifest.template.xml, параметры minSdkVersion и targetSdkVersion
2. Перекомпилируй в Rio (предварительно сделав Revert System Files to Default у узла Target Platforms->Android->Libraries)
-
Tumaso отреагировална krapotkin в Переезд на 10.3 Rio
сколько бед принесла уже стрельба в ногу под названием ProcessMessages
как хорошо, что в Андроиде наконец всех отучат от этого крайне вредного трюка
давайте формально
все что там у вас "высоконагруженное" выносите в потоки и пусть они работают. Ваши "потоки" пасутся в главном (Synchronize) и никакого толка нет
концепцию надо поменять. запустили поток и занимайтесь своим делом. например покажите Splash
а вернется поток - вот по возвращению и сделаете то, что этот Splash закроет.
и уж точно потоки не должны ничего общего иметь с формами
я писал статью про потоки, там про сплеши тоже есть в блоге и про ProcessMessages отдельная боль...
http://www.cyberforum.ru/blogs/469693/blog4875.html
-
Tumaso отреагировална mazayhin в Как выгрузить приложение
Ну это вопросы к разработчикам системы, почему они решили что то, что пользователь закрыл, должно из памяти выгружаться системой (да, оно висит в recent, но на деле может быть выгружено - это вы видите, когда запускаете снова от туда, и все данные и состояние теряется.) JNI тут не причем.
Почитайте первоисточник (доки по андроиду от гугла, про жц активити. Оно одно, обычно, для всего приложения на делфи)
Ну и попробуйте "закрыть" тот же навигатор гугла. Что будет? - поделитесь результатом
-
Tumaso отреагировална Barbanel в Скроллинг на канве
Доброго времени.
Я не могу вам сказать где именно ошибка (я даже не уверен что она есть), вы пишете я С++, а у меня лишь Delphi под руками. Я скачал ваш проект и запустил ехе. К сож. он не запустился на моей матине из-за отсутсвующих библиотек rtl250.bpl
Соотв. я не вижу как работает приложение, и как выглядят ваши фризы.
Судя по всему вы пытаетесь сделать игрушку, либо что-то аналогичное. Делать игрушку используя один лишь FMX или VCL имхо нелогично, т.к. эти платформы не предназначены для быстрой и плавной отрисовки графики.
Если вам реально необходима плавная отрисовка - используйте либо OpenGL либо DirectX. Вот здесь то и будет на все 100% "аппаратный скролл".
Это и есть тот совет, "как" написать.
Этот форум как раз для этого предназначен, и количество постов как раз тому подтверждение. Есть только одно НО:
никто здесь не обязан сразу броситься и настрочить вам готовое решение. Если человек имеет представление где может быть проблема, и что еще более важно - имеет время и желание писать ответ - он вам ответит.
Далеко не каждый из тех кто прочитал тему может или хочет вам (или мне, или кому-либо еще) отвечать.
Ярослав же и так имеет чем заняться и совершенно не обязан отвечать в каждой теме. Вы не спрашиваете на форуме MSDN почему вам лично мистер Гейтс не отвечает.
Ок, это было отступление.
Если вы хотите примеры как использовать графические библиотеки - вам на немного другие специализированные форумы типа gamedev.ru
Конкретно для Delphi и OpenGL я могу дать такую ссылку sulaco Здесь множество простейших примеров использования OpenGL, я в свое время именно здесь его и осваивал.
-
Tumaso отреагировална POV в обновление визуальных компонентов
Где-то видел компонент кнопки "сделать за@#$сь"
-
Tumaso отреагировална x11 в Как добавить «ярлыки приложения» для Android в приложении FMX
Может кому пригодится
https://blog.andreamagni.eu/2019/02/how-to-add-android-app-shortcuts-to-a-fmx-application/
-
Tumaso отреагировална Евгений Корепов в Runtime permissions in Delphi 10.3 Rio
Для полноценной работы вам нужно добавить параметры в вызов (иначе вы не узнаете дал ли пользователь разрешение или нет)
PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], nil); Вот так:
PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], PermissionRequestResult, ExplainReason); PermissionRequestResult - это обработка ответа пользователя
procedure TForm.PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); begin if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then begin // Ура! Пользователь дал разрешение на оба наших запроса. Выставялем глобальные флаги (к примеру) которые сигнализируют что можно читать/писать карту памти end else TDialogService.ShowMessage('Не возможно продолжить работу, требуемые разрешения не получены') end; И ExplainReason - если пользователь сдуру не дал разрешение, то вам нужно объяснить ему что без этого приложение работать не будет.
procedure TForm.ExplainReason(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc); begin TDialogService.ShowMessage('Приложению нужен доступ к карте памяти для таких то целей, иначе приложение не сможет работать. Зайдите в настроки Андроид и дайте разрешение на доступ', procedure(const AResult: TModalResult) begin APostRationaleProc; end) end;
-
Tumaso получил реакцию от Ingalime в [Android] TAnimator.AnimateFloatWait как работает
Думаю проблема в том, что банально не хватает производительности аппарата, поэтому и идет пропуск тиков
-
Tumaso отреагировална Евгений Корепов в Троит картинка при движении объекта
В FMX координаты Single и они никак не преобразуются компилятором в Integer. Забудьте о пикселях, они не связаны с координатами. Представьте если бы координаты считались в целых пикселях - сделали вы перемещение под HD монитор, а пользователь запустил приложение на UHD мониторе - все ваши пиксельные расчеты превратятся в тыкву.
-
Tumaso отреагировална haword в Перевод VCL приложения на FMX. Подводные камни, стоит ли?
у меня тоже нет никакой ошибки на рио. пример с ошибкой можно?
-
Tumaso отреагировална #WAMACO в Перевод VCL приложения на FMX. Подводные камни, стоит ли?
Хммм... не очень понятно, что у Вас там в продакшене... у нас все работает тип-топ и все рады! и не один проект!
может это не ваше?
-
Tumaso отреагировална Yuriy2606 в Ошибка LocationSensor в iOS, постоянно выдает NAN.
Решение взято отсюда https://community.idera.com/developer-tools/general-development/f/tools-22/36905/help-delphi-locationsensor-not-giving-coordinates-anymore
Думаю такие вещи должны быть тут.
-
Tumaso получил реакцию от Ingalime в Как собрать apk для android 8.1 не имея устройства с такой версией android?
В Rio да, укажите api 28
-
Tumaso получил реакцию от Ingalime в Как собрать apk для android 8.1 не имея устройства с такой версией android?
Delphi Rio:
1. Target Platform -> Android
2. Project -> Build
3. Project -> Deploy
В итоге apk для android 5/6/7/8/8.1/9 создан
-
Tumaso отреагировална Barbanel в Запуск приложения в iOS Simulator
Я смутно припоминаю что где-то в аккаунте разработчика (у Эппла) нужно прописать серийники телефонов/планшетов на которых вы хотите отлаживать приложения.
Без этого показывается тоже сообщение "Cannot connect to Mac".
Вот здесь: https://developer.apple.com/account/ios/device/
Также просмотрите здесь https://developer.apple.com/account/ios/profile/ все ли профайлы/сертификаты вы имеете.
Также, после этого на новом маке вам нужно открыть xCode -> Preferences -> Accounts и загрузить эти профайлы/сертификаты на макбук.
-
Tumaso получил реакцию от Barbanel в Как собрать apk для android 8.1 не имея устройства с такой версией android?
Delphi Rio:
1. Target Platform -> Android
2. Project -> Build
3. Project -> Deploy
В итоге apk для android 5/6/7/8/8.1/9 создан
-
Tumaso получил реакцию от Superator в Как собрать apk для android 8.1 не имея устройства с такой версией android?
В Rio да, укажите api 28
-
Tumaso отреагировална RoschinSpb в Как убить кнопку кликнув на нее саму
Не ссоритесь девочки пож.
Возвращаясь к сути вопроса. Основная сложность тут в том, что в Delphi нельзя разрушать экземпляр класса внутри метода этого класса за исключением тех случаев, когда метод использует только для разрушения Free, DisposeOf. Почему так, а не иначе, какие есть исключения и почему "уменяфсёработает" объяснять долго, поэтому в первом приближении предлагаю принять это за аксиому.
Обработчики событий OnClick и пр. вызываются из методов классов, так что разрушать контрол внутри события нельзя от слова совсем. Кроме очевидных случаев типа Self.DisposeOf существуют более запутанные варианты, когда к примеру закрывает и разрушается форма, что приводит к разрушению всех дочерних контролов.
Образно говоря, самоубийства строго запрещены, но не запрещено нанимать киллера и в качестве жертвы указывать себя. Т.е. должен быть некий другой (глобальный) объект который будет разрушать объекты, которые хотели бы самоубицо. Реализацию такого объекта можете придумать сами, или использовать TPurgatory (чистилище, в католическом учении — промежуточное место между раем и адом). Но чтобы убедиться в правильности работы можно создать своего наследника TButton в котором перекрыть деструктор и поставить в нем точку останова. При запуске в режиме отладки посмотрите стек вызова деструктора (надо быть внимательным, он может быть длиннющим), ни где в этом стеке не должно быть метода разрушаемого экземпляра. Если в Вы нашли метод разрушаемого объекта (за исключением вышеуказанных), то Ваш способ удаления работает не правильно и с некоторой долей вероятности будет приводить к AV и другим "неприятностям" которые почти невозможно отловить в режиме отладки.
-
Tumaso отреагировална slav_z в Работа с атрибутами текста
Как сделать текст с подобными атрибутами? Очень просто!
(Цвет текста не работает в XE8) Вот весь код:
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Button1: TButton; Text1: TText; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} type TTextAccess = class(TText); procedure ClearTextAttribute(Text: TText); begin TTextAccess(Text).Layout.ClearAttributes; end; procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor); var Font: TFont; begin Font:=TFont.Create; Font.Assign(Text.Font); Font.Style:=FontStyles; TTextAccess(Text).Layout.AddAttribute( TTextRange.Create(Pos,Length), TTextAttribute.Create(Font,FontColor)); end; procedure TForm1.Button1Click(Sender: TObject); begin AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed); AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue); AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen); Text1.Repaint; end; end.
-