Barbanel

Пользователи
  • Публикации

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

  • Посещение

О Barbanel

  • Звание
    Пользователь
  1. Это основной поток. Голова уже не варит(((
  2. Вопрос полностью аналогичный этому: https://forums.embarcadero.com/thread.jspa?threadID=119443 Используется XE 10.1 Berlin
  3. Здравствуйте! Стоит задача загружать фотографии и отображать их в списке. Казалось бы, как два пальца, но... Код работал долгое время, все грузилось и отображалось. Спустя какое-то время, фото грузиться перестали. Дебаггинг выявил, замкнутый бесконечный цикл в этой процедуре: 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); Кто-то сталкивался? Есть мысли как лечить? Всем спасибо!
  4. Да. А я больше ничего и не прошу, я поясняю чтобы было понятнее.
  5. Попытаюсь пояснить. Я не вижу в настройках IDE (в опциях проекта), какие у меня определены директивы компилятора для каждой системы (для Win/Android, и Debug/Release). Либо это баг ИДЕ в целом, либо баг конкретно моей версии - я хз. При переключении целевой платформы, поля в настройках проекта просто не обновляются. Соотв. я не знаю, какие директивы актуальны для текущей сборки, и какие будут актуальны, если я впишу свой набор директив в эти необновленные поля.Поэтому и спрашиваю, есть ли некие предустановленные компилятором/средой директивы, актуальные в каждой из целевых платформ, для дебага и релиза соответственно. Как вариант - пошариться в файле .dproj но его формат малопонятен. Я имею ввиду, какие параметры относятся к какой платформе и версии.
  6. Здравствуйте! Подскажите пожалейста, устанавливаются ли какие-либо стандартные Define при компиляции приложения для Play Store? Понятно что можно установить свои дефайны, разные для дебага и релиза, но хочется знать, существуют ли стандартные. Спасибо, всем хорошего дня =)
  7. До трех секунд пробовали, к тому же нативное приложение галереи обнаруживает новые фото сразу же, при переключении на него. Создается впечатление что дело не в паузе.
  8. Поставили такую же задачу - удалять оставшиеся фото из галереи. Взяли за основу твое решение - работает через раз, и только при отладке: - перед созданием фото получаем id последнего фото (id_last) - фотографируем - ищем все id которые больше id_last и удаляем их. На последнем шаге и получаем фейл - из под работающего приложения никогда не возращаются id больше id_last. Из под отладки - получаем лишь иногда. Причем если в момент отладки переключиться в галерею, то там есть свежие фото. Есть идеи, в какую сторону копать? Может перед vCursor := vContent.query(...) нужно какой кеш обновить?
  9. Попробовали. К сожалению скорость работы этого компонента на устройстве - дикая лажа, оставляет желать лучшего... Вопрос закрыт, будем использовать соответствующие права. Всем спасибо!
  10. Да, понятно что раз идет запись на носитель, то следовательно нужны разрешения на чтение. Вопрос в том, можно ли получить фото с камеры без записи на носитель?
  11. Есть такой код: 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 спрашиваю, т.к. стоит задача избавиться от ненужных прав в манифесте. Всем заранее спасибо!
  12. Скорее всего увас в конфиге IDE прописан флаг WAIT_2_SECONDS_BEFORE_FMX_STARTS. Уберите его - и проблема исчезнет.
  13. Здравствуйте уважаемые, есть форма с множеством TEdit, при этом они не помещаются на один экран и помещена на TScrollBox. При скороллинге если скроллить нажимая на подложку (т.е. сам TScrollBox) все работает идеально, если же нажимать на сам TEdit и таким образом скроллить, то выезжает клавиатура, что вобщемто неудобно. Вопрос: как настроить приложение/форму/ТСкроллБокс так, чтобы при зажатии и движении пальца вверх/вниз на ТЕдите клавиатура не выезжала? На нативных приложениях описанного выше поведения я не замечал. Заранее спасибо!
  14. Я определяю так: 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;