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

Alex7wrt

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

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

  • Посещение

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

    31

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

  1. Like
    Alex7wrt получил реакцию от Barbanel в Не получается запустить эмулятор   
    Чтобы не было красного крестика, нужно не только создать эмулятор в AVD менеджере, но и запустить его там же. В итоге на экране увидите окно, в котором запускается интерфейс Android. Когда он запустится, и появится рабочий стол Android, можно запускать установку приложения на эмулятор.
    Только учтите, что на относительно слабых системах эмулятор может запускаться довольно долго. Ну и Вообще для проверки работоспособности (работает/ не работает) легче воспользоваться установкой на реальный девайс. 
  2. Like
    Alex7wrt получил реакцию от Ingalime в Не получается запустить эмулятор   
    Чтобы не было красного крестика, нужно не только создать эмулятор в AVD менеджере, но и запустить его там же. В итоге на экране увидите окно, в котором запускается интерфейс Android. Когда он запустится, и появится рабочий стол Android, можно запускать установку приложения на эмулятор.
    Только учтите, что на относительно слабых системах эмулятор может запускаться довольно долго. Ну и Вообще для проверки работоспособности (работает/ не работает) легче воспользоваться установкой на реальный девайс. 
  3. Like
    Alex7wrt отреагировална Евгений Корепов в 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
    Alex7wrt отреагировална yooSee в Runtime permissions in Delphi 10.3 Rio   
    Всем привет, вот и я решил внести свою лепту в жизнь форума и сегодня мы разберемся с разрешениями на Delphi Rio под Андроид. 
    Для примера мы будем использовать разрешения на чтение и запись с памяти устройства, для начала в нашем проекте выставим в Delphi>Project>Application>Uses Permissions галочки на Read External Storage и Write External Storage.
    в uses проекта добавьте следующее
    uses System.Permissions, Androidapi.Jni.Os, Androidapi.Helpers, далее  создадим переменные
    var Form: TForm; .... FPermissionWrite: string; FPermissionRead: string; в Form.Create добавим следующий код
    procedure TForm.FormCreate(Sender: TObject); begin FPermissionWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE); //Значение на запись FPermissionRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE); //Значение на чтение end; и теперь сам не посредственно запрос на подтверждение наших прав
    procedure TForm.Button1Click(Sender: TObject); begin PermissionsService.RequestPermissions ([FPermissionWrite, FPermissionRead], nil); end; //это вызовет окно с запросом разрешения прав ну и для проверки бросим на форму TMemo и пару TButton , в них реализуем сохранение и чтение из файла с памяти устройства
    procedure TForm.Button1Click(Sender: TObject); begin Memo1.Lines.LoadFromFile(TPath.Combine(TPath.GetSharedDocumentsPath, 'test.txt')); end; procedure TForm.Button2Click(Sender: TObject); begin Memo1.Lines.SaveToFile(TPath.Combine(TPath.GetSharedDocumentsPath, 'test.txt')); end; P.S. Напоминаю что для работы TPath нам понадобится подключить в Uses 
    uses System.system.ioutils; Надеюсь материал будет полезен! 
     
     
     

    video_2019-02-08_00-11-36.mp4 Permissions.zip
  5. Like
    Alex7wrt получил реакцию от ГоРыНыЧ в [Андроид] TAniIndicator   
    Может быть вам пригодится - мой пример векторного подхода к AniIndicator без использования картинок и для различных разрешений экрана.
    Для отрисовки дуги использовал компонент Равиля на основе FMX.Graphics.Native, поскольку стандартные функции не красиво рисуют под Андроидом.
    Сам индикатор:
    unit newaniindicator; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Ani, FMX.Objects, FMX.Layouts, FMX.ZNativeDrawFigure; type TNewAniIndicator = class(TZNativeDrawFigureArc) Animation: TFloatAnimation; procedure AnimationProcess(Sender: TObject); procedure AnimationFinish(Sender: TObject); procedure IndicatorResize(Sender: TObject); procedure Start; procedure Stop; Constructor Create(AOwner: TComponent); override; Destructor Destroy; override; private active: boolean; public colors: array of TAlphaColor; end; implementation constructor TNewAniIndicator.Create(AOwner: TComponent); begin inherited Create(AOwner); Fill.Kind:=TBrushKind.None; Stroke.Cap:=TStrokeCap.Round; Stroke.Join:=TStrokeJoin.Round; Animation:=TFloatAnimation.Create(Self); with Animation do begin Parent:=Self; Duration:=1; StartValue:=-90; StopValue:=270; PropertyName:='StartAngle'; Interpolation:=TInterpolationType.Quadratic; OnProcess:=AnimationProcess; OnFinish:=AnimationFinish; end; OnResize:=IndicatorResize; end; destructor TNewAniIndicator.Destroy; begin Animation.Free; inherited; end; procedure TNewAniIndicator.IndicatorResize(Sender: TObject); begin Stroke.Thickness:=Width*0.1; end; procedure TNewAniIndicator.Start; begin active:=true; Stroke.Color:=colors[0]; Visible:=true; Animation.Start; end; procedure TNewAniIndicator.Stop; begin active:=false; Visible:=False; Animation.Stop; end; procedure TNewAniIndicator.AnimationProcess(Sender: TObject); begin EndAngle:=-0.0037*sqr(StartAngle)+0.667*StartAngle+90; //Функция сжатия/растяжения дуги end; procedure TNewAniIndicator.AnimationFinish(Sender: TObject); var i: byte; begin if active then begin i:=0; while colors[i] <> Stroke.Color do inc(i); if i=length(colors)-1 then Stroke.Color:=colors[0] else Stroke.Color:=colors[i+1]; Animation.Start; end; end; end. Далее в программе:
    ani:=TNewAniIndicator.Create(form1); with ani do begin Parent:=Form1; Width:=Form1.Width*0.2; Height:=Width; setlength(colors,6); colors[0]:=TAlphaColors.Red; colors[1]:=TAlphaColors.Orange; colors[2]:=TAlphaColors.Yellow; colors[3]:=TAlphaColors.Green; colors[4]:=TAlphaColors.Blue; colors[5]:=TAlphaColors.Violet; Start; end; newaniindicator.zip
  6. Like
    Alex7wrt получил реакцию от Barbanel в 9-Patch PNG FMX Generator   
    Сделал небольшую программу-генератор 9-patch заставок. 
    Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых  в FMX размеров.

    Примеры
    Рисунок:

    Полученные 9-Patch png:

    Рисунок:

    Полученные 9-Patch png:

     
    Исходники: 9Patch Generator.zip
     
  7. Like
    Alex7wrt отреагировална slav_z в Работа с атрибутами текста   
    Как сделать текст с подобными атрибутами? Очень просто!
    (Цвет текста не работает в XE8) Вот весь код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Button1: TButton; Text1: TText; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} type TTextAccess = class(TText); procedure ClearTextAttribute(Text: TText); begin TTextAccess(Text).Layout.ClearAttributes; end; procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor); var Font: TFont; begin Font:=TFont.Create; Font.Assign(Text.Font); Font.Style:=FontStyles; TTextAccess(Text).Layout.AddAttribute( TTextRange.Create(Pos,Length), TTextAttribute.Create(Font,FontColor)); end; procedure TForm1.Button1Click(Sender: TObject); begin AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed); AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue); AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen); Text1.Repaint; end; end.  
  8. Like
    Alex7wrt отреагировална dnekrasov в [Windows] Запретить окну переход в прозрачный режим   
    Недавно решил одну проблемку, которая долго мучала - решил поделиться, может кому ещё пригодится.
    При работе с двумя мониторами или с монитором и проектором часто возникает необходимость запретить окну "исчезать" при наведении курсора мыши на миниатюру другого приложения в панели задач. Чтобы это сделать надо:
    uses ... Winapi.DwmApi ... TMainForm = class(TForm) ... protected procedure CreateHandle; override; ... end; ... procedure TMainForm.CreateHandle; var Val, Res: Integer; begin inherited CreateHandle; Val := 1; Res := DwmSetWindowAttribute(FormToHWND(Self), DWMWA_EXCLUDED_FROM_PEEK, @Val, SizeOf(Val)); {$IFDEF DEBUG} if Res <> S_OK then ShowMessage(SysErrorMessage(Res)); {$ENDIF} end; Спасибо @Alex7wrt за наводку
  9. Like
    Alex7wrt отреагировална GASCHE в C наступающим Новым Годом!   
  10. Like
  11. Like
    Alex7wrt отреагировална Andrey Efimov в С днем рождения Андрей Ефимов ???   
    Большое спасибо!
  12. Like
    Alex7wrt отреагировална Brovin Yaroslav в С днем рождения Андрей Ефимов ???   
    Хочу от всей души поздравить с днем рождения нашего модератора Андрея Ефимова @Andrey Efimov. Человек, на которого можно положиться и который всегда готов прийти на помощь. Из года в год помогает нашему форуму становиться лучше. 
    С днем рождения! Успехов тебе в работе, в личных делах. И не забывать про Делфи!
  13. Like
    Alex7wrt отреагировална Brovin Yaroslav в [FGX Native] [Вебинар] Сравнение возможностей кроссплатформенных мобильных библиотек нативных приложений FMX и FGX Native   
    Тема: "Сравнение возможностей кроссплатформенных мобильных библиотек нативных приложений FMX и FGX Native" Дата и время: 20 декабря 2018 года в 12:00 (по московскому времени) Участники: @Brovin Yaroslav, Андрей Совцов Регистрация: ссылка Ссылка на официальный телеграмм канал: https://t.me/fgx_native Участие бесплатное Под конец уходящего нового года сравним текущие возможности кроссплатформенной библиотеки мобильной разработки FGX Native и FMX. Поговорим о перспективах развития и ознакомимся с ближайшим планом до выпуска публичной бета версии. Посмотрим в живую на новый функционал библиотеки, разработанный за последнее время. У вас будет возможность задать любые вопросы автору. Не пропусти эту возможность!

  14. Like
    Alex7wrt отреагировална Евгений Корепов в Проигрывание стандартных звуковых эффектов Android   
    Задался вопросом, нашел ответ, может кому пригодится.
    uses Androidapi.JNI.Media, Androidapi.Helpers, Androidapi.JNIBridge, AndroidApi.Jni.JavaTypes, Androidapi.JNI.GraphicsContentViewText; .... procedure TFormMain.PlaySoundEffects(const ASoundID : Integer; AVolume : Single = 1.0); var AudioObj: JObject; Audio: JAudioManager; begin AudioObj:= TAndroidHelper.Context.getSystemService(TJContext.JavaClass.AUDIO_SERVICE); Audio:= TJAudioManager.Wrap((AudioObj as ILocalObject).GetObjectID); Audio.loadSoundEffects; Audio.playSoundEffect(ASoundID, AVolume); end; Константы звуковых эффектов тут https://developer.android.com/reference/android/view/SoundEffectConstants
    Правда у меня только звук "чпок" на всех константах. Но мне он и был нужен )
  15. Like
    Alex7wrt отреагировална dnekrasov в Компонент для вывода текста   
    TRectangle для цвета, TBevelEffect для утопленности и TText для текста. А можно сделать кастомный стиль для TLabel по тому же сценарию.
    Родителем. TText позволяет просто вывести текст, а TLabel, например, позволяет вывести текст с определённым стилем, указав StyleLookup.
     
  16. Like
    Alex7wrt отреагировална Barbanel в Отправка кнопкой текущего приложения на задний фон в ios   
    Ну, по гайдам Эппла такая кнопка уже есть внизу по центру телефона, и ее не нужно изобретать заново.
    По гайдам, чтобы закрыть приложение нужно нажать на физическую кнопку "домой".
    Все.
    Все остальное делает ОС. Именно так, как вы описали.
    Мы тоже хотели сделать в приложении кнопку "выход", но посовещавшись отказались от нее.
     
    PS если же вам необходимо именно "выключить" приложение, чтобы оно не выполняло какие-либо действия в фоне - ловите событие перехода приложения в фон, и реагируйте соответственно.
     
  17. Like
    Alex7wrt получил реакцию от Равиль Зарипов (ZuBy) в [Андроид] TAniIndicator   
    Тогда TZNativeDrawFigureArc замените на TArc. Может на ваших целевых устройствах будет нормально отрисовываться.
  18. Like
    Alex7wrt получил реакцию от Равиль Зарипов (ZuBy) в [Андроид] TAniIndicator   
    Равиль Зарипов написал модуль для ровной отрисовки под Android, который здесь используется. Поищите по запросу
    FMX.ZNativeDrawFigure
  19. Like
    Alex7wrt получил реакцию от Anatoliy в Передача звука с микровона в потоке от клиента серверу   
    Когда-то приводил пример в другой теме, но он на Delphi
     
  20. Like
    Alex7wrt получил реакцию от Tumaso в Передача звука с микровона в потоке от клиента серверу   
    Когда-то приводил пример в другой теме, но он на Delphi
     
  21. Like
    Alex7wrt отреагировална Brovin Yaroslav в Не могу вывести локальное уведомление   
    https://developer.android.com/training/notify-user/channels
    Создание через  TNotificationCenter
  22. Like
    Alex7wrt получил реакцию от Ingalime в 9-Patch PNG FMX Generator   
    Сделал небольшую программу-генератор 9-patch заставок. 
    Достаточно выбрать цвет фона, логотип и его видимый размер, и программа сгенерирует 9-patch для всех необходимых  в FMX размеров.

    Примеры
    Рисунок:

    Полученные 9-Patch png:

    Рисунок:

    Полученные 9-Patch png:

     
    Исходники: 9Patch Generator.zip
     
  23. Like
    Alex7wrt отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги   
    В конце концов получилось исправить.
    Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
    Пользуйтесь на здоровье!
    FMX.GifUtils.zip
  24. Like
    Alex7wrt отреагировална sinuke в [Android] Прозрачный StatusBar в RAD 10.3 Rio   
    Привет
    Вчера была выпущена финальная версия RAD Studio 10.3 Rio, в которой много нововведений для Андройд. Но вот про статусбар снова "забыли". Хотя не совсем, добавили файлик styles-v21.xml, который превносит новую материальную тему на устройствах под управлением Android 5.0 и выше вместо устаревшей Holo.
    Но все равно свойство формы SystemStatusBar так и не реализовали. Поэтому при запуске статус бар будет окрашен в унылый серый цвет (см. скриншот).

    Для того, чтобы сделать статусбар прозрачным и поместить под него содержимое формы, то достаточно сделать несколько несложных шагов:
    1. Убираем из деплоймента (Project -> Deployment) файл styles-v21.xml (можно просто снять галочку рядом с именем файла)

    2. Добавить в деплоймент проекта новый файл styles-v21.xml (styles-v21.zip) и прописать ему путь res\values-v21\

    3. В результате получится следующий вид

     
    P.S. В новом файле по сравнению со стандартным добавилась строчка <item name="android:windowTranslucentStatus">true</item>, которая и отвечает за прозрачный статусбар
    P.P.S. Чтобы определять размер статус бара, все также можно воспользоваться решеним ZuBy - http://blog.rzaripov.kz/2016/12/android-ios.html
    P.P.P.S. Тестовый проектик - StatusBar.zip
  25. Like
    Alex7wrt получил реакцию от Alisson R Oliveira в Воспроизведение без задержки   
    var Player: JMediaPlayer; Единожды создаете плеер и готовите файл:
    Player:=TJMediaPlayer.Create; Player.setDataSource(StringToJString('Путь_к_файлу')); Player.prepare; И, когда потребуется, запускаете воспроизведение
    Player.start; В uses нужно добавить что-то из этого:
    FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNI.AdMob, Androidapi.JNI.App, Androidapi.JNIBridge, FMX.Advertising, FMX.Platform.Android, Androidapi.JNI.Embarcadero Не помню уже, что именно. Ненужные уберите
×
×
  • Создать...