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

Активность

Лента обновляется автоматически

  1. today
  2. Есть картинки *.png,*.jpg в основном. На примере темы написал код, для начала только уменьшение качестка if (FileExists("d:\\Work\\Project\\Tmp\\11.JPG")) TFile::Delete("d:\\Work\\Project\\Tmp\\11.JPG"); TStream *Stream = new TMemoryStream(); TBitmapSurface *Surface = new TBitmapSurface(); TBitmapCodecSaveParams *SaveParam = new TBitmapCodecSaveParams(); TBitmap *SrcBitmap = new TBitmap(); TBitmap *DstBitmap = new TBitmap(); SrcBitmap->LoadFromFile("d:\\Work\\Project\\Tmp\\1.JPG"); Surface->Assign(SrcBitmap); SaveParam->Quality = 50; TBitmapCodecManager::SaveToStream(Stream, Surface, ".jpg", SaveParam); Stream->Position = 0; DstBitmap->LoadFromStream(Stream); DstBitmap->SaveToFile("d:\\Work\\Project\\Tmp\\11.JPG"); Исходное изображение 2,5Мб а конечное DstBitmap 3,7 Мб. Ето так надо? Где я ошибся? Кроме изменения размеров изображения и качества - что еще можно оптимизировать? Спасибо
  3. Получилось. Надо было кнопкой изменить рабочую версию, а я просто загрузила.
  4. Вчера
  5. Здравствуйте. В консоль гугла загрузила файл aab App Bundle. Загрузка прошла успешно. Но как сделать эту версию рабочей в консоли? Согласно документации версию надо подписать в самой консоли: http://docwiki.embarcadero.com/RADStudio/Sydney/en/Submitting_Your_Android_App_to_Google_Play#Android_App_Bundle_Support Но внешний вид консоли изменился ничего подобного там нет. Документация по ссылке устарела. Всю консоль просмотрела, не нашла как сделать мой App Bundle рабочей версией. Ткните, пожалуйста, носом где это делается в нынешней консоли разработчика?
  6. Большое спасибо! Подскажите, пожалуйста, мои шаги следующие правильные? У меня в дереве проектов две версии приложения. Запускаю 32 бит версию. На телефоне появляется приложение и оно работает. Запускаю версию 64 бит на телефоне и рядом с приложением 32 бит появляется 64 битное и тоже работает. Далее создаю aab и отправляю в магазин. http://docwiki.embarcadero.com/RADStudio/Sydney/en/Submitting_Your_Android_App_to_Google_Play#Android_App_Bundle_Support Однако если aab содержит сервис то могут быть проблемы, информация отсюда, правда это было год назад: https://fire-monkey.ru/topic/2040-проблема-с-android-service/#comment-10875 Как все таки правильно? Пробовать создать гибридный apk?
  7. И на моём запустился и не "упал". С Уважением. Олег.
  8. Вот получился 32 бит. Вроде как работает. На моем телефоне запустился. PublicRadio.apk
  9. Последняя неделя
  10. Написал программу на delphi 10.4 под андроид, в программе есть запрос на доступ к файлам чтения и записи, вот такой: procedure TForm1.Button1Click(Sender: TObject); begin //запрашиваем и узнаем что дал права PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], PermissionRequestResult, ExplainReason); end; procedure TForm1.FormCreate(Sender: TObject); begin //заносим значения при открытии FPermissionWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE); //Значение на запись FPermissionRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE); //Значение на чтение end; procedure TForm1.FormShow(Sender: TObject); begin //запрашиваем и узнаем что дал права PermissionsService.RequestPermissions([FPermissionWrite, FPermissionRead], PermissionRequestResult, ExplainReason); end; procedure TForm1.PermissionRequestResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>); begin //PermissionRequestResult - это обработка ответа пользователя if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then begin // Ура! Пользователь дал разрешение на оба наших запроса. Выставялем глобальные флаги (к примеру) которые сигнализируют что можно читать/писать карту памти form1.CheckBox1.Visible:=True; form1.Button1.Enabled:=False; end else begin TDialogService.ShowMessage('Не возможно продолжить работу, требуемые разрешения не получены'); form1.CheckBox1.Visible:=false; form1.Button1.Enabled:=true; end; end; procedure TForm1.ExplainReason(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc); begin //И ExplainReason - если пользователь сдуру не дал разрешение, // то вам нужно объяснить ему что без этого приложение работать не будет. TDialogService.ShowMessage('Приложению нужен доступ к карте памяти для таких то целей, иначе приложение не сможет работать. Зайдите в настроки Андроид и дайте разрешение на доступ', procedure(const AResult: TModalResult) begin APostRationaleProc; form1.CheckBox1.Visible:=false; form1.Button1.Enabled:=true; end) end; end. и все работает, но в телефоне я посмотрел права у программы, и там только доступ к медиафайлам. Подскажите как сделать ко всем файлам доступ?
  11. Подскажите как открыть sdk manager в delphi 10.4
  12. faradox

    Form Design

    Как сделать Конструктор форм не встроенным? Tools > Options > Form Designer, and clear the Embedded designer check box отсутствует чекбокс, хотя раньше был.
  13. Ещё раньше
  14. Возникла проблема. Как открыть файл на редактирование, так что бы WPS/MS офис мог потом его сохранить в тот же файл ? Файл открывается из штатного проводника и сохраняется одним кликом. Но вызывая его из моей программы, WPS как бы не знает откуда он его открыл, и не может сохранить в 1 клик. Или как-то не так передаю файл программе или не хватает каких-то хедеров данных? LFile := TJFile.JavaClass.init(StringToJString(AFilePath)); Intent.setDataAndType(TAndroidHelper.JFileToJURI(LFile), ExtToMime); Intent.setFlags(TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.addFlags(TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION);
  15. Прошу помощи, как переделать предложенный вариант под следующую конструкцию Я использую компоненты https://github.com/Zeus64/alcinoe TALTabControl на котором в каждой вкладке создается TALVertScrollBox, то есть у пользователя есть две степени свободы. Изначально я пробовал использовать обычный TVertScrollBox, который положен на TALTabControl, но приведенный код работал только при скролинге скроллбокса, а при горизонтальном свайпе со сменой активного таба нажатие все равно получалось. Вторая проблема в том, что я не до конца понимаю код, а конкретнее, когда я заменяю TCustomScrollBox на TALVertScrollBox, начинает ругаться на строку if ScrollBox is TCustomListBox then unit Form.Base; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.InertialMovement, FMX.Dialogs, FMX.Layouts, FMX.ListBox; type TBaseForm = class(TForm) private protected ControlledScrollBox: TCustomScrollBox; function GetActiveScrollBox: TCustomScrollBox; virtual; public function ObjectAtPoint(AScreenPoint: TPointF): IControl; override; end; implementation {$R *.fmx} type TAniCalculationsAccess = class(TAniCalculations); function ControlMoved(ScrollBox: TCustomScrollBox): Boolean; begin Result:=False; if Assigned(ScrollBox) then if ScrollBox is TCustomListBox then Result:=ScrollBox.AniCalculations.Moved else Result:=ScrollBox.AniCalculations.Moved and TAniCalculationsAccess(ScrollBox.AniCalculations).Enabled and (ScrollBox.AniCalculations.LastTimeCalc>0); end; function TBaseForm.GetActiveScrollBox: TCustomScrollBox; begin Result:=ControlledScrollBox; end; function TBaseForm.ObjectAtPoint(AScreenPoint: TPointF): IControl; var ScrollBox: TCustomScrollBox; begin var P:=ScreenToClient(AScreenPoint); ScrollBox:=GetActiveScrollBox; if ControlMoved(ScrollBox) and ScrollBox.PointInObject(P.X,P.Y) then begin Result:=ScrollBox; if Assigned(Captured) and (Captured<>Result) then begin Captured.MouseUp(TMouseButton.mbLeft,[],-1,-1); SetCaptured(nil); end; end else Result:=inherited; end; end. Прошу, пните в нужном направлении, куда копать
  16. Добрый день! Помогите с решением проблемы... имеется терминал оплаты на android, когда отправлю функцию принять оплату картой запускается системное приложение терминала для считывания карты оплаты, производим оплату, системное приложение закрывается и отправляет статус об оплате, но в момент когда оплата проходит мое приложение остается на фоне и андроид его закрывает. Подскажите как мне сделать что бы мое приложение оставалось в памяти и не закрывалось чтобы после оплаты я вернулся к своему приложению обработал ответ от приложения и продолжил работу. флаг persistent не помог. терминал слабенький и возможно из-за нехватки ресурсов android закрывает фоновое приложение
  17. Официальная новость - Delphi & C++Builder FREE Community Editions Updated to Version 10.4.2 Are Now Available! Пока надо будет получать для этой версии новые ключи, старые от 10.3.3 не подходят
  18. Осталось понять, зачем нам здесь реклама флаттера?
  19. Ставлю удобный дизайнер на последнее место, после всего с чем столкнулся в RAD Studio с 2015 года. Увы, лично для меня RAD studio стала тупиковой. По поводу UI дизайнера... ну тут как знать... я не считаю что рисовать интерфейс "от руки" это необходимо. И я и мои коллеги верстают WEB страницы и разрабатывают приложения и без билдеров. При должном опыте это и легче и качественнее. Конкретно по Flutter - эмулятор в рантайме показывает всё что Вы пишите. Есть превью в браузере, полноценно работающее, потому как Flutter это кроссплатформенное решение под Ios / Android / Web. Так же есть визуальные конструкторы интерфейса, как пример https://flutterstudio.app/. Полно их. И бесплатных и платных. Dart - гибкое решение. IDE любая, хоть Notepad++ и сборка из консоли, я использую Android Studio. Быстродействие приложения высокое, муть с зависимостями постепенно побеждают, перспектива, на мой взгляд шикарная. Уточню, я выражаю личное мнение, чужое мнение не оспариваю, RAD Studio не обижаю )) я делфист с 2003 года. Просто так сложилось что я делаю за 2 дня качественно с Flutter то что буду разматывать в RAD своими силами, с помощью этого форума, гугла и такой-то матери неделями... тем более кросс-платформенность реальная, не притянутая за уши.
  20. как там с UI ? Есть удобный UI Designer, как в Delphi ?
  21. Я для себя выбрал Flutter. И, к сожалению, попрощался с RAD studio. Хоть и не хотел этого делать упорно много лет. Кому нужна кросс-платформенность - обратите внимание на него.
  22. Осталось понять, а как быть с андроид 11?
  23. Здравствуйте. Имеется Delphi 10.3 и multi device 3D application. Ставлю на форму TPlane и TLayer3D, на Layer3D ставлю обычный TButton и запускаю проект. Под windows всё отлично, и кнопка видна и работает как надо. Компилирую под android и при запуске сразу выбивает программу, а в дебагер идёт ошибка "Cannot create EGL PBuffer Surface. Error code: 12297." Собственно, вопрос: Как и какие поместить элементы управления (кнопки, надписи и т.д.) в 3D приложение под андроид? Возможно, это ламерский вопрос, но за весь день ничего так и не нарыл. (Впервые на этом форуме, надеюсь, не ошибся с разделом.)
  24. Да и у меня "падает". С Уважением. Олег Киреев.
  25. Логи: FATAL EXCEPTION: main Process: com.embarcadero.PublicRadio, PID: 9717 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.embarcadero.PublicRadio/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so at android.app.ActivityThread.performLaunchActivity(ActivityThread.java) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java) at android.app.ActivityThread.access$1100(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java) at android.os.Handler.dispatchMessage(Handler.java) at android.os.Looper.loop(Looper.java) at android.app.ActivityThread.main(ActivityThread.java) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) Caused by: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.embarcadero.PublicRadio-1/lib/arm/libPublicRadio.so at android.app.NativeActivity.onCreate(NativeActivity.java) at com.embarcadero.firemonkey.FMXNativeActivity.onCreate(FMXNativeActivity.java:135) at android.app.Activity.performCreate(Activity.java) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) ... 10 more Библиотека libPublicRadio.so по пути /data/app/com.embarcadero.PublicRadio-1/lib/arm присутствует, значит что-то не так с самой библиотекой. Тут уже можно только гадать. Я бы на вашем месте попробовал создать новый проект, перенести в него код и компоненты со старого и попробовать скомпилировать сразу под Андроид-32.
  26. Мои дополнительные шаги. Надо было подправить манифест для 32 бит. Там по дефолту добавлялись 5 опасных разрешений. Теперь манифест для 32 бит нормальный: <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="29" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.INTERNET" /> //******************** <service android:exported="false" android:foregroundServiceType="mediaPlayback" android:name="com.embarcadero.services.serPublic" /> Откомпилировала службу в режиме 32 бит и в деплоймент для 32 бит добавила пути как выше на рисунке. Вот такой теперь арк, но падает. PublicRadio.apk
  1. Загрузить ещё активность
×
×
  • Создать...