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

krapotkin

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

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

  • Посещение

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

    209

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

  1. Like
    krapotkin отреагировална OnePeople в Android: сканирование и подключение к WiFi   
    Так у меня его нет) Себе делал 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
  2. Like
    krapotkin получил реакцию от sulion в Скорость анимации сцены с большим количеством деталей   
    Удобство и универсальность ВСЕГДА противопоставлены быстродействию
    Бросьте идею использовать компоненты для рисования анимации. Что вы выиграли по сравнению с простым Canvas.DrawBitmap()  на PaintBox ??
    Ничего.
    Зато приобрели просто гигантский оверхед в виде ненужной универсальной начинки компонента TBitmap.
    Потом будут еще проблемы изза того, что не вы сами управляете масштабированием картинки в компоненте.
    Так игру не написать
  3. Like
    krapotkin получил реакцию от sulion в Скорость анимации сцены с большим количеством деталей   
    нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas
    объем памяти ровно такой, что требуется для хранения этих битмапов.
    скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
  4. Thanks
    krapotkin получил реакцию от Саша в Потоки на андроид   
    каждый начинающий разработчик всегда пытается сделать из приложения трекер
    ОС прибьет его в любом случае
    https://habr.com/ru/companies/broadcast/articles/734236/
    https://habr.com/ru/companies/tinkoff/articles/693094/
    https://habr.com/ru/companies/cleverpumpkin/articles/681804/
  5. Like
    krapotkin получил реакцию от antigrav в Параллельный отладчик   
    а вы понимаете в котором потоке выполняется Synchronize() ?
    попробуйте сначала получить ThreadId, а уже потом переходить в ГП и выводить это значение на экран
  6. Like
    krapotkin отреагировална Vladimir Gaivoronsky в ShoesMaster   
    Программа для администрирования обувного цеха. Переписана с VCL на FMX.
    Проверена и оттестирована на Windows (10) Linux (ubunti 21 - 23, openSuse) MacOS (10, 11 intel) на silicon негде проверять и нет SDK.
    Работает с Firebird версии 3 и 5.
    Поддерживает сканеры штрих кодов. 
    Позволяет отследить весь процесс производства: от приемки заказа до отправки в магазин (продажей занимается другая программа) Написана с использованием TMS.FNC. В программе есть несколько тем оформления ( в основном темные, но есть и светлые). Пока еще происходит обкат в нескольких цехах, но скоро  можно будет "пощупать" всем желающим. Также чуть позже будет версия на Android. Требует внешний сервер БД (для MacOS и Android). В макинтоше запустить и настроить firebird очень нетривиально, например сортировка по названиям без учета регистра не реализовано в 3 версии.












  7. Like
    krapotkin отреагировална ComAlex в При нажатии на "Чужие" PUSH моё iOS-приложение закрывается аварийно!   
    Решено!
    Если кому интересно:
    При долгом нажатии на PUSH, активизируется виртуальная клавиатура!
    А у меня навешено событие на OnVirtualKeyboardShown() ...
  8. Like
    krapotkin получил реакцию от antigrav в Параллельный отладчик   
    https://bitbucket.org/vkrapotkin/commonapi/src/master/UVKCommonLog.pas
    log.log('TrqdAttributes LoadFromFolder (' + Attributes.Count.ToString + ')'); в логе
    14:15:13.463 (000013D8) TrqdAttributes LoadFromFolder (5)
    или
    14:15:12.504 (main) Login successful.
  9. Thanks
    krapotkin получил реакцию от antigrav в ProgressBar и потоки   
    не понял вопрос. мы работаем в обработчике одного из событий очереди сообщений в главном потоке.
    событие отрисовки тоже стоит в очереди в главном потоке. закончим обработчик, запустится следующий, произойдет перерисовка.
     
     
  10. Like
    krapotkin получил реакцию от Sergey S в Работа с web камерой   
    скорее всего просто нет реализации.
    UI в Linux же обеспечен совершенно сторонними средствами
    так что вопрос скорее к пакету FMX Linux
     
  11. Like
    krapotkin получил реакцию от Sergey S в Создание Dockable формы   
    floatingTabs.zip
    вот.  примерно то же самое надо делать при mousedragover
  12. Like
    krapotkin получил реакцию от Sergey S в как отловить перемещение формы по экрану, Windows   
    TForm1 = class(TForm)
      private
      public
        procedure SetBoundsF(const ALeft: Single; const ATop: Single; const AWidth: Single; const AHeight: Single); override;
      end;
  13. Like
    krapotkin получил реакцию от Sergey S в Создание Dockable формы   
    ничего там не из коробки.
    и в хроме тоже сами писали) 
    TabControl в чистом виде много чего не поддерживает.
    Зато поддерживает главное - можно табы убрать вообще. И над ним сделать панель, которая будет вести себя как угодно, в том числе анимированно раздвигая элементы во время Drag Over
    А после дропа выстроить табы. или фреймы, или что угодно. вообще не проблема
  14. Like
    krapotkin получил реакцию от Sergey S в Создание Dockable формы   
    я так понимаю, вопрос упирался в красивый драг, а не способ отсоединить таб от родителя ?
  15. Like
    krapotkin отреагировална Slym в Линковка Kotlin (Котлин) библиотек в Delphi   
    Линковка Kotlin (Котлин) библиотек в Delphi, как делаю:
    Хедеры линкуемых библиотек обычно громадны описанием всех типов...
    Я обычно делаю свой jar на java в нем линкую зависимости и наружу для дельфи оставляю один объект с простыми функциями.
    Хедер дельфи получается компактным и понятным:
    package com.MyCompany.evotor; public interface J2DCallback { void Log(String str); String Trans(String str); String GetValue(String name); void SetValue(String name, String value); Activity GetActivity(); Context GetContext(); } public class FiscalCoreConnection { final private Global Instance; public FiscalCoreConnection(J2DCallback aj2d) throws NullPointerException { Instance = new Global(aj2d); } public String SendJSON(String JSON){ try{ return Instance.SendJson(JSON); } catch (Exception e) { return FiscalCoreException.MakeJson(e); } } } type J2DCallbackClass = interface(IJavaClass) ['{856654D5-7939-44DF-ACD5-E2EF8C6D3AA4}'] end; [JavaSignature('com/MyCompany/evotor/J2DCallback')] J2DCallbackIntf = interface(IJavaInstance) ['{025B14E9-C041-4105-9E85-83CC127CC340}'] procedure Log(str:JString); cdecl; function Trans(str:JString):JString; cdecl; function GetValue(name:JString):JString; cdecl; procedure SetValue(name:JString; value:JString); cdecl; function GetActivity():JActivity; cdecl; function GetContext():JContext; cdecl; end; TJ2DCallbackImp = class(TJavaGenericImport<J2DCallbackClass, J2DCallbackIntf>) end; [JavaSignature('com/MyCompany/evotor/FiscalCoreConnection')] JFiscalCoreConnection = interface(JObject) ['{5797747D-D61D-4EF6-94F7-5E8994545CC2}'] function SendJSON(JSON:JString):JString; cdecl; end; JFiscalCoreConnectionClass = interface(JObjectClass) ['{81782882-DFCF-4FA9-BD37-02CCCF2409EA}'] function init(j2d : J2DCallbackIntf) : JFiscalCoreConnection; cdecl; end; TJFiscalCoreConnection = class(TJavaGenericImport<JFiscalCoreConnectionClass, JFiscalCoreConnection>) end; TJ2DCallback = class(TJavaLocal, J2DCallbackIntf) public procedure Log(str:JString); cdecl; function Trans(str:JString):JString; cdecl; function GetValue(name:JString):JString; cdecl; procedure SetValue(name:JString; value:JString); cdecl; function GetActivity():JActivity; cdecl; function GetContext():JContext; cdecl; end; Все зависимости в build.gradle:
    dependencies { implementation 'com.github.evotor:integration-library:v0.4.50' implementation 'com.google.zxing:core:3.4.0' } В Дереве External Libraries забираем jarы зависимостей

    ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
    Там же забираем kotlin-stdlib

    ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
    Но в kotlin-stdlib.jar есть "лишний" файл kotlin-stdlib-1.5.10.jar\META-INF\versions\9\module-info.class
    Открываем архиватором и удаляем файл или всю папку versions

    Почти все готово... Но котлин еще и посыпан сахаром и не хочет Дельфей dexится, хочет -min-sdk-version=26
    Поможем Delphi:
    Ищем CodeGear.Common.Targets, у меня он в "C:\Program Files (x86)\Embarcadero\Studio\21.0\bin"\
    Ищем в нем --output, и перед ним вставим все про sdk. У меня получилось так:
        <DxCmd>PATH $(JDKPath)\bin;$(PATH); %26 set JAVA_HOME=$(JDKPath)%26 "$(JavaDxPath)" --dex --min-sdk-version=26 --output=</DxCmd>
    Далее цепляем все jar в проект

    Либа производителя, Либа своя обертка, и котлин
    Иии собираем!

    Если есть еще зависимости делаем аналогично:
    находим jar, выпиливаем META-INF\versions\9\module-info.class, линкуем в проект и собираем...
    Не все зависимости используются и нужны, поэтому добавляем поштучно до тех пор пока не заведется.
  16. Thanks
    krapotkin получил реакцию от Саша в TLocationSensor - километраж   
    тут написано, что проблема сложная и не решается в лоб
    https://android-developers.googleblog.com/2020/12/improving-urban-gps-accuracy-for-your.html
    можно попробовать оставить только  Manifest.permission.ACCESS_FINE_LOCATION  и исключить Manifest.permission.ACCESS_COARSE_LOCATION
    чтобы попадали только данные со спутников 
    но вот тут написано, что в современных ОС вы должны это запрашивать, и не факт что получите
    https://developer.android.com/training/location/permissions
  17. Like
    krapotkin отреагировална Dmitry_4501 в Рисование на неклиентской часть окна   
    Оконные сообщения в FMX можно обрабатывать так же как и в VCL.
    Достаточно в вашу WindowProc добавить это:
    var Message: TMessage; Message.Msg := uMsg; Message.WParam := wParam; Message.LParam := lParam; Message.Result := 0; frm.Dispatch(Message); Тогда потом можно будет смело написать что-то вроде
    procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT; 
    И оно будет работать.
     
  18. Thanks
    krapotkin получил реакцию от Hevard в Размер приложения   
    В RTL за годы тоже произошло 100500 изменений и добавлений. Функционал форм поменялся. Добавились стили в VCL. Все это отразилось на размере.
    Но я по-прежнему не вижу проблем. Вот питонные программы тянут почти 500м самого питона. Сишарп и другие - гигабайты дотнета. И ничего, никто не морщится даже.
  19. Like
    krapotkin отреагировална Aptyp в Рисование на неклиентской часть окна   
    В общем рисовать как оказалось на неклиентской части формы вообще не проблема. Но я делаю форму Acrylic (Полупрозрачную с размытым фоном), и вот тут появляются проблемы. Если рисовать обычным способом, как на Canvas, то цвет получается тоже полупрозрачный. Путём экспериментов выяснил, что относительно нормально рисуется таким методом:
    uses Winapi.Windows; BitBlt( GetWindowDC( WindowHandleToPlatform( Form.Handle ).Wnd ), 0, 0, BitMap.Width, BitMap.Height, BitMap.Canvas.Handle, 0, 0, cmMergePaint ); В обычном случае последний аргумент должен быть cmSrcCopy, но с ним тоже получается полупрозрачная картинка. Помогает только cmMergePaint, НО! таким способом рисуется картинка с инвертированными цветами. То есть перед таким рисованием нужно её самому инвертировать.
    Следующий шаг – это рисовать png картинку, так как редко надо рисовать просто непрозрачную прямоугольную картинку. С 32-битным TBitMap у меня пока что-то не получилось, а вот TPngImage вполне хорошо рисуется.
    uses FMX.Platform.Win, Winapi.Windows, Vcl.Graphics, Vcl.Imaging.pngimage; function TForm1.WinHandle: HWND; begin Result := WindowHandleToPlatform( Self.Handle ).Wnd; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var ACanvas: Vcl.Graphics.TCanvas; png: TPngImage; begin ACanvas := Vcl.Graphics.TCanvas.Create; ACanvas.Handle := GetWindowDC(Self.WinHandle); png := TPngImage.Create; png.LoadFromFile('C:\Image.png'); try PatBlt( ACanvas.Handle, 0, 0, png.Width, png.Height, cmBlackness ); png.Draw( ACanvas, Rect( 0, 0, png.Width, png.Height ) ); finally ReleaseDC(Self.WinHandle, ACanvas.Handle); ACanvas.Handle := 0; ACanvas.DisposeOf; png.DisposeOf; end; end; Но и тут есть подводные камни. Метод TPngImage.Draw, если заглянуть в его код становится понятно, что рисует он поверх того, что уже нарисовано и картина накладывается одна на другую быстро теряя прозрачность полупрозрачных пикселей. Поэтому перед её рисованием нужно стереть, что было до этого, с чем отлично справляется функция Winapi.Windows.PatBlt. Но таким образом появляется мерцание.
    А так же я ещё не нашёл, как отловить в FireMonkey отловить у формы событие WM_NCPAINT. Пока что навесил рисование на событие формы OnPaint, но оно не стабильно работает в данном случае и бывает, когда картинка стирается и не рисуется, пока не наступит надобность перерисовать клиентскую часть формы.
  20. Like
    krapotkin отреагировална OnePeople в Съезжают размеры и положение контролов в Андроиде, в винде всё нормально.   
    У меня 11, и без него размер editа зависит от размера шрифта и ни какими свойствами не правиться
  21. Like
    krapotkin получил реакцию от Hevard в Размер компилируемого файла   
    что за детский сад
    на андроиде приложения весят 400К и при этом используют библиотеки Java на 2G
    это как - маленькие или большие приложения?
    то же с .NET
    Приложение с пустой формой тащит за собой весь функционал, который вы можете использовать, при этом не требуя установки дополнительных run-time библиотек, чем, собсн, всегда и хороша была Делфи
    mp3 файл весит 8-10 мб. а 5 сек видео "опы - 120.  Не видел я чтобы кто-то плакал по этому поводу
  22. Like
    krapotkin получил реакцию от Letter в Запись звука как на диктофоне   
    не думаю, что это сделано путем установки некоей "громкости"
    когда у нас есть оцифрованный сигнал, то дальше уже идет цифровая обработка этого сигнала
    например, нормализация, или компрессия https://habr.com/ru/articles/379395/
    операция не очень сложная, но нужно поискать описания хороших алгоритмов и поэкспериментировать с их настройками 
     
  23. Like
    krapotkin получил реакцию от Letter в Запись звука как на диктофоне   
    https://docwiki.embarcadero.com/CodeExamples/Sydney/en/FMX.AudioRecPlay_Sample
     
  24. Like
    krapotkin отреагировална Martifan в анимация не анимирует по андроидом   
    Ваши проблемы с анимацией могут быть связаны с несколькими вещами.
    Во-первых, стоит отметить, что метод AnimateFloatWait помечен как устаревший, и рекомендуется использовать Ani.TAnimator вместо него.
    Ani.TAnimator.AnimateFloat создает и запускает объект TFloatAnimation. Он устанавливает свойства анимации и начинает анимацию. Однако стоит заметить, что если объект не видим в момент вызова этого метода, анимация не запускается: анимация создается, но не выполняется.
    Вторым фактором может быть то, как Android обрабатывает анимацию. Android может иметь разные характеристики производительности и отображения, которые влияют на то, как анимация выполняется на устройстве.
    Также, есть пример использования анимации в Delphi для Android, который может быть полезен. Get access to over 100 FireMonkey cross platform samples for Android, IOS, OSX, Windows, and Linux!
    Следовательно, я бы посоветовал начать с применения Ani.TAnimator.AnimateFloat вместо AnimateFloatWait, и убедиться, что объект, который вы пытаетесь анимировать, видим на экране во время начала анимации. Если проблема продолжает сохраняться, вам может потребоваться более детальное исследование спецификаций Android и как он обрабатывает анимацию в Delphi.
  25. Like
    krapotkin получил реакцию от AngryOwl в Размер компилируемого файла   
    что за детский сад
    на андроиде приложения весят 400К и при этом используют библиотеки Java на 2G
    это как - маленькие или большие приложения?
    то же с .NET
    Приложение с пустой формой тащит за собой весь функционал, который вы можете использовать, при этом не требуя установки дополнительных run-time библиотек, чем, собсн, всегда и хороша была Делфи
    mp3 файл весит 8-10 мб. а 5 сек видео "опы - 120.  Не видел я чтобы кто-то плакал по этому поводу
×
×
  • Создать...