Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 10/21/2024 in all areas

  1. Hello, What target platform do you use? Thank you
    1 point
  2. for making an activity that all direction of its components is RTL, this change must be applied in project 1. in application tag in AndroidManifest.xml file in Templates folder, add this android:supportsRtl="true" 2. in main form creation event add this code TfgAndroidHelper.Activity.getWindow().getDecorView() .setLayoutDirection(TJView.LAYOUT_DIRECTION_RTL); now your layout direction in android activity is RTL
    1 point
  3. Hi, You can take a look at www.mitov.com. There are some webinars with face detection demo .
    1 point
  4. Yes, we have helper for it FGX.Helpers.Android: { Array utils } function CreateJavaStringArray(const ASource: array of string): IJavaArray<JString>; function CreateJavaObjectArray(const ASource: array of const): IJavaArray<JObject>; function CreateJavaIntegerArray(const ASource: array of Integer): IJavaArray<Integer>; function CreateJavaSingleArray(const ASource: array of Single): IJavaArray<Single>; function CreateJavaByteArray(const ASource: TStream): IJavaArray<Byte>; overload; function CreateJavaByteArray(const AData: Pointer; const ASize: Integer): IJavaArray<Byte>; overload; function JavaArrayToIntArray(const AJavaArray: IJavaArray<Integer>): TArray<Integer>; function JavaArrayToByteArray(const AJavaArray: IJavaArray<Byte>): TArray<Byte>; function JavaSizeArrayToSizeArray(const AJavaArray: IJavaArray<JSize>): TArray<TSize>;
    1 point
  5. Добрый день! Сам отвечу на свой запрос: все отлично работает при замене в секции uses FGX.OpenDialog.pas Android.Api.MediaStore на Android.Api.Providers.MediaStore Спасибо @Stas за модуль и @Yaroslav Brovin за подсказку
    1 point
  6. Добрый день! Подскажите, пожалуйста, есть ли актуальная версия модуля для 10.4? Представленная здесь не стыкуется с текущей версией библиотеки (((
    1 point
  7. We added new extension to FGX Native 1.12.0.0 with implementation new component TfgBarcode, which generates barcode of different types. В версии 1.12.0.0 добавлено расширение с новым компонентом TfgBarcode, генерирующим всевозможные типы штрихкодов.
    1 point
  8. Здравствуйте, на всякий случай выкладываю исправленную версию диалогов Работает на 10.4 (проверял вроде) Просьба объявляйте переменную как интерфейс, и не забывайте присваивать nil по ненужности. Спасибо OpenDialog.7z
    1 point
  9. Also i suggest to store QR code bitmap into assets manager and display in TfgImage instead of drawing it on TfgPaintBox. It works faster.
    1 point
  10. Now FGX Native provide crossplatform way for getting screen scale: FGX.Screen.TfgScreenManager.TfgScreen.Main.Scale
    1 point
  11. Волобуев, вот вам меч. type TfgOpenDialog = class private FProc: TProc<boolean>; FMultiSelect: boolean; FFiles: TStrings; FMimeType: String; procedure ResultCallback(const Sender: TObject; const M: TMessage); procedure SetMultiSelect(const Value: boolean); procedure SetMimeType(const Value: String); public property Files:TStrings read FFiles; property MultiSelect:boolean read FMultiSelect write SetMultiSelect; property MimeType:String read FMimeType write SetMimeType; constructor Create; destructor Destroy; override; procedure Execute(Proc: TProc<boolean>); end; constructor TfgOpenDialog.Create; begin FFiles:=TStringList.Create; TMessageManager.DefaultManager.SubscribeToMessage(TfgActivityResultMessage, ResultCallback); end; destructor TfgOpenDialog.Destroy; begin TMessageManager.DefaultManager.Unsubscribe(TfgActivityResultMessage, ResultCallback); FFiles.Free; end; procedure TfgOpenDialog.ResultCallback(const Sender: TObject; const M: TMessage); var J:TJUri; function getFileName(Uri:TJUri):String; var c:JCursor; begin result:=''; if (uri.getScheme().equalsIgnoreCase(StringToJString('content'))) then begin c:=TfgAndroidHelper.Context.getContentResolver.query(uri,nil,nil,nil,nil); try if (c<>nil) and c.moveToFirst then result:=JStringToString(c.getString(c.getColumnIndex(StringToJString('_display_name') ) )) finally if (c<>nil) then c.close; end; end; if (result ='') then result:=JStringToString(uri.getPath()); end; procedure UriToFile(uri:TJUri); var i:integer; bt:byte; b:TJavaArray<Byte>; jis:TJInputStream; FilePath: string; ms:TMemoryStream; begin ms := TMemoryStream.Create; try jis := TfgAndroidHelper.Context.getContentResolver.openInputStream(uri); b := TJavaArray<Byte>.Create(jis.available); jis.read(b); for i:=0 to B.Length-1 do begin bt:=b.Items[i]; ms.Write(bt,1); end; jis.close; FilePath:=System.IOUtils.TPath.GetTempFileName+'.jpg'; ms.SaveToFile(FilePath); FFiles.Add(getFileName(uri)+'='+FilePath); finally ms.Free; end; end; var i:integer; begin if TfgActivityResultMessage(M).RequestCode = 42 then begin if TfgActivityResultMessage(M).ResultCode = TJActivity.RESULT_OK then begin if FMultiSelect then for I := 0 to TfgActivityResultMessage(M).Data.getClipData().getItemCount-1 do UriToFile(TfgActivityResultMessage(M).Data.getClipData().getItemAt(i).getUri) else UriToFile(TfgActivityResultMessage(M).Data.getData()); FProc(True); end else FProc(False) end; end; procedure TfgOpenDialog.SetMimeType(const Value: String); begin FMimeType := Value; end; procedure TfgOpenDialog.SetMultiSelect(const Value: boolean); begin FMultiSelect := Value; end; procedure TfgOpenDialog.Execute(Proc: TProc<boolean>); var Intent: TJIntent; begin FProc:=Proc; Intent:=TJIntent.Create; if FMultiSelect then Intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) else Intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false); Intent.setAction(TJIntent.ACTION_GET_CONTENT); Intent.setType(StringToJString(MimeType)); TfgAndroidHelper.Activity.startActivityForResult(Intent,42); end; Пример использования fg:=TfgOpenDialog.Create; fg.MimeType:='image/*'; fg.Execute(procedure(B:boolean) begin if B and (fg.Files.Count>0) then begin TfgAssetsManager.Current.AddBitmapFromFile(fg.Files.Names[0],fg.Files.ValueFromIndex[0]); fgImage1.ImageName:=fg.Files.Names[0]; fgLabel1.Text:=fgImage1.ImageName; end; fg:=nil; end) Спасибо, не пинайте за небрежность кода
    1 point
  12. В FGX Native в андроид реализации идет широковещательная рассылка двух сообщений (FGX.Platform.Android). На них (в соответствии с тем, что вам нужно) надо подписаться через System.Messaging: TfgActivityResultMessage = class(TMessage) public RequestCode: Integer; ResultCode: Integer; Data: TJIntent; end; TfgActivityNewIntentMessage = class(TMessage<TJIntent>);
    1 point
×
×
  • Create New...