Jump to content

Stas

Members
  • Posts

    536
  • Joined

  • Last visited

  • Days Won

    75

Everything posted by Stas

  1. Ярослав, нижайшая просьба Ускорьте пожалуйста работу c Subject или хотя бы озвучьте сроки, когда ожидать. Думаю либо делать на Unigui (я там на хорошем счету), либо у Вас А если сделаете собственные слои, готов оплатить год подписки сразу. Спасибо
  2. Волобуев, вот вам меч. 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) Спасибо, не пинайте за небрежность кода
  3. Stas

    Эмуляторы

    Спасибо, Ярослав, я позже покажу
  4. Stas

    Эмуляторы

    Я не знаю, как еще доказать необходимость создания темы
  5. Stas

    Эмуляторы

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

    Эмуляторы

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

    Эмуляторы

    "Canst thou not come in by usual way as decent people do?.. Sir" Ойра-Ойра, "Понедельник начинается в субботу" Представьте себе ситуацию, Вы удаленно, по RDP, телефон у Вас, компьютер далеко, Ваш вариант запуска ?
  8. Stas

    Эмуляторы

    "Узок был круг этих людей, страшно далеки они от народа" В. И Ленин. Вы заблуждаетесь Я могу назвать два эмулятора, на которых запускаются и FGXNative и FMX Это Memu и LDPlayer Я смогу развить эту тему, и поделиться своими исследованиями, которые, возможно помогут
  9. "Товарищи! Граждане! Братья и сестры! Бойцы нашей армии и флота! К вам обращаюсь я, друзья мои!" И.Сталин Прошу вас создать новую ветку эмуляторы, для описания возможности запуска приложений ( и чем черт не шутит, дебага) на различных эмуляторах Это может помочь разработке нищебродам с Iphone. А также тем динозаврам, которые считают единственным нормальным телефоном Nokia 3310( Nokia 6230i, Motorola Razr V3i, Теплый ламповый с наборным диском), нужное подчеркнуть. Спасибо
  10. Каким образом Jnet_uri передать в TjUri (к примеру) Имеется в виду объекты FMX в FGX
  11. Ярослав, спасибо, я уверен, что будет не хватать, я не буду ждать компонентов, но мосты... Кстати, от Вас, знаю, возможны, а к Вам ? Пример будет полезен.
  12. Фух, спасибо, я начал строить мосты, почище Крымского, и понимаю, что Вам это сделать гораздо проще
  13. Дорогие друзья. Десять дней пользования библиотекой оставили в моей душе неизгладимый след, и вот почему 1) Удобство визуальной разработки Да!!! Это необыкновенно удобно. Вы принимаете определенные правила разработки, и дальше получаете быстрое и приятное приложение, в котором забываете о наползании текста, кнопок , элементов управления. 2)Скорость разработки Да!!!, Но тут больше дельфи рулит, одним словом, хуже не будет. 3) Скорость работы компонентов Да!!! Прокрутка плавная, иногда заметно выравнивание контролов, но это фигня по сравнению с FMX , вы не зависите от количества позиций в списке, рисуются только те, что видны. 4) Невизуальные компоненты Хмм. Пока очень мало. 5) Написание служб Пока не знаю, не пробовал. 6) Возможность перехода с FMX Тут в зависимости от невизуальных компонент, Обмен с ними возможен, но сложен. 7) Возможность перехода с Java/Cotlin Скорость разработки улучшится, надежность ухудшится. 8) Возможность коммерческой разработки. Пока не думаю, большая зависимость от разработчиков. Резюмируя, библиотека очень хорошая, с учетом вышеприведенных факторов. Развитие очень нужно, что касается меня, год я на это буду смотреть на платной основе. Спасибо.
  14. Уважаемые коллеги. С тех пор, как появилось человечество, у них появились отростки, на концах верхних лап именуемые в простонародье пальцами. В далеком 19-м веке некто Бертильон (могу ошибаться) обнаружил, что отпечатки пальцев уникальны для человека, да , для всех . И для бомжа Николаевича, и для бизнесмена Ефимовича. Коварные пиндосы воспользовались этим незамысловатым фактом и внедрили в свои богопротивные системы (вначале IOS, потом Android) . Жалкие рабы пиндосов (программисты) написали api для использования этих возможностей по всему миру. И было бы глупо не пользоваться этими возможностями. Спасибо.
  15. Теперь следующий вопрос Вот так вызываю procedure TfgOpenDialog.Show(CallBack: TProc<TObject>); var Intent: TJIntent; begin FProc:=Proc; Intent:=TJIntent.Create; Intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); Intent.setAction(TJIntent.ACTION_GET_CONTENT); Intent.setType(StringToJString(MimeType)); TfgAndroidHelper.Activity.startActivityForResult(Intent,5); end; Вот так получаю procedure TfgOpenDialog.ResultCallback(const Sender: TObject; const M: TMessage); begin if TfgActivityResultMessage(M).RequestCode = 5 then if TfgActivityResultMessage(M).ResultCode = TJActivity.RESULT_OK then begin Jc:=TfgActivityResultMessage(M).Data.getClipData(); TfgDialogs.ShowMessage(IntToStr(Jc.getItemCount)); end; И вот тут вопрос, как получить один объект ? Т.е. где function getItemAt(&index : Integer) : JClipData_Item; cdecl; Спасибо З,Ы. Выложу как вылижу
  16. Спасибо, заметил, подождём Виктор, а как сейчас нужно называть ресурс типа (image/jpeg) myimage.jpg ?, myimage.jpeg ? Чтобы пока называл правильно.
  17. Так, диалог я вызвал, но как получить результат, мне непонятно, у FMX есть TFMXNativeActivityListener Что там у FGX пока неизвестно.
  18. Добрый день S:=TMemoryStream.Create; try Bitmaps.Bitmaps[1].SaveToStream(S); Bitmaps.Bitmaps[1].SaveToFile(TPath.GetTempFileName+'.jpg'); //Файл 0 байт S.Position:=0; S.SaveToFile(TPath.GetTempFileName+'.jpg');// Файл 4мб finally S.Free; end; Внимание вопрос, почему ? Спасибо
  19. Здравствуйте, странная ситуация. Имеем MainForm TfgNavigatorBar TfgCollectionView SecondForm TfgNavigatorBar TfgCardPanel У всех относительное расположение. У TfgCollectionView есть событие onTapItem, по которому вызывается вторая форма. Так вот при тапе на TfgCardPanel второй формы, радостно срабатывает событие onTapItem, Важный нюанс TfgCardPanel должно находиться прямо под TfgNavigatorBar Спасибо
  20. Сразу предупреждаю, я не на зарплате, и не платный бот, все, что было написано, написано сегодня, убраны только маты и имя абонента. В дальнейшем опубликую скрины проекта, когда будет иметь смысл что-то показать.
  21. Ярослав, мы Вас поддерживаем, и очень радуемся Вашему проекту. Огромная к Вам просьба, относитесь к нам как детям с особенными потребностями (ко мне в частности) Что очевидно для Вас, совершенно неочевидно для меня, вопросы по Layout будут, там тоже совершенно непонятно. Как можно больше примеров, особенно был рад глобальному примеру, который бы показывал все возможности библиотеки Спасибо.
  22. Добрый вечер, Карты играют важную роль в жизни человека, они приятны глазу и выручают людей в сложных ситуациях (скажу вам как человек с топографическим кретинизмом). То что, представил Ярослав, приятно глазу, но пока не выручает. Потому пожелалки такие: Предоставить возможность работы со всеми типами объектов, возможные в ГуглеМапс ( далее ГМ) Возможность отображения контролов, которые возможны в ГМ (как-то масштабирование, мое местоположение, и т.д.) Управление объектами программно (к примеру отобразить информационное окно, без клика пользователем) Собственные слои, это самая сложная часть имхо, потому что я потратил на нее два года своей постылой жизни, и не добился результатов AndroidBridge возвращает не тот интерфейс, но возможно Ярослав и Ко справятся Прошу вас, поддержите меня, ибо как говорил Фукс (капитан Врунгель), карты это мой хлеб.
×
×
  • Create New...