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

aleksandrguru

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

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

  • Посещение

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

    2

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

  1. Like
    aleksandrguru получил реакцию от Ingalime в Библиотека компонентов Alcinoe для Delphi   
    Поставил посмотреть не более)) пусть будет может кто то найдет для себя что то полезное
  2. Like
    aleksandrguru получил реакцию от Ingalime в Зарезервировать данные приложения на Google Drive   
    У TMS был компонент готовый https://www.tmssoftware.com/site/tmsfnccloudpack.asp
  3. Like
    aleksandrguru получил реакцию от Ingalime в Java Servecie   
    Да был вроде , раньше так делал 
    procedure THomeForm.FormShow(Sender: TObject); var {$IFDEF ANDROID} Intent: JIntent; {$ENDIF } c:Integer; begin Loadsetinngs; {$IFDEF ANDROID} FServiceConnection1 := TLocalServiceConnection.Create; FServiceConnection1.StartService('RecordService'); Intent := CreateIntent(SERVICE_NAME, 1, st); // запускаем историю TAndroidHelper.Activity.startService(Intent); // // запускаем историю Intent := CreateIntent(SERVICE_NAME, 2, st); // запускаем топ TAndroidHelper.Activity.startService(Intent); // // запускаем топ {$ENDIF } end; Запускал разные задачи в сервисе 
  4. Like
    aleksandrguru отреагировална Dmitry_4501 в BlurBehind Control   
    BlurBehind Control. 
     
    Компонент позволяет использовать размытие, по типу, которое реализовано в WIndows 10, т.е компонент позволяет "размыть" то, что находится под ним.
     
    Пусть и увидел это непосредственно в самой студии на стартовой странице (Welcome Page), но все-таки подумал скинуть ссылку сюда.

    Исходники: https://github.com/grijjy/CodeRage2019/tree/master/BlurBehind
    Видео:

     
  5. Thanks
    aleksandrguru отреагировална krapotkin в Фреймворк для стандартного ListView   
    Всем привет!
    После долгого творческого запоя я запилил альфу либы, которая позволяет юзать обычный, не-генномодифицированный ListView.
    Данные подаются в виде модели данных, описание раскладки итема лежит в JSON.

    Для работы пишется примитивный наследник класса-адаптера, который биндит данные модели на элементы из JSON. Я решил, что руками делать это дешевле чем через RTTI
    { TMyAdapter } procedure TMyAdapter.SetupDrawableContent(const ADrawable: TListItemDrawable; const AData: TMyData); begin if SameText( ADrawable.Name, 'text') then begin (ADrawable as TListItemText).Text := AData.Text; end else if SameText( ADrawable.Name, 'detail') then begin (ADrawable as TListItemText).Text := AData.Detail; end else if SameText( ADrawable.Name, 'balance') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Balance); end else if SameText( ADrawable.Name, 'reserved') then begin (ADrawable as TListItemText).Text := FormatFloat('0.00', AData.Reserved); end end; Главная хитрость и отличие от стандартного DynamicAppearance+LiveBinding - переменная высота итемов ListView и использование арифметики в описании раскладки.
    Можно указать Detail.Y  = Text.Bottom + 5, ItemHeight = Detail.Bottom + 10, Detail.W = ItemWidth/2 - X
    {"Kind":"rect","Name":"BonusRect","Value":"", "Place":{"X":"itemwidth*3/4","Y":"Text.Y","W":"ItemWidth/4-5","H":"50"}, "BorderColor":"#FF005500", "Color":"lime", "LineWidth":3}, {"TextHAlign":2,"TextVAlign":1,"Kind":"text","Name":"Balance","Value":"", "Place":{"X":"BonusRect.x+5","Y":"Text.Y","W":"BonusRect.w-10","H":"50"}, "WordWrap":true, "Color" :"Black", "Font":{"Size":18,"Style":""}} ], "ItemHeight":"detail.bottom+10", Это дает довольно гибкую систему. Не на все случаи жизни, но все, что нужно, можно после автоматической раскладки дополнительно приписать в OnUpdateObjects 
    Код для работы примерно такой
    procedure TForm1.FormCreate(Sender: TObject); begin data:= TMyDataList.CreateFromFile(ExePath()+'data.json'); // загрузка в модель данных Adapter := TMyAdapter.Create(lvWallets, data.Items, ExePath()+'pattern.json'); // создание адаптера и загрузка шаблона Adapter.Pattern.SetupListView(lvWallets); // задать отступы и разную мелочь Adapter.ResetView(); // здесь в цикле из модели данных создается нужное количество итемов ListView end; procedure TForm1.lvWalletsUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin Adapter.SetupContent(AItem); // загрузить текст, картинки и другое содержимое в элементы итема Adapter.Pattern.DoLayout(AItem); // поправить раскладку в соответствии с содержимым элементов итема end; Для использования кроме стандартных - текст, картинка, кнопка - создано несколько дополнительных элементов итема - прямоугольник, круг, уголок, линия.
    Отличие от ModernLV - , 
    1) все происходит без правки системных файлов
    2) пока нет колонок и других особых изысков.
    На результат работы смотреть тут. Исходники пока не причесаны, будут чуть позже
    UPD.
    ссылки на репозитории ниже
     
  6. Thanks
    aleksandrguru отреагировална krapotkin в Фреймворк для стандартного ListView   
    Вот и картинки подвезли. Идиотский Deployment отказывается переписывать старые файлы на новые....
    Пока полностью не удалил приложение, файл-описание раскладки был старый, без картинок
    Как видно из заголовка 3000+ итемов с авторасчетом высоты. 6 секунд
    Крутится плавно...

    ListViewTest.apk.rar
  7. Like
    aleksandrguru получил реакцию от Yuriy2606 в TLocationSensor почему не пашет в Delphi 10.3.1 FMX RIO android   
    Если будите использовать Mapview  то нужно добавить в манифест <uses-library android:name="org.apache.http.legacy" android:required="false" />
  8. Like
    aleksandrguru отреагировална Евгений Корепов в Helper для TBitmap - асинхронная загрузка картинки из URL   
    Пока тестировал хелпер в боевом проекте он потихоньку оброс исрпавлениями/улучшениями:
    Загрузка из потока сделана через TBitmapSurface - это позволяет избежать множества глюков. LoadFromStream вынесен из Synchronize (основного потока) в поток HTTPClient - по результатам бенчмарка операция оказалась самая жручая. После исправления интерфейс перестал залипать совсем. Добавлен overload вариант с передачей в процедуру TListItemImage - для использования в TListView и корректной перерисовки подгруженных картинок через AListItemImage.Invalidate. unit BitmapAsyncLoader; interface uses FMX.Graphics, FMX.Surfaces, System.Net.HttpClient, System.Types, System.Classes, FMX.ListView.Types, FMX.ListView.Appearances; type TBitmapAsyncLoader = class helper for TBitmap procedure LoadFromURLAsync(const AUrl : String); overload; procedure LoadFromURLAsync(const AUrl : String; const AListItemImage : TListItemImage); overload; end; implementation var AHTTPClient : THTTPClient; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self)then Assign(ABitmapSurface); ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; procedure TBitmapAsyncLoader.LoadFromURLAsync(const AURL : String; const AListItemImage : TListItemImage); begin try AHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) var AHTTPResponse : IHTTPResponse; ABitmapSurface : TBitmapSurface; begin if Not ASyncResult.IsCompleted then exit; try AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); except end; if Assigned(AHTTPResponse) and (AHTTPResponse.StatusCode = 200) then begin ABitmapSurface:=TBitmapSurface.Create; if TBitmapCodecManager.LoadFromStream(AHTTPResponse.ContentStream, ABitmapSurface, CanvasClass.GetAttribute(TCanvasAttribute.MaxBitmapSize)) then TThread.Synchronize(Nil, procedure begin if Assigned(Self) and Assigned(AListItemImage) then begin AListItemImage.BeginUpdate; Assign(ABitmapSurface); AListItemImage.Invalidate; AListItemImage.EndUpdate; end; ABitmapSurface.Free; end ) else ABitmapSurface.Free; end; end, AURL ); except end; end; initialization AHTTPClient:=THTTPClient.Create; finalization if Assigned(AHTTPClient) then AHTTPClient.DisposeOf; end. Тестовый проект, на этот раз с ListView (по кнопке добавляется 100 итемов) прилагаю.
    BitmapAsyncLoaderListView.7z
  9. Like
    aleksandrguru получил реакцию от Ingalime в TLocationSensor почему не пашет в Delphi 10.3.1 FMX RIO android   
    Обновил Вот посмотри пример все работает https://okurl.ru/Ga7V5RR
  10. Like
    aleksandrguru получил реакцию от Barbanel в Библиотека компонентов Alcinoe для Delphi   
    Библиотека компонентов Alcinoe для Delphi
     
    Полноценный видеоплеер OpenGL, обертка Delphi WebRTC, родной ios / android TEdit, улучшенное управление Firemonkey, облачные сообщения Firebase, вход в Android / ios facebook sdk, Json / Bson Parser, обертка ImageMagick, клиент MongoDb и многое другое
    https://github.com/Zeus64/alcinoe
     
    Пример приложения 
    https://play.google.com/store/apps/details?id=club.kiskis.app&hl=en
  11. Like
    aleksandrguru получил реакцию от Yuriy Chocentmanum в Как работать с Arduino по bluetooth?   
    Вот лови пример нормальный 
    BTACC_Source_XE8.7z
  12. Like
    aleksandrguru отреагировална Pax Beach в Простой пример работы с MS Word в Delphi FMX   
    Сделал пример приложения для работы с Microsoft Word из приложения Delphi.
    Такое приложение может использоваться для обмена данными между объектами семейства Microsoft Office.
     
    Исходные коды приложения помогут вам понять, как работать с объектной моделью Microsoft Word.
    Чтобы лучше разобраться с нюансами Word, предлагаю ознакомиться со справочником Word VBA reference на MSDN.
    Проект создан в среде FireMonkey Delphi Berlin 10.1
    Протестирован в MS Word 2010, 2016, Windows 7x64 и 10x64.
    Чтобы посмотреть пример, просто распакуйте zip-файл проекта и щелкайте по порядку кнопки на форме.

     
    Скачать Delphi Word Test
     
    WordTest.zip
  13. Like
    aleksandrguru получил реакцию от Равиль Зарипов (ZuBy) в TMapsEngine   
    Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1
     
     
    Maps.Engine.zip
  14. Like
    aleksandrguru получил реакцию от Rusland в TMapsEngine   
    Исправил на NetHTTPClient все работает на  Delphi 10 Seattle и на Андроид 6.0.1
     
     
    Maps.Engine.zip
  15. Like
    aleksandrguru отреагировална Равиль Зарипов (ZuBy) в TRESTLight - облегченная версия   
    Доброго времени суток!
    Навеяно этой темой.
    Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
    Решил собрать аналогичный пример, только не использовать TREST***
    немного опишу, свою реализацию
    uAppSettings.pas - хранит описание вашего приложения созданного в ВК  FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
    var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
    var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
    GitHub   TRESTLight.zip
  16. Like
    aleksandrguru отреагировална rareMax в BroadcastReceiver Library   
    1. Немного опиши для чего она нужна.
    2. Добавь директивы {IFDEF Android} в местах, где используются чисто андроидные библиотеки
  17. Like
    aleksandrguru отреагировална Равиль Зарипов (ZuBy) в Как правильно передать полученные значения в потоке в главную форму приложения?   
    //uses System.Threading; var aData: string; begin TTask.Run( procedure begin aData := idHttp1.Get('url'); // выполняем загрузку файла из интернета; TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Text := aData; // выполняем действия связанные с визуальными компонентами end); end); end;  
  18. Like
    aleksandrguru отреагировална enatechno в Новая БД в Android   
    FDConnection1 := TFDConnection.Create(Self); FDPhysSQLiteDriverLink1 := TFDPhysSQLiteDriverLink.Create(Self); FDGUIxWaitCursor1 := TFDGUIxWaitCursor.Create(Self); FDGUIxWaitCursor1.ScreenCursor := gcrSQLWait; FDGUIxWaitCursor1.Provider := 'FMX'; FDConnection1.DriverName := 'SQLite'; FDConnection1.Params.Values['Database'] := TPath.GetDocumentsPath + PathDelim + 'test.db'; FDConnection1.LoginPrompt := false; FDConnection1.Connected := true; if FDConnection1.Connected then ShowMessage('подключились'); Пример подключения в runtime. Компоненты на форму можно "не садить"
  19. Like
    aleksandrguru отреагировална Равиль Зарипов (ZuBy) в GCMIntentService или Multiline Push and Local Notification   
    Berlin LocalMultiline.zip
  20. Like
    aleksandrguru отреагировална Rusland в Перехват события звонка   
    Вот пример, из которого вы можете видеть как перехватывать звонки (добавьте на форму Memo)
     
    uses CSBroadcastReceiver, Androidapi.JNI.JavaTypes.Own, Androidapi.Jni, AndroidApi.JNI.GraphicsContentViewText, Androidapi.Jni.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge, Androidapi.JNI.Telephony, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, FMX.StdCtrls; private { Private declarations } procedure CreateBroadcastReceiver; procedure BroadcastReceiverOnReceive(csContext: JContext; csIntent: JIntent); procedure CheckPhoneCallState(Context: JContext; Intent: JIntent); procedure CheckSmsInState(Context: JContext; Intent: JIntent); function KillCall(Context: JContext): Boolean; public { Public declarations } end; var Form1: TForm1; BroadcastReceiver: TCSBroadcastReceiver; implementation uses Androidapi.Jni.App, Androidapi.Helpers, Androidapi.Log; procedure TForm1.CreateBroadcastReceiver; begin if not Assigned(BroadcastReceiver) then begin BroadcastReceiver:= TCSBroadcastReceiver.Create(nil); BroadcastReceiver.OnReceive:= BroadcastReceiverOnReceive; BroadcastReceiver.RegisterReceive; BroadcastReceiver.Add('android.intent.action.PHONE_STATE'); BroadcastReceiver.Add('android.intent.action.NEW_OUTGOING_CALL'); end; end; procedure TForm1.CheckPhoneCallState(Context: JContext; Intent: JIntent); var telephonyService: JObject; telephonyManager: JTelephonyManager; state: JString; incomingCallNumber: string; outgoingCallNumber: string; outputResult: string; begin outputResult:= #13#10; telephonyService := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); telephonyManager := TJTelephonyManager.Wrap((telephonyService as ILocalObject).GetObjectID); if JStringToString(Intent.getAction).Equals('android.intent.action.PHONE_STATE') then begin state:= Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_STATE); if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_IDLE) then outputResult:= outputResult + 'Phone is IDLE ' + #13#10 else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_RINGING) then begin incomingCallNumber:= JStringToString(Intent.getStringExtra(TJTelephonyManager.JavaClass.EXTRA_INCOMING_NUMBER)); if incomingCallNumber.Equals('') then incomingCallNumber:= 'PRIVATE NUMBER'; outputResult:= outputResult + 'Phone is RINGING' + #13#10; outputResult:= outputResult + 'Incoming call from ' + incomingCallNumber + #13#10; if incomingCallNumber = '+79391234567' then /// телефон в черном списке // тут отбиваем звонок end else if state.equals(TJTelephonyManager.JavaClass.EXTRA_STATE_OFFHOOK) then outputResult:= outputResult + 'Phone is OFFHOOK' + #13#10; end else if JStringToString(Intent.getAction).Equals('android.intent.action.NEW_OUTGOING_CALL') then begin outgoingCallNumber:= JStringToString(Intent.getStringExtra(TJIntent.JavaClass.EXTRA_PHONE_NUMBER)); outputResult:= outputResult + 'Outgoing call to ' + outgoingCallNumber + #13#10; if outgoingCallNumber = '+79051234567' then /// телефон в черном списке begin BroadcastReceiver.SetResultData(nil); outputResult:= outputResult + 'Call is not allowed to ' + outgoingCallNumber + #13#10; end; end; Memo1.Lines.Append(outputResult); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(BroadcastReceiver) then BroadcastReceiver.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin CreateBroadcastReceiver; end; Отправить на PHP сервер можно, например, через Indy компоненты.
  21. Like
    aleksandrguru отреагировална Pax Beach в Использование нативных LocalBroadcastManager и BroadcastReceiver   
    Из PlatformSDK (PlatformSDKs\android-sdk-windows\sources\android-23\android\support\v4\content\) портировал в Delphi класс TJLocalBroadcastManager.
    Это очень полезный класс, если вы не хотите рассылать сообщения по всей системе, а есть необходимость общаться только внутри приложения или между хост-приложением и сервисом.
    Во вложении сам класс, в своем приложении убедитесь, что в Target Platforms (Android) → Android → Libraries включена библиотека android-support-v4.dex.jar.
     
    Прилагаю пример, для изучения и использования в работе, который демонстрирует работу обычного BroadcastReceiver и LocalBroadcastReceiver.
    В примере демонстрируется работа сообщений в приложении и сервисе. Сначала делаем build проекта LBCRService, потом будет доступна возможность собрать LocalBCR.
    Собираю в Berlin 10.1, но на младших версиях тоже должно работать, по крайней мере в Seatlle.
     
    В реализации методов
    procedure RegisterReceiver(); procedure UnRegisterReceiver(); необходимо снять комментарий с соответствующих строчек, в зависимости от того, какой тип ресивера вы хотите использовать.
     
     
    Androidapi.JNI.LocalBroadcastManager.pas.zip
    LocalBroadCastReceiver.zip
  22. Like
    aleksandrguru отреагировална Rusland в Приостановить запущенный сервис   
    В общем решил я проблему следующим образом - останавливаю поток, а не сервис (все равно кроме потока в сервисе ничего нет). Пока мне этого хватит )
  23. Like
    aleksandrguru получил реакцию от Pax Beach в Как работать с Arduino по bluetooth?   
    Вот лови пример нормальный 
    BTACC_Source_XE8.7z
  24. Like
    aleksandrguru отреагировална Rusland в Как работать с Arduino по bluetooth?   
    aleksandrguru, fsdb уже нашел этот пример, с помощью него как раз получилось подключиться к Ардуино  
  25. Like
    aleksandrguru получил реакцию от Rusland в Как работать с Arduino по bluetooth?   
    Вот лови пример нормальный 
    BTACC_Source_XE8.7z
×
×
  • Создать...