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

Barbanel

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

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

  • Посещение

  • Победитель дней

    36

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

  1. Всем привет! Столкнулись с новой задачей: при копировании файла во внутреннюю память все идет хорошо, при копировании на SD-карту получаем отказ в доступе, что сегодня вполне ожидаемо. Умные люди говорят (и даже дают ссылку), что начиная с апи примерно 22, для того чтобы писать на карту памяти нужно просить у пользователя разрешение. https://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card Есть пример на Java, но я понятия не имею как это сделать на Delphi. Насколько я понимаю, выполнть Java-код из Delphi невозможно, так? Есть ли какой обходной путь, или встроенная возможность как запросить права у пользователя? Всем заранее спасибо!
  2. Огромное спасибо за наводку, это именно оно! Файл FMX.Consts нужно отредактировать и прописать в путях проекта.
  3. Всем привет! Под андроидом использую код типа: MessageDlg(rsLocalised_DeleteMsg, System.UITypes.TMsgDlgType.mtConfirmation, [System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo], 0, procedure(const AResult: TModalResult) begin bla bla bla end); Диалог отображает английские надписи на кнопках [Yes] и [No] Нужно чтобы кнопки подписывались локальным системным языком, вроде [Да] [Нет], [Ja] [Nein] и т.д. Вопрос: это возможно? Куда копать, подтолкните меня плиз! Всем спасибо!
  4. Да, ребята в эмбаркадеро стараются, прогресс налицо))) Сейчас тестируете на реальном телефоне?
  5. Потому и быстрее собирает) Врядли в макбуке стоит такая же) Спасибо за ответы!
  6. Во, вот это уже по существу, спасибо! Неработающий дебаг - это конечно боль, а без условной компиляции под различные платформы имхо вообще никак... Под хакинтошем дебаг работает? Какая у вас конфигурация компа для сборки в виртуалке?
  7. Боюсь что если я скажу такое шефу - меня уволят))) Приложение уже написано на Дельфи и успешно работает на андроид-устройствах. Осталось скомпилировать его под iOS и протестировать. Задача стоит именно так: скомпилировать, отладить если необходимо, выложить в магазин Эппла. Понятно что для тестов нужен айфон, купим, не проблема. Слышали что нужно также и макбук. Шеф говорит купим, скажи только какой. А с ними дел никогда не доводилось иметь, и какой нужен - я хз))) Шеф говорит купим, грех говорить что не нужно))) Вот, спрашиваю вашего совета)
  8. Доброго времени! Есть разработанное под Андроид приложение. Начальство поставило задачу выложить это же приложение в Apple AppStore. Было озвучено мнение что для этого необходимо купить Макбук или что-то аналогичное эппла. У меня нет опыта работы с эппловскими девайсами и операционками вообще, в связи с чем вопрос: - какое железо необходимо для нормальной и желательно комфортной разработки под iOS? "Свежесть" железа играет роль (год выпуска или еще чего-нить)? Всем спасибо!
  9. Вопрос полностью аналогичный этому: https://forums.embarcadero.com/thread.jspa?threadID=119443 Используется XE 10.1 Berlin
  10. Здравствуйте! Стоит задача загружать фотографии и отображать их в списке. Казалось бы, как два пальца, но... Код работал долгое время, все грузилось и отображалось. Спустя какое-то время, фото грузиться перестали. Дебаггинг выявил, замкнутый бесконечный цикл в этой процедуре: procedure TBitmap.AssignFromSurface(const Source: TBitmapSurface); var BitmapData: TBitmapData; MaxSize: Integer; ResampledSurface: TBitmapSurface; I: Integer; SourceRect: TRectF; begin MaxSize := CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize); <-- MaxSize = 0 if (Source.Width > MaxSize) or (Source.Height > MaxSize) then begin SourceRect := TRectF.Create(0, 0, Source.Width, Source.Height); SourceRect.Fit(TRectF.Create(0, 0, MaxSize, MaxSize)); ResampledSurface := TBitmapSurface.Create; try ResampledSurface.StretchFrom(Source, Trunc(SourceRect.Width), Trunc(SourceRect.Height), PixelFormat); AssignFromSurface(ResampledSurface); <-- infinity loop here finally ResampledSurface.Free; end; end else begin SetSize(Source.Width, Source.Height); if Map(TMapAccess.Write, BitmapData) then try for I := 0 to TBitmapSurface(Source).Height - 1 do Move(TBitmapSurface(Source).Scanline[I]^, BitmapData.GetScanline(I)^, BitmapData.BytesPerLine); finally Unmap(BitmapData); end; end; end; В самом начале процедуры MaxSize получает значение 0 (ноль!), размеры картинки больше нуля и процедура влетает в бесконечный цикл на строке AssignFromSurface(ResampledSurface); Кто-то сталкивался? Есть мысли как лечить? Всем спасибо!
  11. Да. А я больше ничего и не прошу, я поясняю чтобы было понятнее.
  12. Попытаюсь пояснить. Я не вижу в настройках IDE (в опциях проекта), какие у меня определены директивы компилятора для каждой системы (для Win/Android, и Debug/Release). Либо это баг ИДЕ в целом, либо баг конкретно моей версии - я хз. При переключении целевой платформы, поля в настройках проекта просто не обновляются. Соотв. я не знаю, какие директивы актуальны для текущей сборки, и какие будут актуальны, если я впишу свой набор директив в эти необновленные поля.Поэтому и спрашиваю, есть ли некие предустановленные компилятором/средой директивы, актуальные в каждой из целевых платформ, для дебага и релиза соответственно. Как вариант - пошариться в файле .dproj но его формат малопонятен. Я имею ввиду, какие параметры относятся к какой платформе и версии.
  13. Здравствуйте! Подскажите пожалейста, устанавливаются ли какие-либо стандартные Define при компиляции приложения для Play Store? Понятно что можно установить свои дефайны, разные для дебага и релиза, но хочется знать, существуют ли стандартные. Спасибо, всем хорошего дня =)
  14. До трех секунд пробовали, к тому же нативное приложение галереи обнаруживает новые фото сразу же, при переключении на него. Создается впечатление что дело не в паузе.
  15. Поставили такую же задачу - удалять оставшиеся фото из галереи. Взяли за основу твое решение - работает через раз, и только при отладке: - перед созданием фото получаем id последнего фото (id_last) - фотографируем - ищем все id которые больше id_last и удаляем их. На последнем шаге и получаем фейл - из под работающего приложения никогда не возращаются id больше id_last. Из под отладки - получаем лишь иногда. Причем если в момент отладки переключиться в галерею, то там есть свежие фото. Есть идеи, в какую сторону копать? Может перед vCursor := vContent.query(...) нужно какой кеш обновить?
  16. Попробовали. К сожалению скорость работы этого компонента на устройстве - дикая лажа, оставляет желать лучшего... Вопрос закрыт, будем использовать соответствующие права. Всем спасибо!
  17. Да, понятно что раз идет запись на носитель, то следовательно нужны разрешения на чтение. Вопрос в том, можно ли получить фото с камеры без записи на носитель?
  18. Есть такой код: if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService, Service) then begin Params.Editable := True; Params.NeedSaveToAlbum := False; Params.RequiredResolution := TSize.Create(self.ClientHeight, self.ClientHeight); Params.OnDidFinishTaking := actTakePhotoFromCameraDidFinishTaking; Service.TakePhoto(btnInfoAddPhoto, Params); end else ShowMessage('This device does not support the camera service'); После того как фото сделано, появляется ошибка EBitmapLoadingFailed 'Loading bitmap failed (/storage/emulated/0/DCIM/Camera/IMG_20170503_170826.jpg).' Появилась после того как убрал из проекта права READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE. Вопрос: можно ли получать фото от камеры минуя их сохранение в память утсройства? PS спрашиваю, т.к. стоит задача избавиться от ненужных прав в манифесте. Всем заранее спасибо!
  19. Скорее всего увас в конфиге IDE прописан флаг WAIT_2_SECONDS_BEFORE_FMX_STARTS. Уберите его - и проблема исчезнет.
  20. Здравствуйте уважаемые, есть форма с множеством TEdit, при этом они не помещаются на один экран и помещена на TScrollBox. При скороллинге если скроллить нажимая на подложку (т.е. сам TScrollBox) все работает идеально, если же нажимать на сам TEdit и таким образом скроллить, то выезжает клавиатура, что вобщемто неудобно. Вопрос: как настроить приложение/форму/ТСкроллБокс так, чтобы при зажатии и движении пальца вверх/вниз на ТЕдите клавиатура не выезжала? На нативных приложениях описанного выше поведения я не замечал. Заранее спасибо!
  21. Я определяю так: var FFirstDistance, FLastDistance: integer; .. procedure TformMainMenu2.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiZoom : begin if (not(TInteractiveGestureFlag.gfBegin in EventInfo.Flags)) and (not(TInteractiveGestureFlag.gfEnd in EventInfo.Flags)) then FLastDistance := EventInfo.Distance; if (TInteractiveGestureFlag.gfBegin in EventInfo.Flags) then FFirstDistance := EventInfo.Distance; if (TInteractiveGestureFlag.gfEnd in EventInfo.Flags) then begin // zoom out if ( FFirstDistance > FLastDistance ) then begin Plan.Scale := 0.5; end; // zoom in if ( FFirstDistance < FLastDistance ) then begin Plan.Scale := 1.0; end; end; end; end; end;
  22. У изображения нужно настроить на какие жесты он реагирует. Кинь на форму TGestureManager, потом настрой поля как показано ниже в коде. OnClick - срабатывает при касании объекта, срабатывает и в виндовс и на мобильных устройствах. OnTap - срабатывает несколько интеллектуальнее, причем только на мобильных устройствах (в виндовс не срабатывает). Упрощенно, он срабатывает только если ты коротко тапнул на контрол, если ты нажал на контрол и повел пальцем, скроля контент или скроля родительский ScrollBox, OnTap НЕ сработает. // инициализация Image.Touch.GestureManager := gestManager; Image.Touch.InteractiveGestures := [TInteractiveGesture.LongTap]; Image.OnGesture := FormGesture; .. // обработка жеста procedure TfrmMain.FormGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); begin case EventInfo.GestureID of igiLongTap : begin DoSomething(); end; end; end;
×
×
  • Создать...