Stas
-
Posts
536 -
Joined
-
Last visited
-
Days Won
75
Content Type
Profiles
Forums
Events
Store
Blogs
Posts posted by Stas
-
-
Виктор, это для чистоты и изящества кода,
Вы же все равно используете TfgAndroidListener, что мешает, передавать в конструктор тип объекта, и вызывать один и тот же метод TfgMap
З.Ы. Повторюсь, я не в претензии.
-
Я знаю, Виктор, Но в GoogleMaps отсутствует и общий объект, наследниками которого являются полигоны полилинии и иже с ними в Fgx, просто это несколько странно, делать столько событий, когда можно обойтись одним. (бритва Оккама)
Я не в претензии, мысли вслух.
-
Это правильно и разумно, спасибо, в идеале хотелось бы автогенерации как в FMX, но настаивать на этом глупо, не все от вас зависит.
-
OnTap<TfgMapObject>
Де факто их можно было объединить в одно.
-
Ярослав, а почему появилось столько событий, которые можно было не постулировать в таком количестве?
-
Здравствуйте, проблема в том, что в распространяемый classes.dex
Не вошли эти jar файлы посмотрите файл build.bat и поправьте путь к classes.dex fgx , У вас получится слитый classes.dex , который вы должны распространить вместо оригинального от fgx
У меня это получилось только при помощи временной замены оригинального classes.dex fgx своим
Ярослав обещал это исправить
Да, и не забудьте про разрешения
- 1
-
Виктор, он это не сможет скачать
- 1
-
Так прежде всего большая благодарность автору сайта
http://delphifmandroid.blogspot.com/
Без него бы ничего не получилось.
А так же автору нативного примера на джаве,который был утянут с просторов интернета
Ну и конечно Ярославу.
В джаве я полный ламер, поэтому просьба не кидать тапками за плохой код.
Пример сделан для fgx, но все нативные интерфейсы были сгенерированы для fmx.
- 4
-
Добрый день.
Расскажите, каким образом мне распространять собственный classes.dex?
Я смикшировал оригинальный classes.dex из [FGX] со своим, но при развертывании он отказывается добавляться в APK
Оригинальный classes.dex из [FGX] мне не удается отключить.
Для проверки работоспособности я подменил classes.dex из [FGX] своим и все прошло на ура, но мне кажется, это не лучший метод.
Спасибо.
-
Ну, что могу сказать, на FMX получилось.
Жизненно не хватает генератора оберток для FGX.
Сразу скажу, сложно, долго и "не те ощущения"
Спасибо Ярославу, за объяснение, как это делать в принципе.
Необходимо использовать Java и подключение своих jar.
Исходники свои, чужие, благодарности и комментарии выложу как приведу это хоть в какой-то божеский вид.
Если конечно, это кому-то интересно.
- 4
- 2
-
Здравствуйте, обнаружил неприятную особенность отрисовки текста.
Охватило меня желание нарисовать текст в круге.
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;
И показать его на картинке.
И не получилось
Спасибо
-
Ярослав, это говорит о широчайших возможностях Вашей библиотеки.
Виталий, это говорит о Вашей разносторонности.
Потому, спасибо Вам обоим.
- 3
-
И как быстро написали?
-
Добрый день, очень интересная ошибка
При добавлении маркера при движении по карте
procedure TFormMain.fgMap1CameraChanging(Sender: TObject); begin try fgMap1.AddMarker(fgMap1.CameraTarget,''); except on E:Exception do TfgDialogs.ShowMessage(E.Message); end; end;
Если сделать отложенное добавление через таймер, ошибки не происходит.
Спасибо.
-
-
Мне кажется, это не сложно.
Три Layout c цифрами fgImage, fgLabel
Layout c шестью кружочками.
-
Да, полигоны
Спасибо
-
Ярослав, нижайшая просьба
Ускорьте пожалуйста работу c Subject или хотя бы озвучьте сроки, когда ожидать.
Думаю либо делать на Unigui (я там на хорошем счету), либо у Вас
А если сделаете собственные слои, готов оплатить год подписки сразу.
Спасибо
-
Волобуев, вот вам меч.
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)
Спасибо, не пинайте за небрежность кода
- 4
-
-
-
-
39 минут назад, Vitaldj сказал:
Я не смог добиться нормальной работы не с одним эмулятором. Забил и купил дешманский телефон. Можно б\у
Я добился работы с двумя, причины я указал в предыдущем посте.
Компьютер и телефон могут быть в разных местах, если Вы расскажете варианты подключения телефона через RDP, буду Вам очень благодарен
-
[TfgMap] Расширение возможностей TfgMap
in Feature requests
Posted
Ярослав, спасибо за развернутый ответ, я должен понимать принципы построения библиотеки.
Конечно не имеет смысл добавлять общий метод.