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

OnePeople

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

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

  • Посещение

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

    55

OnePeople стал победителем дня 4 января

OnePeople имел наиболее популярный контент!

6 Подписчиков

Посетители профиля

13 297 просмотров профиля
  1. OnePeople

    Скриншот

    FMX / 11.3 Собственно вот, делаю в потоке скриншот и отрисовываю каждые 30 ms на прямоугольник, но жрет память как не в себя. Вопрос такой если у webbrowser нет канвы, как отрисовать WebBrowser на другом контроле. mapControl.cashBitmap := Form1.wb1.CaptureBitmap; TmpCanvas := TCanvasManager.CreateFromBitmap(lwMap.Fill.Bitmap.Bitmap, TCanvasQuality.HighPerformance); TmpCanvas.BeginScene(); TmpCanvas.DrawBitmap(mapControl.cashBitmap , mapControl.cashBitmap .BoundsF, lwMap.Fill.Bitmap.Bitmap.BoundsF, 1); TmpCanvas.EndScene;
  2. Это просто использовать Androidapi.JNI.Bluetooth Это для примера Допустим инициализировали адаптер BtObject := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.BLUETOOTH_SERVICE); if BtObject <> nil then FJBluetoothManager := TJBluetoothManager.Wrap((BtObject as ILocalObject).GetObjectID); if FJBluetoothManager <> nil then FJBluetoothAdapter := FJBluetoothManager.getAdapter; тут подключились mmBluetoothDevice := FJBluetoothAdapter.GetRemoteDevice(StringTOJString(mac)); tmpBluetoothSocket := mmBluetoothDevice.createInsecureRfcommSocketToServiceRecord (TJUUID.JavaClass.fromString(StringToJString('00001101-0000-1000-8000-00805F9B34FB'))); mmBluetoothSocket.Connect(); отправка и прием ответа repeat if mmBluetoothSocket.isConnected = true then begin isOk := false; Answer := ''; mmInStream := mmBluetoothSocket.getInputStream; mmOutStream := mmBluetoothSocket.getOutputStream; try mmOutStream.Write(StringToJAMove(command + #13#10)); mmOutStream.Flush(); except end; isClose := false; SW := TStopwatch.StartNew; milisec := 0; repeat try if mmInStream.available > 0 then begin LData := mmInStream.read(); isDataAviable := True; end else isDataAviable := false; except LData := -1; end; if (LData <> -1) and (isDataAviable = true) then begin try Wdata := LData; sym := Chr(WData); except LData := -1; end; if sym <> '>' then Answer := Answer + sym; end; try if Assigned(OBDListner) then isClose := OBDListner.Terminated; except Form1.LogOBDAdd('SendBTData except 3'); end; milisec := SW.ElapsedMilliseconds; until (LData = -1) or (sym = '>') or (isClose = true) or (milisec > 5000);
  3. Я думаю почему так кадров много, тоже делал на днях как у вас, только проблема не в этом, вся загвоздка в bringtofront, вот эту проблему как решить? Забил на это так как времени не было. Так же делал все это в потоке с использованием floatanimation, но прирост не большой получился.
  4. procedure MyCurrentForm.MyButtonClick(Sender: TObject); var dlg: TMyModalForm; begin // Create an instance of a form. dlg := TMyModalForm.Create(nil); // Configure the form. For example, give it a display name. dlg.Caption := 'My Modal Dialog Box'; // Show your dialog box and provide an anonymous method that handles the closing of your dialog box. dlg.ShowModal( procedure(ModalResult: TModalResult) begin // Do something. end ); end; Из docwiki.embarcadero.com
  5. Да не проблема это, может быть такая ситуация что вам устройство будет отправлять данные допустим "12" потом в JInputStream будет доступных байт ноль, потом придет "345", поэтому тут нужно делать проверку на завершающий символ сообщения и на необходимый таймаут. Все делается через java код, за 10 минут.
  6. android.permission.ACCESS_BACKGROUND_LOCATION, а так да приложение крякнет ос, делайте сервис.
  7. Конечно тут есть кучу вопросов, как будут добавляться вкладки, кнопки вкладок в каком виде нужны, эффекты перехода, плюс много чего еще, описание задачи слабое, но я скажу вам так: TabControl - пойдет.
  8. Androidapi.AppGlue в uses добавьте странно но у вас что то не так, что то вы намудрили, PAndroid_poll_source описан должен быть тут Androidapi.AppGlue
  9. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  10. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  11. Зачем он вам вообще нужен, делайте как говорит гугл, создавайте LocatioListner! Для вас сделал пример, как надо сами допишите. Android.LocationListener.rar
  12. Так у меня его нет) Себе делал callback для поиска количества спутников. Пишите на java callback (GnssStatusCallback.rar) Через codex генерируете jar файл, добавляете его себе в проект в Libraries Пишите объявления методов (Androidapi.JNI.GnssStatusCallback.rar) Создаем класс type TGnnsStatusCallbackDelegate = class(TJavaLocal, JGnssStatusCallbackDelegate) private class var FConnectivityManager: JConnectivityManager; private FCallback: JGnssStatusCallback; protected public procedure onFirstFix(ttffMillis: Integer); cdecl; procedure onSatelliteStatusChanged(status: JGnssStatus); cdecl; procedure onStarted; cdecl; procedure onStopped; cdecl; public constructor Create(); end; constructor TGnnsStatusCallbackDelegate.Create; begin inherited Create; FCallback := TJGnssStatusCallback.JavaClass.init(TAndroidHelper.Context, Self); end; GnnsStatusCallbackDelegate := TGnnsStatusCallbackDelegate.Create; Androidapi.JNI.GnssStatusCallback.rar GnssStatusCallback.rar
  13. Может их нет, новых, а есть устройства которые уже подключались ранее Bluetooth.GetPairedDevices; FPairedDevices := Bluetooth.GetPairedDevices; if FPairedDevices.Count > 0 then for I:= 0 to FPairedDevices.Count - 1 do ListBox.Items.Add(FPairedDevices[I].DeviceName) Ну и если Android API >= 31 if TJBuild_VERSION.JavaClass.SDK_INT >= 31 then begin FPermissionBTConnectSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_CONNECT); FPermissionBTScanSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_SCAN); FPermissionBTAdvertiseSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADVERTISE); PermissionsService.RequestPermissions([FPermissionBTConnectSettings] + [FPermissionBTScanSettings] + [FPermissionBTAdvertiseSettings], nil); end;
  14. Не работал со стандартным JSON, но может так? TJSONArray* arr2 = arr1<TJSONArray*>(Object->GetValue(_D("arr2")));
×
×
  • Создать...