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

Ingalime

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

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

  • Посещение

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

    5

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

  1. Like
    Ingalime отреагировална ddr 2 в Векторный стилевой класс   
    Задумался о применении векторных изображений в стилях контролов. На примере TButton, т.е. создать векторный "стилевой" класс по аналогичный с растровым TButtonStyleObject, 
    где для 4-х визуальных представлений будет использовать не TBitmapLinks, а TPath. 
    Минусы:
    Не будет 9parts, а значит только фиксированное соотношение сторон;  Не родное решение (ниже Сомнение№2);  Плюсы:
    Самый очевидный - один стиль с 4-мя картинками, вместо в много раз(10+) больше картинок под разные scale/разрешений экрана/размеров....(в зависимости от выбронного способа избавления от "мыла" для работы приложения на любых экранах и мониторах с любым разрешением и scale);  Меньшая ресурсоёмкость. Будет шустрее работать (как минимум НЕ медленне), что не критично для Windows, но актуально для  большей части комьюнити данного форума, разработчиков под мобильные платформы. Только за счет отказа от 9parts, быстродействие отрисовки вырастет. См. реализацию TCustomStyleObject.DoDrawToCanvas -9 частей отрисовываются всегда(9 вызовов Canvas.DrawBitmap(...)), даже если они фактически не используются. Я, к примеру, 9parts использую только у стиля листбокса, который "внутри" комбобокса. В остальных случаях, дефакто - 1 область + 8 областей нулевой площади. При желении, даже у листбокса можно отказаться от 9parts. Время загрузки Стиля- (+/-)10% по сравнению к растровому решению. Сомнения:
    Поизучав FMX.Styles.Objects.pas "легкой" реализации, что бы, что-нибудь наследовать и пару строк дописать, я не нашёл. Для меня понятное решение, это полностью скопировать(взять за основу "векторных" стиливых классов) TCustomStyleObject и TButtonStyleObject и править... Это 1500+ строк кода. Зная свой темп работы, я для себя переписывание и отладку оцениваю в 2-е недели работы. А потом выйдет 10.4.3 или если сильно повезет, то переставать работать "векторный" класс будет лишь на каждом втором релизе и... goto п.1 ПРЕДЛАГАЮ ОБСУДИТЬ + И - ТАКОГО РЕШЕНИЯ, РЕАЛИЗАЦИЮ,  ЦЕЛЕСООБРАЗНОСТЬ, АЛЬТЕРНАТИВЫ.
  2. Like
    Ingalime отреагировална qz5 в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    Есть еще вариант использовать CEF4Delphi - https://github.com/salvadordf/CEF4Delphi
     
  3. Like
    Ingalime отреагировална haword в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    на таких постоматах есть листание экрана кнопками такой, метод и использовать.
    либо использовать компоненты типа html component library либо thtmlview если vcl и там уже реализовать что надо. 
  4. Like
    Ingalime отреагировална brunnengi в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    Будем отталкиваться от мысли что обычные браузеры из под винды тоже через Tap не пашут.
    У вас стоит инфомат. Если у вас там просто текст и кликане по элементам не требуется,  а просто листают вниз текст, то можно сохранить как картинку или pdf и положить в vertdscroll. А уже потом обрабатывать самому tap и свайпы.
    Но в целом, вообще, эта работа, больше по части фронтовика, т.е. фронтенд разраба. Ему ничто не мешает сделать ветку сайта с JS кодом который запрещает выделение текста на странице, а сролл делать либо по клику какой нить круглой кнопки внизу по центру странице или обработать зажатие ЛКМ, свайп вверх или вниз и отпускание. 

    Однако на моей практике при работе с терминалами и инфоматами, лучше писать именно ПО, а не грузить в браузер свою страницу. А если уж горит через веб браузер, то надо саму страницу адоптировать всё таки, так как даже всё сделать как вы хотите, то тыкать портянки текста вниз и читать никто не будет. Максимум пару экранов в сторону отлистают и всё и интереса больше нет.

    Но повторюсь что ПО, exe файл куда лучше пашет. Получаете с сервера разметку текста, картинки спокойно отображаете у себя. В FMX это вообще задачка три-семь дней, если речь именно о инфомате.
  5. Like
    Ingalime отреагировална krapotkin в В DataSnap TClientDataSet установка фильтра   
    Можно воспользоваться OnFilterRecord
    там все ручное, под контролем
  6. Like
    Ingalime отреагировална krapotkin в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    prerequisite
    /priːˈrɛkwɪzɪt/ noun plural noun: prerequisites a thing that is required as a prior condition for something else to happen or exist. "sponsorship is not a prerequisite for any of our courses"   системные требования по-местному
  7. Like
    Ingalime отреагировална krapotkin в Как сделать управление в TWebBrowser под Win как на мобильных платформах   
    хм. а ведь в каждом браузере есть встроенный режим "смартфон" в панели разработчика
  8. Like
    Ingalime отреагировална Tumaso в Создание HTTP сервера   
    Почему?)
    Я делал в виде демона для ubuntu с использованием indy + mysql + json. Работает уже как два года, полет нормальный, ни разу не крешилось
  9. Like
    Ingalime отреагировална OnePeople в [Android] Воспроизводить аудио   
    По поведению на различных прошивках я не могу вам ни чего сказать вообще не думаю что это связанно с версией андроида, а связанно с прошивкой вендора.
    Выдернул из рабочего проекта, строго не пинать, за корявость)
    1.
    type       {$IFDEF ANDROID}   TMyAudioFocusChangeListener = class;         {$ENDIF}   TForm1 = class(TForm) 2.
    private     { Private declarations }            {$IFDEF ANDROID}     afChangeListener: TMyAudioFocusChangeListener; 3.
    public procedure onAudioFocusChange(focusChange: Integer); end; TAudioFocusChangeEvent = procedure(focusChange: Integer) of object;   TMyAudioFocusChangeListener = class(TJavaLocal, JAudioManager_OnAudioFocusChangeListener)   private     [weak]     FParent : TForm1;     FOnAudioFocusChanged: TAudioFocusChangeEvent;   public     constructor Create(AParent : TForm1);     property OnAudioFocusChanged: TAudioFocusChangeEvent read FOnAudioFocusChanged write FOnAudioFocusChanged;     Destructor Destroy; Override;     procedure onAudioFocusChange(focusChange: Integer); cdecl;    end; 4.
    constructor TMyAudioFocusChangeListener.Create; begin   inherited Create;   FParent := AParent; end; destructor TMyAudioFocusChangeListener.Destroy; begin   inherited; end; procedure TMyAudioFocusChangeListener.onAudioFocusChange(focusChange: Integer); begin   if Assigned(FOnAudioFocusChanged) then     begin       FOnAudioFocusChanged(focusChange);     end;     FParent.onAudioFocusChange(focusChange); end; procedure TForm1.onAudioFocusChange(focusChange: Integer); begin   Form1.Memo2.Lines.Add('focus change:'+focusChange.ToString);    if  (focusChange=TJaudioManager.JavaClass.AUDIOFOCUS_LOSS) then         begin           MusicControl.AudioFocus:=false;           case MusicControl.MusicType of           TMusicType.Music:           if MusicControl.Music.MusicState=TMusicState.Play then               begin                  MusicPlayPause;                  exit;               end;           TMusicType.Radio:           if MusicControl.Radio.MusicState=TMusicState.Play then               begin                  RadioPlayPause;                  exit;               end;         end;         end; end; 5.
    procedure TForm1.GetAudioFocus; begin //   {$IFDEF ANDROID} CallinUIThread(procedure     var      AudioFocusRequest: JAudioFocusRequest;  playbackAttributes: JAudioAttributes;  afHandler: JHandler;  res: integer;  begin afChangeListener:=TMyAudioFocusChangeListener.Create(Self); afHandler:= TJHandler.Create; playbackAttributes := TJAudioAttributes_Builder.Create         .setUsage(TJAudioAttributes.JavaClass.USAGE_MEDIA)         .setContentType(TJAudioAttributes.JavaClass.CONTENT_TYPE_MUSIC)         .build(); AudioFocusRequest:=TJAudioFocusRequest_Builder(TJAudioManager.JavaClass.AUDIOFOCUS_GAIN).Create         .setAudioAttributes(playbackAttributes)         .setAcceptsDelayedFocusGain(true)         .setOnAudioFocusChangeListener(afChangeListener, afHandler)         .build();  res:=FAudioManager.requestAudioFocus(AudioFocusRequest);   if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED')      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_GRANTED then      begin         MusicControl.AudioFocus:=true;         LogCAAdd('AUDIOFOCUS_REQUEST_GRANTED');      end      else if res = TJAudioManager.JavaClass.AUDIOFOCUS_REQUEST_DELAYED then         LogCAAdd('AUDIOFOCUS_REQUEST_DELAYED');      end     );       {$ENDIF} end; P.S. Для android 8 выше! для поддержки ранешних версий Android нужно немного дописать
  10. Like
    Ingalime отреагировална Slym в string   
    тогда везде тыкай {$ZEROBASEDSTRINGS OFF} глобально никак
  11. Like
    Ingalime отреагировална OnePeople в ListViewItem - Изменение цвета фона зависимости от данных в Dataset   
    Align и vertAlign ====== center  ????
  12. Like
    Ingalime отреагировална krapotkin в Android SDK - с чем едят и как бороться?   
    Delphi никакого отношения к вашим SDK/NDK не имеет, она использует то что вы установили/ настроили.
    и даже предлагает установить кое-что, с чем точно умеет работать
    Я начиная с XE5 просто ставил Android Studio и SDK / NDK, чтобы иметь возможность контролировать что где у меня стоит, и не лазить по папкам с путем длиной 2000 знаков.
    Просто без AS нет SDK manager, и настройки делать неудобно. 
    Потом выбираем те версии, которые нужны. (запоминаем, что там Delphi хотела поставить) и прописываем пути в настройках delphi
    К последним версиям это стало работать практически в один клик.
    Выбирать, какие устройства видны или нет, тоже делфи ни при чем. Она все делает через ADB. Если ADB не видит девайс, то ни одна другая программа не увидит тоже. Для решения этой проблемы тоже есть тема на форуме, где правится sys - файл с описаниями доступных VendorId / ProductId в стандартном драйвере Googel ADB
  13. Like
    Ingalime отреагировална CyberStorm в Rad Studio 10.4.2   
    Вышла новая версия на днях.
    Список улучшений: https://blogs.embarcadero.com/announcing-the-availability-of-rad-studio-10-4-2-sydney-release-2/
    Это хорошая новость для всех програмистов!
  14. Like
    Ingalime отреагировална OnePeople в Права на запись   
    Если в манифесте есть     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    то все должно работать!
    Context.getExternalFilesDir(String) и Context.getExternalCacheDir() в эти каталоги должно и без разршения записывать если API 19 или выше!
  15. Like
    Ingalime отреагировална OnePeople в Скопировать файл из root директории   
    У всех, кто запросил разрешение на это;)
  16. Like
    Ingalime отреагировална Tumaso в Не получается скачать файл по https   
    Используй TNetHTTPClient вместо инди, проблема с ssl уйдет.
    При использовании инди и указании https в URL например в виндах требуется две дополнительные dll-ки (libeay32.dll / ssleay32.dll), для андроида libcrypto.so / libssl.so и т.д. Поэтому проще перейти на TNetHTTPClient
  17. Like
    Ingalime отреагировална Tumaso в Android 11   
    Никак.
  18. Like
    Ingalime отреагировална #WAMACO в Онлайн-курсы   
    Если знаете английский, вышла хорошая книга 
    Delphi GUI Programming with FireMonkey
    https://www.packtpub.com/product/delphi-gui-programming-with-firemonkey/9781788624176
    Mastering Delphi Video
    https://www.packtpub.com/product/mastering-delphi-video/9781788624312
  19. Like
    Ingalime отреагировална krapotkin в Онлайн-курсы   
    по первому вопросу все очень просто. к бд мобильное приложение не должно подключаться
    делайте веб-сервер, а к нему подключайтесь через THttpClient
    2 и 3 ответы вам не понравятся))
    камера работает стремно, и никогда не будет работать как в обычных приложениях. но при большом желании можно просто посмотреть в демо-примерах это есть
    а NFC и вообще все, чего не хватает, обычно можно прикупить тут https://www.winsoft.sk/products.htm
  20. Like
    Ingalime отреагировална Slym в TWebBrowser грузит старую страницу   
    Так себе, отключать кеш... можно разово при запуске
    {$IFDEF ANDROID}     var NativeBrowser:JWebBrowser;     if Supports(WebBrowser,JWebBrowser,NativeBrowser) then       NativeBrowser.clearCache(true);   {$ENDIF ANDROID}  
  21. Like
    Ingalime отреагировална Vitaldj в Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)   
    Симулятор не работает, не в курсе,  (Я отлаживаю на живом устройстве) вроде не слышал, что его чинили. 
  22. Like
    Ingalime отреагировална juppy в [Google Play] Создать новый выпуск   
    Приветы!
    Если кнопка недоступна, проверьте, есть черновик версии.
    Его надо либо выпустить для проверки, либо удалить.
    обзор выпусков/панель управления выпусками/выпуски.
    Там будет видно. Если есть черновик будет синяя кнопка "Удалить"
  23. Like
    Ingalime отреагировална krapotkin в Переход 10.3.3 -> 10.4.1   
    несколько странно выглядит код
    response = get(); if (...) then Synchronize(...   response := nil;) а если else, то что с response ?
    10.4.4 Win64/Win32
    тестовый код
    procedure TForm1.btn1Click(Sender: TObject); begin   ttask.Run(     procedure       var         http: THTTPClient;         resp: IHTTPResponse;     begin       http := THTTPClient.Create;       resp := http.Get('http://www.google.com');       TThread.Synchronize(nil,       procedure       begin         m1.Lines.Text := resp.ContentAsString();       end       );       http.Free;     end     ); end; утечек не нашел
    если поставить breakpoint на http.free то в отладчике вызовы IntfClear видны. так что не все так однозначно, как любят говорить в некоторых местах)
  24. Like
    Ingalime отреагировална slav_z в Переход 10.3.3 -> 10.4.1   
    Переход с Delphi 10.3.3 на версию 10.4.1 вызвало проблемы во всех ОС без исключения.
    Начну с простых случаев:
    Linux (Ubuntu)
    При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lgcc_s
    Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install gcc
    При компиляции вылезла ошибка: ld-linux.exe: error: cannot find -lz
    Помогла установка (с последующим обновлением SDK) на ubuntu: sudo apt install zlib1g-dev
    iOS
    Приложение при запуске стало занимать 2/3 экрана по высоте (в новом приложении хелловорд все было хорошо).
    Для решения проблемы надо добавить следующую строку в "старый"  файл info.plist.TemplateiOS.xml

    Windows
    В приведенном ниже коде перестал освобождаться интерфейс Response. При выходе программа сообщала о не освобожденных объектах (ReportMemoryLeaksOnShutdown:=True)

    Вот код (помечена строка которую пришлось добавить для решения проблемы... сломали подсчет ссылок для интерфейсов, а это уже плохо...):

    macOS
    При деплое вылезло следующее:
    [PAClient Error] Error: E0264 Unable to execute '"/usr/bin/codesign" --entitlements "/Users/macbookpro/PAServer/...../Contents/xxxx.entitlements" -s "-" -f "/Users/macbookpro/PAServer/scratch-dir/xxxx.app"' (Error 1)
    [PAClient Error] Error: E0264 Failed to parse entitlements: AMFIUnserializeXML: duplicate dictionary key near line 19
    Не знаю почему и как, но помогло убрать галочку здесь:

    Android
    Самые большие проблемы. В двух словах: ошибка при компиляции F2084 Internal Error: URW1237 или G14486 при использовании обобщенных классов (тот же код для других OC компилируется без проблем).
    Позже покажу пример кода и как получилось уговорить компилятор.
     
     
  25. Like
    Ingalime отреагировална krapotkin в С++Build 10.3 CE. Win10 и Android. Ведение графика работы.   
    неправильный вопрос. кто ж вам подскажет, как делать, если это ваше ТЗ.
    сначала надо придумать картинку, вам самостоятельно.
    можно взять за основу другие программы, посмотреть, как там сделано
    а грид заполнить и клики в нем обработать - дело нехитрое
    и напрягает наличие "администратора" 
    в локальной версии никакого администратора нет ессн
    а в сетевой - нет связи с БД, надо делать промежуточный веб-сервер или пользоваться готовыми типа Firebase
     
×
×
  • Создать...