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

brunnengi

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

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

  • Посещение

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

    21

Сообщения, опубликованные brunnengi

  1. 4 часа назад, OnePeople сказал:

    Напишите полный код что за куски? Так быстрее будет понятно что не так

    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects;
    
    type
      TForm1 = class(TForm)
        Path1: TPath;
        procedure FormCreate(Sender: TObject);
        procedure Path1MouseEnter(Sender: TObject);
        procedure Path1MouseLeave(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.fmx}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      path1.Data.Clear;
      path1.Data.MoveTo(TPointF.Create(0, 0));
      path1.Data.LineTo(TPointF.Create(50, 0));
      path1.Data.LineTo(TPointF.Create(50, 50));
    end;
    
    procedure TForm1.Path1MouseEnter(Sender: TObject);
    begin
      Path1.Stroke.Thickness := 5;
    end;
    
    procedure TForm1.Path1MouseLeave(Sender: TObject);
    begin
      Path1.Stroke.Thickness := 1;
    end;
    
    end.

     

     

    Полный код.

     

  2. Здравствуйте.
    Кинул TPath. Размер 100 на 100.
    Рисую путь (черный цвет на рисунке). Повесил на TPath события: OnMouseEnter и OnMouseLeave;
    События срабатывают как при наведении на черную линию, так и на красную область (подкрасил чтобы было понятно).
    Как создать такую ломанную что бы события мыши не срабатывали при входе в красную зону, а только при наведении на черную линии?
    Ну за исключением самого очевидного варианта - замкнуть линию обратным ходом.
    Может есть какое-то правильное решение?

     

     

    image.png.c0d3857461d416fd2820ac0b97f7e75d.png

  3. Будем отталкиваться от мысли что обычные браузеры из под винды тоже через Tap не пашут.
    У вас стоит инфомат. Если у вас там просто текст и кликане по элементам не требуется,  а просто листают вниз текст, то можно сохранить как картинку или pdf и положить в vertdscroll. А уже потом обрабатывать самому tap и свайпы.
    Но в целом, вообще, эта работа, больше по части фронтовика, т.е. фронтенд разраба. Ему ничто не мешает сделать ветку сайта с JS кодом который запрещает выделение текста на странице, а сролл делать либо по клику какой нить круглой кнопки внизу по центру странице или обработать зажатие ЛКМ, свайп вверх или вниз и отпускание. 

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

    Но повторюсь что ПО, exe файл куда лучше пашет. Получаете с сервера разметку текста, картинки спокойно отображаете у себя. В FMX это вообще задачка три-семь дней, если речь именно о инфомате.

  4. В 06.03.2021 в 16:36, Razmir сказал:

    да, тоже думал о таком варианте, даже накидал код, но удалил его, так как такой вариант оказался не приемлем,  возникает несколько проблем, например сортировка, несколько колонок и так далее, конечно это все можно решить созданием тонны кода, но зачем тогда стандартные компоненты, если их нельзя использовать?

    ну не знаю про тонны кода. Не вижу где тут будет много кода.
    Сортировка это дело для StringList или Dictionary и т.д. смотря чем пользуетесь.
    А когда список есть или он поменялся, то просто отображаем его в чем хотим. Т.е. сначала подготавливаем данные, а потом уже отображаем.
    Просто по мне как раз таки layout и элементы в них дают большую свободу, как в стиле так и в функциях. Но тут уже всё на ваше усмотрение.
     

  5. 1 минуту назад, slav_z сказал:

    на моем проекте при компиляции в 10.4.1 выдало  [DCC Fatal Error] XXXXXX.Core.pas(446): F2084 Internal Error: URW1237

    а другой проект просто завис после показа активити...  пока рано на 10.4 что-то делать... 

    Согласен.
    Версия 10.3.3 очень стабильная. А вот эта 10.4 и 10.4.1 ещё темная лошадка.

  6. Я 10.4 поставил на VM, в надежде порешать вопрос с запуском на Andoid 10, но у меня в проекте используются платные компоненты срок обновления которых как раз закончился. А те что были скачены уже на ставятся на 10.4.1
    Поэтому такой фикс мне прям помог. К тому же ждать официальный фикс от Embacadero смысла нет, его не будет. Так что придется ручками повозиться.
    Да вы далеко продвинулись, практически поняли куда копать, у меня увы такие копании ни к чему не привели.

  7.  Здравствуйте.
    Некоторые пользователи Delphi 10.3 столкнулись с тем что даже при указании SDK 29 в манифесте проекта, при запуске скомпилированного приложения на платформе Android 10 происходило его падение.
    В августе 30 числа 2020 года было дано решение как пофиксить эту проблему.
    Переход на версию Delphi 10.4 не для всех является приемлемым решением, по разным причинам, к примеру у кого то платные компоненты и нет возможности обновиться до актуальных версий.
    Ниже представлен перевод статьи. В конце будет ссылка на оригинал.
    Приведенное здесь решение нацелено на обновление функции 'dlopen' в файле 'ICU.inc' (он включен в файл 'System.pas'). Вот шаги, необходимые для решения указанной проблемы:

    1. Откройте проводник и перейдите в папку по следующему пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source
    2. Скопируйте файлы из архива "missing_source_files.zip", который приложен в посту, в папку source из пункта "1" (комментарий от переводчика: в "missing_source_files.zip" лежит папка "rtl" в которой две папки - "posix", "sys". Лично я сделал сначала backup папки rtl из папки source, что и вам советую. Затем скопировал rtl папку из "missing_source_files.zip" и вставил в папку source)
    3. Переходим по пути: C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys
    4. Открываем файл "ICU.inc" в текстовом редакторе (пожалуйста, сделайте backup файла 'ICU.inc' для пущей безопасности). (комментарий от переводчика: орудовать в этой папке без прав админа не вариант. Поэтому я советую сначала скопировать файл "ICU.inc" куда нибудь в другое место, к примеру в папку Documents и там уже открыть его в том же Блокноте и сделав необходимые изменения сохранить файл и затем уже переместить его в C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\sys с заменой)
    5. В текстовом редакторе надо изменить функцию InitICU:
      Было вот так:
      Спойлер
      
      function InitICU: Boolean;
       
      ...
       
      begin
        ICUVersionNumber := -1;
        Result := False;
      {$IFDEF MACOS}
        HICUUC := dlopen('/usr/lib/libicucore.dylib', RTLD_LAZY);
        HICUI18N := HICUUC;
      {$ELSEIF defined(LINUX)}
        HICUUC := OpenICU_Lib('libicuuc.so');
        HICUI18N := OpenICU_Lib('libicui18n.so');
      {$ELSEIF defined(ANDROID32)}
        HICUUC := dlopen('/system/lib/libicuuc.so', RTLD_LAZY);
        HICUI18N := dlopen('/system/lib/libicui18n.so', RTLD_LAZY);
      {$ELSE defined(ANDROID64)}
        HICUUC := dlopen('/system/lib64/libicuuc.so', RTLD_LAZY);
        HICUI18N := dlopen('/system/lib64/libicui18n.so', RTLD_LAZY);
      {$ENDIF}
      
      ...
       
      end;

       

      А сделать надо что было вот так:
       

      Спойлер
      
      function InitICU: Boolean;
       
      ...
       
      begin
        ICUVersionNumber := -1;
        Result := False;
      {$IFDEF MACOS}
        HICUUC := dlopen('/usr/lib/libicucore.dylib', RTLD_LAZY);
        HICUI18N := HICUUC;
      {$ELSEIF defined(LINUX)}
        HICUUC := OpenICU_Lib('libicuuc.so');
        HICUI18N := OpenICU_Lib('libicui18n.so');
      {$ELSE defined(ANDROID)}
        HICUUC := dlopen('libicuuc.so', RTLD_LAZY);
        HICUI18N := dlopen('libicui18n.so', RTLD_LAZY);
      {$ENDIF}
       
      ...
       
      end;

       



       

    6. Сохраняем сделанные изменения в файле "ICU.inc"

    7. Возвращаемся в проводник и переходим в папку %USERPROFILE%

    8. Скопируйте файл "build.bat" из архива "build_script.zip" , который приложен в этому посту в папку из пункта 7.

    9. Запустите от имени Администратора файл "build.bat". (Он создаст папку %USERPROFILE%\build в которой будет несколько папок с файлами. Из них нам нужны будут только System.o, но об этом ниже)

    10. Возвращаемся в проводник и переходим в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug

    11. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\debug в папку из шага 10 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

    12. Теперь переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\release

    13. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android\release в папку из шага 12 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

    14. Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\debug

    15. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\debug  в папку из шага 14 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

    16. Переходим в проводник в папку C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android64\release

    17. Скопируйте файл "System.o" из папки %USERPROFILE%\build\android64\release в папку из шага 16 (не забывайте сделать backup всех файл что вы заменяете, на всякий случай).

     

    На этом всё. Автор данного перевода лично прошел по всем шагам и сделал всё как было сказано, а также протестил на приложении что уже было в PlayMarket'е но не запускалось под Android 10. Я его обновил и запустил как на Android ниже 10, так и на Android 10. 

    ЕСЛИ ВЫ НЕ ДОВЕРЯЕТЕ ПЕРЕВОДУ И/ИЛИ ВЫЛОЖЕННЫМ ФАЙЛАМ, ТО НИЖЕ ДАНА ССЫЛКА НА ОРИГИНАЛ СТАТЬИ
    // файлы выложенные здесь, взяты с форума где оригинал статьи.

    Ссылка на оригинал https://quality.embarcadero.com/browse/RSP-27218
    Если нет логина, то под споллером скрины экрана с форума ссылки выше:
     

    Спойлер

    image.thumb.png.b71b609bf99c0164cb19ba21f62332f4.png

    image.thumb.png.e0827356357116ddafe297489c9efe03.png

     

     

    Отдельное спасибо пользователю Stanislau Ihnatovich за сообщение в Telegram о том что есть решение

     

    build_script.zipmissing_source_files.zip

     

  8. 2 минуты назад, slav_z сказал:

    оно? 

    422627308_.png.9220659d6df0abe7bdf75367f65238f7.png

    КАКОЙ ФИКС??????????????

    Да, оно. Это приложение собиралось на Delphi 10.3.3 после фикса. Фикс должен был решить проблему именно с крашем на Android 10. Я предположил что и на Android 11 тоже попрет.
    Ниже ссылка на пост, там дается ссылку на форум fgx где есть руководство как сделать fix среды Delphi 10.3.3

     

  9. Я сделал фикс на Delphi 10.3.3 для Android 10. Вот ссылка на приложение из PlatMarket. Прошу установить и отписаться пашет ли оно. Оно не требует прав и там только кнопка и поле ввода.
    https://play.google.com/store/apps/details?id=ru.fgx.test11_10_3_3_with_fix_android10

  10. В 15.06.2017 в 09:15, Равиль Зарипов (ZuBy) сказал:

    во первых: синхронизация сделана не правильно

    во вторых: в примерах студии есть демка с отображением индикатора загрузки

    в третьих: создание TIdHTTP (лучше заменить на THTTPClient) нужно делать в потоке

     

    код на коленке, без TThread

    
    // uses System.Threading
    TTask.Run(
    procedure 
    var 
      aHTPP: THTTPClient;
      aStream: TStringStream;
      aResult: String;
    begin
      aResult := ''; 
      aHTPP := THTTPClient.Create;
      aStream := TStringStream.Create('', TEncoding.UTF8);
      try
    	aHTTP.Get('урл://', aStream);
    	aResult := aStream.DataString;
      finally
    	FreeAndNil(aHTPP);
    	FreeAndNil(aStream);
      end;
      
      TThread.Synchronize(TThread.CurrentThread, 
    	procedure 
    	begin 
    	  Memo1.Text := aResult;
    	end)
    end)

     

     

    Подскажите пожалуйста, если нет связи или запрос шел слишком долго, то как получить информацию об этом? 

    Сейчас при отключенном интернете, вллбще ни каких сообщений не выходит и код в секции  "TThread.Synchronize" не отрабатывает?

×
×
  • Создать...