Jump to content

Stas

Members
  • Posts

    536
  • Joined

  • Last visited

  • Days Won

    75

Posts posted by Stas

  1. 1 час назад, Yaroslav Brovin сказал:

    P. S. Если нужно централизованное событие, то можем добавить его в следующий релиз. Благо все уже готово, чтобы это сделать.

    Ярослав, спасибо за развернутый ответ, я должен понимать принципы построения библиотеки.

    Конечно не имеет смысл добавлять общий метод. 

  2. Я знаю, Виктор, Но в GoogleMaps отсутствует и общий объект, наследниками которого являются полигоны полилинии и иже с ними в Fgx, просто это несколько странно, делать столько событий,  когда можно обойтись одним. (бритва Оккама)

    Я не в претензии, мысли вслух.

     

  3. Здравствуйте, проблема в том, что в распространяемый classes.dex

    Не вошли эти jar файлы посмотрите файл build.bat и поправьте путь к  classes.dex fgx , У вас получится слитый classes.dex , который вы должны распространить вместо оригинального от fgx

    У меня это получилось только при помощи временной замены оригинального classes.dex fgx своим

    Ярослав обещал это исправить

    Да, и не забудьте про разрешения

    • Thanks 1
  4. Так прежде всего большая благодарность автору сайта

    http://delphifmandroid.blogspot.com/

    Без него бы ничего не получилось.

    А так же автору нативного примера на джаве,который был утянут с просторов интернета

    Ну и конечно Ярославу. 

    В джаве я полный ламер, поэтому просьба не кидать тапками за плохой код.

    Пример  сделан для fgx, но все нативные интерфейсы были сгенерированы для fmx.

    FGXFingerPrint.7z

    • Like 4
  5. Добрый день. 

    Расскажите, каким образом мне распространять собственный classes.dex?

    Я смикшировал оригинальный classes.dex из [FGX] со своим, но при развертывании он отказывается добавляться в APK

    Оригинальный classes.dex из [FGX] мне не удается отключить.

    Для проверки работоспособности  я подменил classes.dex из [FGX] своим и все прошло на ура, но мне кажется, это не лучший метод.

    Спасибо.

  6. Ну, что могу сказать, на FMX получилось.

    Жизненно не хватает генератора оберток для FGX.

    Сразу скажу, сложно, долго и "не те ощущения"  

    Спасибо Ярославу, за объяснение, как это делать  в принципе. 

    Необходимо использовать Java и подключение своих jar.

    Исходники свои, чужие, благодарности и комментарии выложу как приведу это хоть в какой-то божеский вид.

    Если конечно, это кому-то интересно. 

     

    • Like 4
    • Thanks 2
  7. Здравствуйте, обнаружил неприятную особенность отрисовки текста.

    Охватило меня желание нарисовать текст в круге.

    procedure TFormMain.fgButton1Tap(Sender: TObject);
    var B:TfgBitmap;
        Sz:Integer;
    begin
    B:=TfgBitmap.Create;
    Sz:=128;
    B.Size:=Tsize.Create(Sz,Sz);
    B.Canvas.Fill.Color:=TAlphaColorRec.Green;
    B.Canvas.FillCircle(B.Size.cx/2,B.Size.cy/2,B.Size.cx/2);
    B.Canvas.Font.Size:=Sz/2;
    B.Canvas.Fill.Color := TAlphaColorRec.Red;
    B.Canvas.Fill.Kind := TfgBrushKind.Solid;
    B.Canvas.FillText(B.Bounds,'100',False);
    TfgAssetsManager.Current.AddBitmap('test',B);
    fgImage1.ImageName:='test';
    end;

    И показать его на картинке.

    И не получилось

    Спасибо

    Screenshot_2020-01-22-17-30-36.png

  8. Добрый день, очень интересная ошибка

    При добавлении маркера при движении по карте
     

    procedure TFormMain.fgMap1CameraChanging(Sender: TObject);
    begin
     try
      fgMap1.AddMarker(fgMap1.CameraTarget,'');
     except
      on E:Exception do TfgDialogs.ShowMessage(E.Message);
     end;
    end;

    Происходит вот такое.
    Screenshot_2020-01-21-11-16-19.thumb.png.ba66cab3f681654eae866579024cddb7.png

    Если сделать отложенное добавление через таймер, ошибки не происходит.

    Спасибо.

  9. От себя добавлю, добавьте TfgNavigator bar и у TfgDrawerLayout  добавьте в свойство ToggleControl Его.

    Картинку с бигмаком спионерьте у material.io 

    И добавьте в Asset

    Получится вот такое (у Вас, надеюсь будет лучше).

    Screenshot_2020-01-17-17-42-35.thumb.png.cb51d35f4d7825b1a8dee8c2e6de6c59.png

    • Like 1
    • Thanks 1
  10. Ярослав, нижайшая просьба

    Ускорьте пожалуйста работу c Subject или хотя бы озвучьте сроки, когда ожидать.

    Думаю либо делать на Unigui (я там на хорошем счету), либо у Вас

    А если сделаете собственные слои, готов оплатить год подписки сразу.

    Спасибо

  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)
    

    Спасибо, не пинайте за небрежность кода

    • Like 4
  12. Мой кот этого не умеет, компьютер  дома, и даже если бы умел, как Вы увидите, что происходит на экране телефона?

  13. 39 минут назад, Vitaldj сказал:

    Я не смог добиться нормальной работы не с одним эмулятором. Забил и купил дешманский телефон. Можно б\у

    Я добился работы с двумя, причины я  указал в предыдущем посте. 

    Компьютер и телефон могут быть в разных местах, если Вы расскажете варианты подключения телефона через RDP, буду Вам очень благодарен

  14. "Canst thou not come in by usual way as decent people do?.. Sir" Ойра-Ойра, "Понедельник начинается в субботу"

    Представьте себе ситуацию, Вы удаленно, по RDP,  телефон у Вас, компьютер далеко, Ваш вариант запуска ?

×
×
  • Create New...