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

#WAMACO

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

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

  • Посещение

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

    27

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

  1. Like
    #WAMACO получил реакцию от Ingalime в Онлайн-курсы   
    Если знаете английский, вышла хорошая книга 
    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
  2. Like
    #WAMACO получил реакцию от Ingalime в Посоветуйте облачную бд   
    http://www.myclouddata.net/#/home
    + компоненты для приятной, комфортной работы с этим хранилищем
    https://www.tmssoftware.com/site/tmsfmxcloudpack.asp
     
  3. Like
    #WAMACO получил реакцию от Ra72 в Не помпилируеться под Ios   
    https://developer.apple.com/downloads/
    потом в настройках XCode поменять на нужный SDK
  4. Thanks
    #WAMACO получил реакцию от Android в Memory Table компонент   
    https://www.devart.com/virtualdac/
  5. Like
    #WAMACO отреагировална gonzales в StatusBar Color   
    Долго бился со следующим, есть три типа устройств: 1. где отсутствует NavBar физически, 2. где он есть и всегда включен, 3. где он есть, но его можно выключить в настройках. В результате добился нормальной работы окраски NavBar на всех типах. Немного изменил код, приведенный Равилем из примера Update2
    function hasNavbar(out navBarHeight: Integer): boolean; // uses Androidapi.JNI.Util, {$IFDEF ANDROID} var Window: JWindowExt; realSize: JPoint; screenSize: JPoint; metrics: JDisplayMetrics; difference, resourceID: Integer; {$ENDIF} begin Result := false; navBarHeight := 0; {$IFDEF ANDROID} metrics := TJDisplayMetrics.Create; realSize := TJPoint.Create; screenSize := TJPoint.Create; Window := GetWindowExt; Window.getWindowManager.getDefaultDisplay.getRealMetrics(metrics); realSize.x := metrics.widthPixels; realSize.y := metrics.heightPixels; Window.getWindowManager.getDefaultDisplay.getSize(screenSize); if realSize.y <> screenSize.y then begin difference := realSize.y - screenSize.y; resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navBarHeight := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID)); if navBarHeight > 0 then if difference < navBarHeight then begin navBarHeight := 0; Result := false; end else Result := true; end else begin navBarHeight := 0; Result := false; end; {$ENDIF} end;  
  6. Haha
    #WAMACO отреагировална Android в RAD Studio 10.3.3 (с поддержкой Андроид 64-бит, macOS Catalina 64-bit, iOS 13)   
    Я не знаю, откуда ты высасываешь. Из пальца или из другого органа. Я не нашел в Сети, что есть Jedi для Firemonkey
  7. Like
    #WAMACO отреагировална dnekrasov в HTML парсер для Firemonkey   
    как-то так
    uses System.RegularExpressions; ... const AHREF = '<a href="([^"]*)"[^>]*>([^<]*)</a>'; var Match: TMatch; s: String; begin Match := TRegEx.Match(ваша HTML строка, AHREF); while Match.Success do begin // здесь что-то делаем //<a href"...>...</a> в Match.Value //Match.Groups[1] - адрес ссылки //Match.Groups[2] - отображаемый текст ссылки Match := Match.NextMatch; end; end  
  8. Like
    #WAMACO получил реакцию от Ingalime в MSacc проблема с подключением   
    киньте на форму компонент драйвера нужного движка БД и все будет ок!
    который с префиксом ....Phys.. 
  9. Like
    #WAMACO получил реакцию от Ingalime в Настройка In-App - когда появляются встроенные покупки?   
    Вот тут все есть и работает
    https://www.jvesoft.com/wp/
  10. Like
    #WAMACO получил реакцию от krapotkin в Web Server под Android   
    Идея не верна! Лучше отказаться от этой затеи!
  11. Like
    #WAMACO отреагировална Losev Andrei в Нестандартные иконки в FMX Premium Styles   
    В конце концов решил проблему за счет замены изображений из FMX Premium Styles на разработанные icons8.com. При этом можно качать с сайта, но удобнее установить их бесплатное приложение Pichon. Условия использования:
    For smartphone apps, please set a link to https://icons8.com in the About dialog or settings. Also, please credit our work in your App Store or Google Play description (something like "Icons by Icons8" is fine).
  12. Haha
    #WAMACO отреагировална Олег Киреев в Апдейт: FastReport FMX 2.7   
    СпасиБО за ответ. Сообщите пожалуйста когда будет готов.
    С Уважением. Олег.
  13. Like
    #WAMACO получил реакцию от Wolfone в TakePhotoFromLibraryAction загрузка видео , GIF   
    Кстати, давно хотел спросить, а можете по шагам рассказать технологию, как Вы пример на Java переводите в Delphi код?
  14. Like
    #WAMACO отреагировална Dmitry_4501 в libbass.so не загружается.   
    Держите, кому нужно. В архиве библиотеки BASS (для Windows и Android), а так же все найденные мною дополнения (У меня есть дополнения не для всех платформ. Например, какие-то дополнения я нашел только под Windows, а библиотеки каких-то дополнений BASS есть не на каждый процессор)
    ВАЖНОЕ ЗАМЕЧАНИЕ: Для дополнений у меня нет юнитов, но их не сложно сделать самому. Просто скачиваем с сайта un4seen необходимые плагины для Windows и переписываем его на динамическую загрузку (LoadLibrary, GetProcAddress и т.д.).
    Библиотеку протестировал, проверил не все функции, но основное все работало прекрасно. Проверял следующее:
    BASS_Init, BASS_StreamCreateFile, BASS_StreamCreateURL, BASS_ChannelPlay, BASS_ChannelPause, BASS_ChannelIsActive, BASS_ChannelGetAttribute, BASS_ChannelSetAttribute, BASS_ChannelGetLength, BASS_GetConfig, BASS_SetConfig, BASS_GetConfigPtr, BASS_SetConfigPtr (вроде все, может что-то упустил). Все работало на Windows и Android.
    Если нужна будет помощь с подключением библиотеки - задавайте вопросы  
     
     
     
    bass.zip
  15. Like
    #WAMACO отреагировална Евгений Корепов в IdTCPClient, IdTCPServer и соеденение   
    Тут все просто - нужно ждать. Ваш код работает корректно только в идеальных условиях. Но если вторая сторона не ответила мгновенно, то вы уже ничего не получите.
    Перед отправкой/получением вам надо проверить наличие соединения функцией FTCPClient.IOHandler.CheckForDisconnect()  - при отсутствии соединения она сгенерит исключение:
    try FTCPClient.IOHandler.CheckForDisconnect(); except on E: EIdException do begin LogError('TUTM5StreamProtocol.Run CheckForDisconnect ERROR ' + E.Message); Reconnect(); end; end; Читать с ожиданием данных можно несколькими способами:
    1. Задавать FTCPClient.IOHandler.ReadTimeout в надежде что в отведенное время что то придет.
    2. Использовать FTCPClient.IOHandler.ReadLnWait() для чтения строки.
    3. Или обрабатывать проверять наличие данных и читать по мере их поступления:
    if FTCPClient.IOHandler.CheckForDataOnSource(FConnectParams.Timeouts.TCPReadTimeout) then читаем....  
  16. Haha
    #WAMACO отреагировална Slym в Как масштабировать Bitmap на смартфоне?   
    За такое

    надо яички в тисочки...
  17. Like
    #WAMACO получил реакцию от Ingalime в [iOS] Приложение запускается на iOS Simulator и тут же закрывается.   
    Только устройство! Что тут еще можно советовать....
     
  18. Like
    #WAMACO отреагировална Евгений Корепов в Delphi FastCGI клиент для php-fpm и подобного   
    Класс для работы с FastCGI серверами, такими как php-fpm.
    Для тех кто не в теме : веб-сервер, к примеру nginx, получает запросы и отправляет их на исполнение FastCGI серверу, к примеру php-fpm, php-fpm получает имя скрипта, параметры, выполняет все и возвращает результат в nginx, который в свою очередь возвращает этот результат запросившему клиенту.
    С помощью класса вы можете так же, выполнять php скрипты на локальном или удаленном сервере.
    Исходники https://github.com/EvgeniyKorepov/FastCGIClient
    Пример delphi
    var FFastCGI : TFastCGI; ... procedure TFormMain.FormCreate(Sender: TObject); var AHost : String; APort : Word; AScriptFileName, ARequest, AContent : String; begin AHost := '10.0.0.4'; APort := 9000; FFastCGI := TFastCGI.Create(AHost, APort); FFastCGI.KeepAlive := True; AScriptFileName := '/opt/xxx.php'; ARequest := 'request=1234567890'; if FFastCGI.Get(AScriptFileName, ARequest, AContent) then Memo.Text := AContent else Memo.Text := FFastCGI.StatusCode.ToString + ' ' + FFastCGI.StatusText; end; пример php 
    <?php header('Content-Type: text/html; charset=utf-8'); if (isset($_REQUEST["request"])) if ($_REQUEST["request"] == "1234567890") { header("Status: 200"); echo 'OK'; } else { http_response_code(400); echo "ERROR"; }  
  19. Like
    #WAMACO отреагировална Евгений Корепов в Запуск демона на Linux   
    Вот просто идеальная статья по запуску демона под Linux http://blog.paolorossi.net/2017/09/04/building-a-real-linux-daemon-with-delphi-part-2/ 
    Помимо объяснения механизма fork с отличными примерами,  есть куча дополнительной наиполезнейшей инфы.
  20. Like
    #WAMACO отреагировална Алексей Данильченко в Отправка файлов через намерение   
    Может кому пригодится. вот решение.
    procedure TfrmSendEmail.SendEmail(); {$IF DEFINED(ANDROID)} var lIntent: JIntent; lJRecipient: TJavaObjectArray<JString>; lURI: Jnet_Uri; lJFile: JFile; lFileName: string; lFilePath: string; {$ENDIF} begin {$IF DEFINED(ANDROID)} lJRecipient:= TJavaObjectArray<JString>.Create(1); lJRecipient.Items[0]:= StringToJString(eEmail.Text); lFileName:= AttachFileName; lFilePath:= System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetSharedDownloadsPath, lFileName); lIntent:= TJIntent.Create; lIntent.setType(StringToJString('application/excel')); lIntent.setAction(TJIntent.JavaClass.ACTION_SEND); lIntent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); lIntent.putExtra(TJIntent.JavaClass.EXTRA_EMAIL, lJRecipient); lIntent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(eSubject.Text)); lIntent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(mEmailMessage.Text)); lJFile:= TJFile.JavaClass.init(StringToJString(lFilePath)); lURI:= TAndroidHelper.JFileToJURI(lJFile); lIntent.setData(lURI); lIntent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((lURI as ILocalObject).GetObjectID)); TAndroidHelper.Activity.startActivity(lIntent); {$ENDIF}  
  21. Like
    #WAMACO отреагировална slav_z в Срабатывает OnClick на ListBox при скроллинге   
    в OnClick элемента списка сделайте проверку:
    procedure TForm1.ListBoxItemClick(Sender: TObject); begin if not ListBox.AniCalculations.Moved then DoItemClick; end;  
  22. Like
    #WAMACO отреагировална Олег Киреев в Приложение (OS Andr) для получения информации расчётным путём об углах в карданном вале v.5.   
    Приложение для получения информации расчётным путём об углах:
    - вертикальной плоскости;
    - в горизонтальной плоскости;
    - объёмный;
    - эквивалентный
     в шарнирах карданных валов на
    основе сделанных замеров на собранном автобусе, троллейбусе, грузовике.
    Может пригодиться работникам сервисных служб, лицам эксплуатирующим грузовую или
    пассажирскую автомобильные техники, лицам не конструкторских служб. 
    Особенно в случае нахождения в месте недоступном к интернету и компьютеру.
    Работает на устройствах под OS Android.
    Существует и более расширенная версия для OS Windows.
    Пожалуйста, с предложениями и пожеланиями обращайтесь к разработчику:
    Кирееву Олегу по тел. +375 29 676 13 84 или пишите на kireevoleg1966@gmail.com.
     Буду рад Вашему любому отзыву.
     С Уважением.
     
     
     
     
     
     
     
     
     
     
     
     
    UgolKardZamer_v5.rar








  23. Like
    #WAMACO отреагировална krapotkin в Свой APK updater. Использование Fileprovider   
    У меня в работе два приложения, и оба они не предназначены для Play market, так как имеют ограниченный круг использования, по сути, чисто внутрикорпоративные. Так что нежелательно и выкладывание их и на альтернативные магазины приложений. 
    Автоматически возникает вопрос обновления. Если в  первый раз мы можем установить приложение сами при помощи админов, то обновлять их не так просто. А контингент пользователей не справится с "скачайте APK по ссылке, найдите, куда его скачал браузер, и запустите вручную именно последний скачанный, а не какой попало"...
    Простейший способ - дать приложению скачать свежую копию с сайта и натравить на полученный файл системный инсталлер.
    Вот только свежие Andoird делать это напрямик запрещают. Нужен filepropvider. Целый день шуровал по мануалам и YT,
    Вот то что получилось  в результате.
    Если у вас 10.3.3 как у меня, уже можно не вносить <provider>...</provider> в манифест и свой файл file_paths.xml (или как вам его советуют назвать в интернетах) в деплой.
    Теперь все это делается хоть несколько странно и однобоко, но автоматически, путем установки галочки Secure File Sharing

    после этого в манифесте автоматически пропишется один из вариантов размещения файлов, которые вы можете найти в интернете. Используется алиас external-path
    файл, показанный на рисунке, создается автоматически самой делфи.

    теперь остается отгадать, какой путь реально подставится вместо "."
    Как показала практика, все пути выглядят не так, как кажется, если исходить из простого здравого смысла. Целый день использования GetHomeDir и других полезных методов TPath завел меня совсем в тупик.
    Оказалось все проще (?)
    st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; ... OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); обратите внимание, в provider_paths мы задаем external-paths, а в коде ищем ExternalCacheDir.!!!  (For.Unbelievably.Creative.Knowers!)
    Потом все просто. FApkUri передаем в интент и запускаем 
    итоговый код примерно таков. (скачивание в потоке с использованием небольшого собственного API, но там ничего важного, можно не обращать внимания)
    procedure TasdSettingsFrame.bDownloadClick(Sender: TObject); begin {$IFDEF ANDROID} bDownload.Enabled := False; DownloadAndRun(); {$ENDIF} end; {$IFDEF ANDROID} procedure TasdSettingsFrame.DownloadAndRun(); begin ttask.Run(procedure var aapi:TasdAPI; st:TMemoryStream; OutputDir: JFile; ApkFile: JFile; ApkUri: Jnet_Uri; path, filename: string; begin st := TMemoryStream.Create; aapi := TasdAPI.Clone(_API); try aapi.OnReceiveData := OnReceiveData; aapi.getApk(st); if aapi.Err.Code=0 then begin OutputDir := TAndroidHelper.Context.getExternalCacheDir(); path := JStringToString(OutputDir.getAbsolutePath); filename := path+'/ASDroid2.apk'; ApkFile := TJfile.JavaClass.init( StringToJstring(filename)); FApkUri := TAndroidHelper.JFileToJURI(ApkFile); st.Position := 0; st.SaveToFile(filename); TThread.Synchronize(nil,procedure begin bDownload.Enabled := true; StartActivity(FApkUri); end); end; finally st.Free; aapi.Free; end; end); end; procedure StartActivity(ApkUri: Jnet_Uri); var Intent: JIntent; begin Intent := TJIntent.Create(); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP or TJIntent.JavaClass.FLAG_GRANT_WRITE_URI_PERMISSION or TJIntent.JavaClass.FLAG_GRANT_READ_URI_PERMISSION); Intent.setDataAndType(apkuri, StringToJString('application/vnd.android.package-archive')); TAndroidHelper.Activity.startActivity(Intent); end; procedure TasdSettingsFrame.OnReceiveData(const Sender: TObject; AContentLength: Int64; AReadCount: Int64; var Abort: Boolean); begin tthread.Synchronize(nil, procedure begin pb1.Max := AContentLength; pb1.Value := AReadCount; end); end; {$ENDIF} Вопросы остались конечно, почему так странно с каталогами, но выяснять пока нет желания. Работает - не трожь.
    Всем удачи.
    UPD.
    Для того, чтобы системный инсталлер запускался, нужно не забыть отметить еще одну галочку

     
     
     
     
     
  24. Like
    #WAMACO отреагировална Brovin Yaroslav в Android 64 ошибка "External exception 1."   
    В общем исправление проблемы простое:
    Добавляете в свой проект файл FMX.Helpers.Android.pas. Находите там строчку:   FTimerHandle: Cardinal; Меняете ее на: FTimerHandle: TFmxHandle; Собираете и проблемы больше нет.
  25. Like
    #WAMACO получил реакцию от Ingalime в Проблема с выделением текста в Edit, Memo при использовании StyleBook в Android   
    Использовать правильные стили. Ошибка в самом стиле.
×
×
  • Создать...