-
Постов
9 -
Зарегистрирован
-
Посещение
Активность репутации
-
Паршенко Виктор получил реакцию от 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;
-
Паршенко Виктор получил реакцию от Barbanel в Нативные сторонние SDK. Обновление встроенных SDK до версии 12.1
Нет, стянуть заново это
- удалить SDK из списка
- удалить данные файлы из папки что написал выше
- добавить SDK в список, автоматически загрузит новые файлы
UpdateLocalCache просто стянет файлы из указанных мест.
удаление и добавление SDK с нуля подтягивает новые пути для загрузки.
-
Паршенко Виктор отреагировална Евгений Корепов в 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;
-
Паршенко Виктор получил реакцию от Ingalime в Нативные сторонние SDK. Обновление встроенных SDK до версии 12.1
Нет, стянуть заново это
- удалить SDK из списка
- удалить данные файлы из папки что написал выше
- добавить SDK в список, автоматически загрузит новые файлы
UpdateLocalCache просто стянет файлы из указанных мест.
удаление и добавление SDK с нуля подтягивает новые пути для загрузки.
-
Паршенко Виктор отреагировална mmover в ClientWidth и ClientHeight
cw := Grid1.Content.Width;
ch := Grid1.Content.Height;
-
Паршенко Виктор получил реакцию от 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;
-
Паршенко Виктор получил реакцию от Евгений Корепов в 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;