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

Паршенко Виктор

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

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

  • Посещение

Активность репутации

  1. Like
    Паршенко Виктор получил реакцию от Ingalime в Одновременное обращение к БД Sqlite из программы и из сервиса   
    Как же я намучился с этим одно время, нигде не нашел решение. Поделюсь, раз уж наткнулся на этот вопрос.
    Первое правило использования сервисов в под android - никаких упоминаний FMX и всего что связано с графикой, пусть вы и не используете её.
    Например: если вы упомянули в сервисе, в разделе uses FMX.Types - ваш сервис будет падать с ошибкой Segment fault.
    Также, допустим у вас есть юнит uMyUnit, и в этом юните в разделе uses есть FMX.Types - тоже будет падать с ошибкой Segment fault.
    Повторюсь, сервис никаким образом не должен знать об FMX. 

    Причина падения FireDAC это - Wait курсор. 

    Решение 1: Если вы используете designTime компонент, добавьте рядом компонент FDGUIxWaitCursor
    настройте его так:
    Property: Provide,  Value: Console
    Property: ScreenCursor, Value: gcrNone
    Решение 2: Если вы используете динамическое создание подключения:
    uses  ..., FireDAC.ConsoleUI.Wait, ...  var  FDGUIxWaitCursor: TFDGUIxWaitCursor; begin   FDGUIxWaitCursor := TFDGUIxWaitCursor.Create(nil);   FDGUIxWaitCursor.Provider := 'Console';   FDGUIxWaitCursor.ScreenCursor := TFDGUIxScreenCursor.gcrNone; end;  
  2. Like
    Паршенко Виктор получил реакцию от Barbanel в Нативные сторонние SDK. Обновление встроенных SDK до версии 12.1   
    Нет, стянуть заново это
    - удалить SDK из списка
    - удалить данные файлы из папки что написал выше
    - добавить SDK в список, автоматически загрузит новые файлы
     UpdateLocalCache просто стянет файлы из указанных мест.
    удаление и добавление SDK с нуля подтягивает новые пути для загрузки.
  3. Like
    Паршенко Виктор отреагировална Евгений Корепов в 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;  
  4. Like
    Паршенко Виктор получил реакцию от Ingalime в Нативные сторонние SDK. Обновление встроенных SDK до версии 12.1   
    Нет, стянуть заново это
    - удалить SDK из списка
    - удалить данные файлы из папки что написал выше
    - добавить SDK в список, автоматически загрузит новые файлы
     UpdateLocalCache просто стянет файлы из указанных мест.
    удаление и добавление SDK с нуля подтягивает новые пути для загрузки.
  5. Like
    Паршенко Виктор отреагировална mmover в ClientWidth и ClientHeight   
    cw :=  Grid1.Content.Width;
     ch :=  Grid1.Content.Height;
     
  6. Like
    Паршенко Виктор получил реакцию от Ingalime в ClientWidth и ClientHeight   
    клиентские размеры есть у TCommonCustomForm (в следствии и у наследников, TForm) 
     
    FWinService: IFMXWindowService;
    ...
    function TCommonCustomForm.GetClientHeight: Integer;
    begin
      Result := round(FWinService.GetClientSize(Self).Y);
    end;
    function TCommonCustomForm.GetClientWidth: Integer;
    begin
      Result := round(FWinService.GetClientSize(Self).X);
    end;
     
  7. Like
    Паршенко Виктор получил реакцию от Евгений Корепов в ClientWidth и ClientHeight   
    клиентские размеры есть у TCommonCustomForm (в следствии и у наследников, TForm) 
     
    FWinService: IFMXWindowService;
    ...
    function TCommonCustomForm.GetClientHeight: Integer;
    begin
      Result := round(FWinService.GetClientSize(Self).Y);
    end;
    function TCommonCustomForm.GetClientWidth: Integer;
    begin
      Result := round(FWinService.GetClientSize(Self).X);
    end;
     
×
×
  • Создать...