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

Олег Киреев

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

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

  • Посещение

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

    7

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

  1. Sad
    Олег Киреев получил реакцию от Hevard в Книга. Обучение мобильной разработке не Delphi   
    Здравствуйте.
    У меня она есть. Файл формата pdf 31 мегабайт. Я дополнил его повставлял закладки по главам для быстрого поиска. У меня впечатления самые лучшие. СпасиБО Всеволоду Леонову. Могу прислать на вашу личную почту.
    С Уважением. Олег.
  2. Like
    Олег Киреев получил реакцию от Emma в Tchart дает лишние значения   
    Здравствуйте.
    Прилагаю картинку как это сделать.
    С Уважением.

  3. Thanks
    Олег Киреев получил реакцию от Ingalime в Android 10 и муз.плеер   
    И на моём запустился и не "упал".
    С Уважением. Олег.
  4. Thanks
    Олег Киреев отреагировална Brovin Yaroslav в Как открыть PDF в стандартном приложении просмотра PDF файлов?   
    Открытие любого файла в подходящем приложении в операционной системе Андроид выполняются одинаковым способом.
    Путем посылки намерения (Интент) с указанием файла и типа данных. Далее система ищет по указанному типу файла, какие приложения зарегистрированы на обработку файлов этого типа, Если приложение, которое может обработать этот файл, одно, то запускает активити приложения и передает туда ваш файл/данные. Если приложений несколько - запускает диалоговое окно выбора приложения, которое будет выполнять обработку вашего файла. Резюмируя это, смотрим на код:
    uses System.IOUtils, FMX.Helpers.Android, Androidapi.JNI.Net, Androidapi.JNI.GraphicsContentViewText; procedure TForm7.btnOpenPDFClick(Sender: TObject); const SAMPLE_PDF_FILENAME = 'example.pdf'; var Uri: Jnet_Uri; OpenLinkIntent: JIntent; PDFFileName: string; begin PDFFileName := TPath.Combine(TPath.GetDocumentsPath, SAMPLE_PDF_FILENAME); { Внутренний доступ} Uri := StrToJURI(PDFFileName); // Формируем намерение об открытии файла в стандартном приложении OpenLinkIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri); // Устанавливаем тип данных OpenLinkIntent.setType(StringToJString('application/pdf')); OpenLinkIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP); // Запускаем приложение и передаем ему наше намерение try SharedActivity.startActivity(OpenLinkIntent); except on E: Exception do ShowMessage('Не удалось открыть PDF. В системе нет доступных приложения для просмотра pdf'); end; end; В этом код pdf файл берется из самого пакета приложения (я включил pdf файл в пакет приложения).
    Если вам нужно вытащить файл в любом другом месте, просто укажите в PDFFileName полный путь к файлу в файловой системе вашего устройства.
     
    Проект доступен тут: OpenPDF.zip
  5. Thanks
    Олег Киреев отреагировална slav_z в FMX: Скроллинг и нажатия   
    Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
    Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,

    получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
    Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
    Делаем следующее:

    Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
    Удачи!
    https://github.com/slav-libx/scroll-click.git
  6. Thanks
    Олег Киреев получил реакцию от Ingalime в Android 10 и муз.плеер   
    Да и у меня "падает".
    С Уважением. Олег Киреев.
  7. Thanks
    Олег Киреев получил реакцию от Ingalime в Android 10 и муз.плеер   
    И в этой новой версии OS сообщает "В приложении произошёл сбой".
    С Уважением. Олег.
  8. Thanks
    Олег Киреев получил реакцию от Ingalime в Android 10 и муз.плеер   
    На всякий случай. У меня устройство Самсунг Галакси J6 с Андроид 10. После клика на иконку идёт запрос на разрешение. Я разрешаю а потом приложение само закрывается и OS сообщает что приложение загрузилось не корректно и предлагает его закрыть.
    С Уважением. Олег.
  9. Thanks
    Олег Киреев получил реакцию от Ingalime в Android 10 и муз.плеер   
    Здравствуйте.
    Ваше приложение на моём устройстве с OS Android 10 "падает".
    С Уважением. Олег.
  10. Thanks
    Олег Киреев отреагировална Billy Bones в Владелец файла и права доступа   
    Коли хвастался, значит нужно показать как это делается:
    Пишем такое консольное приложение:
    Program ownof; {$APPTYPE CONSOLE} {$R *.res} Type kernel_ulong_t = UInt64; kernel_long_t = Int64; TStat = packed record st_dev : kernel_ulong_t; st_ino : kernel_ulong_t; st_nlink : kernel_ulong_t; st_mode : UInt32; st_uid : UInt32; st_gid : UInt32; __pad0 : UInt32; st_rdev : kernel_ulong_t; st_size : kernel_long_t; st_blksize : kernel_long_t; st_blocks : kernel_long_t; st_atime : kernel_ulong_t; st_atime_nsec : kernel_ulong_t; st_mtime : kernel_ulong_t; st_mtime_nsec : kernel_ulong_t; st_ctime : kernel_ulong_t; st_ctime_nsec : kernel_ulong_t; __unused : array[0..2] of kernel_long_t; end; (* Функция mystat реализована на ассемблере. Откомпилирована в Linux и объектный файл перенесен в проект. *) function mystat(path_to_file : PAnsiChar; var S : TStat) : NativeUInt; external 'mystat.o' var S : TStat; Begin // Файл a.txt создан руками в том-же каталоге, куда помещается исполняемый // модуль данной программы. mystat('a.txt', S); Writeln('Owner is ', S.st_uid); End. Исходный код для mystat.asm:
    .text # function mystat(path_to_file : PAnsiChar; var S : TStat) : NativeUInt; # # Параметры: # rdi - path_to_file # rsi - @S # # Параметры функции помещаются, в те-же регистры, что и требует интерфейс системных # вызовов - не делаем ничего лишнего ! # # После выхода из режима ядра в регистре rax будет содержаться рузультат работы # системного вызова. Наша функция тоже возвращает рузультат в rax - не делаем # ничего лишнего ! .global mystat .align 16 mystat: movq $4, %rax # поместим номер системного вызова в регистр rax syscall # переходим в режим ядра ret Все данные для написания этой программы получены из исходных кодов ядра Linux 5.11.10.
    Данная реализация привязана к нескольким вещам:
    К архитектуре процессора (т.к. mystat написана на x86_64 ассемблере ) К ядру Linux (т.е. программа не будет работать на других Unix подобных ОС) К структуре с которой работает системный вызов sys_newstat (так называется, та процедура в ядре, что выполнает нужные нам действия). Способу выполнения системных вызовов (сам способ привязан к архитектуре процессора и к ядру ОС) Пока ничего из этого не поменяется всё будет ОК. И никаких Вам libc.
    PS:
    Номер системного вызова и его имя взято из файла arch/x86/entry/syscalls/syscall_64.tbl . Как делать системный вызов написано тут: arch/x86/entry/entry_64.S . Описание структуры взято из файла arch/x86/include/uapi/asm/stat.h  
  11. Thanks
    Олег Киреев отреагировална Billy Bones в Владелец файла и права доступа   
    Этот не подходит, т.к должен быть файл, конкретно, для платформы Linux: lib\linux64\release\Posix.SysStat.dcu.
    В своем прошлом посте, Я, описал процедуру, как самому собрать модуль Posix.SysStat.dcu:
    Создать проект консольного приложения. Скопировать в каталог с проектом файлы (см. список файлов и их расположение в прошлом посте - я его менял добавляя информацию). Включить в проект файл Posix.SysStat.pas - он сам добавится в uses. Добавить платформу Linux64 и сделать её активной. Выбрать кофигурацию Release Собрать консольное приложение - автоматически будет собран Posix.SysStat.dcu - он лежит в подкаталоге проекта linux64\Release. Выложить Posix.SysStat.dcu в lib\linux64\release. Всё.
  12. Thanks
    Олег Киреев отреагировална Billy Bones в Владелец файла и права доступа   
    Компилировать самому модуль Posix.SysStat.pas не нужно, т.к. он уже откомпилирован и лежит в:
    lib\linux64\debug - отладочная версия
    lib\linux64\release - релизная версия
    Компилятор его найдет, если путь к модулю указан в Tools | Options | Language | Delphi | Libraries | Library Path.
    А он, по умолчанию, там указан: $(BDSLIB)\$(Platform)\release
    Проверьте есть ли там откомпилированный модуль и прописан ли путь.
    Если модуля нет, то его можно откомпилировать самому - в каталоге source\rtl лежит файл buildrtl.bat -  он собирает все библиотеки rtl. Процедура его использования не очень прозрачная. Где -то, в документации Embarcadero, написано как его правильно запустить.
    Суть, состоит в том, что перед его запуском, должны быть, правильно, установлены, некоторые переменные, среды окружения.
    Помню, что правил bin\rsvars.bat, и поменял там, все пути в стиле C:\Program Files (x86)\Embarcadero\Studio\21.0\XXXX на C:\RADStudio\XXX.  Где RADStudio получен с помощью mklink /J RADStudio "С:\Program Files (x86)\Embarcadero\Studio\21.0" . Это нужно, т.к. многие утилиты командной строки, например make, не понимают пути с пробелами. Без этого rtl библиотеки не соберутся ! (по крайней мере не собираются c++ rtl, где всё на make построено)
    После того, как соберете rtl библиотеки, просто найдите Posix.SysStat.dcu (релизную версию, конечно ), и положите его в lib\linux64\release.
    Если, вдруг, модуль Posix.SysStat.dcu не соберется, то нужно будет искать, куда его нужно прописать, чтобы он собирался.
    Ха, Ха, Ха - а rll для Linux не собирается с помощью buildrtl.bat - только для Win32, Win64, OSX32.
    Значит нужно самому собрать. Создать свой проект, воткнуть туда исходники, прописать пути, если нужно, и откомпилировать. Изучите исходный код Posix.SysStat.pas - туда куча файлов включается includ'ом.
    На самом деле, к себе в проект (например консольного приложения), нужно скопиповать эти файлы (сохраняя структуру каталогов):
    source\rtl\posix в проекте как posix
        Posix.SysStat.pas
        Posix.SysStatAPI.inc
        Posix.Base.pas
        Posix.SysTypes.pas
    source\rtl\posix\linux в проекте как posix\linux
        BaseTypes.inc
        SysStatTypes.inc
        SysTypesTypes.inc
    Потом включить Posix.SysStat.pas, Posix.Base.pas, Posix.SysTypes.pas так:
    Uses Posix.SysStat in 'posix\Posix.SysStat.pas', Posix.Base in 'posix\Posix.Base.pas', Posix.SysTypes in 'posix\Posix.SysTypes.pas'; Добавляем платформу Linux64 и компилируем - Дело в шляпе.
    Выкладываем скомпилированный модуль в lib\linux64\release и дальше не паримся.
    В RAD Studio 10.4.2 по умолчанию всё на месте. Uses Posix.SysStat прекрасно работает.
  13. Thanks
    Олег Киреев отреагировална krapotkin в Unfotrunately, Project1 has stopped при запуске программы на Android   
    http://docwiki.embarcadero.com/RADStudio/Sydney/en/Android_Devices_Supported_for_Application_Development
    если посмотреть историю документа, то видно что уже в Revision as of 05:59, 29 October 2018 (view source) отсутствует А4.х
  14. Thanks
    Олег Киреев отреагировална krapotkin в Unfotrunately, Project1 has stopped при запуске программы на Android   
    надо прочитать доки и увидеть, что программы предназначены для запуска на Android 5.1+
  15. Thanks
    Олег Киреев отреагировална GASCHE в Сократить путь   
    Ищите в интернете Copy и LastDelimiter.
  16. Thanks
    Олег Киреев отреагировална Slym в отследить изменение файла   
    https://yandex.ru/search/?text=findfirstchangenotification delphi&lr=237
    https://yandex.ru/search/?text=ReadDirectoryChanges delphi
  17. Like
    Олег Киреев получил реакцию от Ingalime в TMemo. Не отображается курсор при изменении размера   
    Можно и на кнопку:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TabControl1.Width := TabControl1.Width+200;
      Memo1.WordWrap := false;
      Memo1.WordWrap := true;
    end;
  18. Like
    Олег Киреев получил реакцию от Ingalime в TMemo. Не отображается курсор при изменении размера   
    У меня помогло так:
    procedure TForm1.FormResize(Sender: TObject);
    begin
     Memo1.WordWrap := false;
      Memo1.WordWrap := true;
    end;
    С Уважением Олег.
  19. Thanks
    Олег Киреев отреагировална GASCHE в Книга. Обучение мобильной разработке не Delphi   
    Основной задачей второго издания данной книги является актуализация представленных примеров относительно текущей версии Embarcadero RAD Studio/Delphi 10.3.2 Rio по сравнению с той, которая использовалась при подготовки первого варианта. Материал книги дополнился новыми возможностями и полезными советами, а также рекомендациями, полученными от читателей первой версии.

  20. Like
    Олег Киреев получил реакцию от Ingalime в Книга. Обучение мобильной разработке не Delphi   
    Здравствуйте.
    У меня она есть. Файл формата pdf 31 мегабайт. Я дополнил его повставлял закладки по главам для быстрого поиска. У меня впечатления самые лучшие. СпасиБО Всеволоду Леонову. Могу прислать на вашу личную почту.
    С Уважением. Олег.
  21. Like
    Олег Киреев получил реакцию от Yarpda в Книга. Обучение мобильной разработке не Delphi   
    Здравствуйте.
    У меня она есть. Файл формата pdf 31 мегабайт. Я дополнил его повставлял закладки по главам для быстрого поиска. У меня впечатления самые лучшие. СпасиБО Всеволоду Леонову. Могу прислать на вашу личную почту.
    С Уважением. Олег.
  22. Thanks
    Олег Киреев отреагировална CyberStorm в Онлайн-курсы   
    Не слышал про курсы, есть хорошая книга Всеволода Леонова "Обучение мобильной разработке на Delphi", данный форум, и неплохой телеграм-канал https://t.me/TFMXGods где сидят гуру которые в одно-момент отвечают на все вопросы (что ставит под сомнение полезность этого форума).
  23. Like
    Олег Киреев получил реакцию от Ingalime в Изменить ширину скроллбара   
    Здравствуйте уважаемый Azaz.
    1. Я извиняюсь но уважаемый Администратор просит в правилах: "
    2.2. Каким должен быть текст вопроса?
    Текст вопроса нужно начать с указания используемой версии RAD Studio, Версии ОС и модель устройства (если речь идет о мобильной разработке)" 2.  У компонента TListBox есть своё свойство-ШоуСкроллБарс.  Достаточно поставить птичку.
    С Уважением. Олег.
  24. Haha
    Олег Киреев получил реакцию от #WAMACO в Апдейт: FastReport FMX 2.7   
    СпасиБО за ответ. Сообщите пожалуйста когда будет готов.
    С Уважением. Олег.
  25. Like
    Олег Киреев получил реакцию от Ingalime в Апдейт: FastReport FMX 2.7   
    Елена.
    Существует ли FastReport для разработки приложений для OS Android?
    С Уважением. Олег.
×
×
  • Создать...