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

krapotkin

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

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

  • Посещение

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

    209

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

  1. Like
    krapotkin получил реакцию от Ingalime в [Android] Воспроизводить аудио   
    Не нужно использовать AnsiChar ни в Windows ни в Android 
    BASS прекрасно работает с Unicode - строками
  2. Like
    krapotkin получил реакцию от Ingalime в Delphi 10.4 Deployment Manager черный экран   
    IDE 10.4 официально не поддерживает Windows 7. И Microsoft тоже ее не поддерживает. Нет желания - не используйте.
    Есть старые версии. Они всегда с вами)
  3. Like
    krapotkin получил реакцию от Ingalime в Оптимизация поток и AniIndicator   
    логика должна быть такой
    в главном потоке запускаем индикатор и доп. поток.
    При окончании работы доп. поток например в событии OnTerminate прячет индикатор. 
    Всё.
    Если есть прямо жестокая необходимость, чтобы доп. поток как-то отчитывался о прогрессе, пусть отправляет сообщения в главный поток.
    Никаких других знаний друг о друге у обоих потоков быть не должно.
    Это идеальная универсальная схема. Ессн бывают всякие обстоятельства, но в целом она рабочая всегда.
    подробнее я писал об этом тут
     
  4. Like
    krapotkin получил реакцию от Tumaso в Гибкие аналоги TListBox и TListView   
    вот мой вариант со свистелками
  5. Like
    krapotkin получил реакцию от Ingalime в Гибкие аналоги TListBox и TListView   
    вот мой вариант со свистелками
  6. Thanks
    krapotkin получил реакцию от Ingalime в Постоянная подпись маркера   
    примерно так
    r := rectf( bmp.width *0.5, 0, bmp.width, bmp.height*0.5)  поиграть с коэффициентами
  7. Thanks
    krapotkin получил реакцию от Ingalime в Постоянная подпись маркера   
    я сделал больше чем пять на всякий случай
    а карту делать не стал - слишком много геморроя с ключами всякими
    думаю несложно добавить в код
    descriptor.Icon := bmp;
    bmp.7z
  8. Like
    krapotkin получил реакцию от Ingalime в Постоянная подпись маркера   
    ну и не вопрос
    есть модель данных. если она меняется, изменится и отображение.
    метод, создающий маркер, будет включать в себя и создание битмапа для него
    я не помню, можно ли заменять битмап на маркере, скорее всего - да, но если даже нет - удалили старый, создали новый, никто ничего и не заметит даже
  9. Like
    krapotkin получил реакцию от Ingalime в Постоянная подпись маркера   
    почему не подходит?
    берем битмап, выводим на него текст хоть из ини, хоть из инитернета, и отдаем для создания маркера
  10. Like
    krapotkin получил реакцию от Ingalime в Постоянная подпись маркера   
    сделать маркер в виде подписи
  11. Like
    krapotkin получил реакцию от Ingalime в MultiSelect в TDateEdit   
    это почти невозможно реализовать В ОБЩЕМ
    25.10.2020 - 27.10.2020 + 13.04.2021 - 21.04.2021
    как это выбрать, оставаясь в одном экранчике?
    так что сделайте список выборов и каждый из них добавляйте с помощью одного компонента
    за образец дизайна можно взять например выбор дат для билетов на сайте ржд или где-то на продаже авиабилетов. 
    все придумано до нас
  12. Like
    krapotkin получил реакцию от Ingalime в FireDAC или UniDAC   
    один сервер без проблем подключается к другому
    так что на одном - софт, на другом - база
    это секурити
  13. Thanks
    krapotkin получил реакцию от Вадим Смоленский в Проигрывание файлов mp4   
    Из бесплатных видимо его. Больше ничего не попадалось очевидного.
    Есть решения типа ffvcl но я не знаю, работают ли они на FMX
    Думаю, не только в делфи нет. Windows в этом плане отстой. Без спецтехники не заведешь. Хуже всего, что нельзя быть ни в чем уверенным. Если в одном месте работает, то в другом не станет.
  14. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    Задача любой синхронизации - не дать разным потокам одновременно изменять данные.
    Можете себе представить принтер, на который печатают несколько человек. Если не выстроить их в очередь, то результат вам не понравится.
    Ровно так же и с объектами программы. Если к ним есть доступ у нескольких потоков, то результат взаимодействия почти гарантированно приведет к ошибке программы.
    Synchronize ставит действие в очередь на ожидание главного потока. Как только тот освобождается, он выполняет это действие и оба потока идут дальше. Главный - своей дорогой, вызвавший Synchronize - своей.
    Достаточно просто запомнить - экран - один, вызов только через синхронизацию.
    Более полное объяснение заповедей многопоточного программирования несложно найти в сети)
  15. Thanks
    krapotkin получил реакцию от Bob32 в THTTPClient - непонятная ошибка при POST-е json на сервер   
    Задача любой синхронизации - не дать разным потокам одновременно изменять данные.
    Можете себе представить принтер, на который печатают несколько человек. Если не выстроить их в очередь, то результат вам не понравится.
    Ровно так же и с объектами программы. Если к ним есть доступ у нескольких потоков, то результат взаимодействия почти гарантированно приведет к ошибке программы.
    Synchronize ставит действие в очередь на ожидание главного потока. Как только тот освобождается, он выполняет это действие и оба потока идут дальше. Главный - своей дорогой, вызвавший Synchronize - своей.
    Достаточно просто запомнить - экран - один, вызов только через синхронизацию.
    Более полное объяснение заповедей многопоточного программирования несложно найти в сети)
  16. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    синхронная концепция вызова и синхронизация потоков не имеют ничего общего
    то, что программа не пойдет дальше, пока не закончится POST, никак не отменяет того, что вызовы экранных компонентов должны происходить только в главном потоке
    поэтому TThread.Synchronize
  17. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    нет не следует
    там написано, "если вы хотите получать данные прямо в процессе их получения, вместо того чтобы ждать когда скачается всё до конца..."
    ну собсно, да, можно из того же стрима их забирать в событии OnReceiveData, но зачем вам неполный json ?? это же не звук, не видео, которые можно сразу на экран выводить, не дожидаясь всего кино...
    но при этом это будет происходить независимо, опять же в другом потоке. ваш поток, где вы вызвали Post, будет ждать окончания загрузки.
    Асинхронно это будет только через BeginPost
  18. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    Вся эта процедура в моем коде запущена в отдельном потоке через TTask.Run(). (кстати - асинхронно! т.е. сначала скорее всего выполнится до конца FormCreate а потом запустится run)
    Поэтому доступ к визуальным компонентам должен быть только через синхронизацию. Для этого вывод в memo обернут в TThread.Synchronize();
    Далее. В этой форме POST второй параметр - стрим, данные из которого мы передаем на сервер, а третий - стрим, куда придет результат.
    Так как мы знаем, что туда и обратно будет ходить текст, то и выбираем TStringStream, как самый подходящий.
    Т.е. в stRes нас будет ждать результат. Такой же как и в R.ContentAsString
    Если вы хотите отслеживать (track) процесс получения данных, то можно повеситься на OnReceiveData там будет сообщаться сколько байт уже скачано, сколько всего планируется скачать. В этом обработчике можно сделать обновление progressBar, тоже через синхронизацию. Предполагается, что у вас там хотя бы сотни килобайт данных, иначе сомневаюсь, что этот обработчик хоть раз сработает. Ловить окончание с его помощью точно не нужно )
    Все процессы обмена обычно делятся на синхронные и асинхронные. Синхронные - программа дальше не идет, пока не выполнится эта строчка. Асинхронные - команду отдали и пошли дальше. В этом случае обычно задается кусок кода, который выполнится по окончании процесса. 
    THttpClient имеет оба вида вызовов. Обычные синхронные Get, Post и т.д. Асинхронные - BeginGet, BeginPost и т.д.
    http://docwiki.embarcadero.com/Libraries/Rio/en/System.Net.HttpClient.THTTPClient_Methods
    Обычно кроме самого вызова происходит еще много всяких вещей, которые я выношу в отдельный поток, поэтому всегда использую синхронные методы.
    Если вы будете это делать из главного потока, то можно использовать асинхронные. Вопрос удобства и архритектуры.
    Но говорить, что "что там, фигня, один маленький запросик" нельзя. Если сервер недоступен, не отвечает, плохая связь и т.д., ваша программа тупо зависнет сек на 30.
    Несколько раз так зависнет, а потом Андроид предлагает удалить ее с устройства, т.к. в ней  баги и вообще она плохая. Пользователи не очень любят такое))
     
  19. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    httpDemo.7z
    вот демо 
    работает одинаково на Windows и Android
  20. Like
    krapotkin получил реакцию от Bob32 в THTTPClient - непонятная ошибка при POST-е json на сервер   
    код приложен, запускайте и играйтесь до просветления
  21. Like
    krapotkin получил реакцию от Bob32 в THTTPClient - непонятная ошибка при POST-е json на сервер   
    это зависит от того, кто программировал этот сервер)
    но вы же ему по сути передаете "отвечай как хочешь". и первый в списке html
     
     
  22. Like
    krapotkin получил реакцию от Ingalime в THTTPClient - непонятная ошибка при POST-е json на сервер   
    нормально у меня работают и Get и Post и кодировка нормально принимается.
    вам нужно проверить, что же реально уходит на сервер 
    для этого есть эхо сервера например https://docs.postman-echo.com
    либо направить на любой свой сервер, сделать неск строк скрипт на PHP который покажет все заголовки и контент, который он получил
     
    Совершенно непонятно, для чего тут TBytesStream, TStringStream работает абсолютно прозрачно (под капотом ессно то же самое)
    Ну и делать общение с сервером в главном потоке - странное занятие конечно
  23. Like
    krapotkin получил реакцию от Ingalime в Найти положение центра пальца в OnMouseDown   
    да ну полноте ж)))  я всегда включаю отображение касания и вижу прям кружок, куда касаюсь
    и система дает координаты центра этого кружка, так что не загоняйтесь с софтом, это хард
  24. Like
    krapotkin получил реакцию от Ingalime в Отрисовка прямоугольника.   
    Если вы хотите на чем-то рисовать, не надо портить стены, возьмите бумагу, холст там..
    Специально придуман PaintBox именно для ваших целей.
    Но для демо ровно то же самое вместо PaintBox.OnPaint сделал на Form.OnPaint
    Работает одинаково, на windows и android. Уверен, что ровно так же все будет на всех остальных ОС.
    type TForm1 = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); private FCrd: TPointF; public end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin FCrd := PointF(X,Y); end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Invalidate; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color := TAlphaColorRec.Wheat; Canvas.FillRect(rectf(FCrd.X, FCrd.Y, FCrd.X+100, FCrd.Y+100), 0,0,[], 1); end; там в проекте еще дофига разных странных решений и ошибок. Но это уже оффтоп...
  25. Like
    krapotkin получил реакцию от Андрей Рулин в Отрисовка прямоугольника.   
    Если вы хотите на чем-то рисовать, не надо портить стены, возьмите бумагу, холст там..
    Специально придуман PaintBox именно для ваших целей.
    Но для демо ровно то же самое вместо PaintBox.OnPaint сделал на Form.OnPaint
    Работает одинаково, на windows и android. Уверен, что ровно так же все будет на всех остальных ОС.
    type TForm1 = class(TForm) procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); private FCrd: TPointF; public end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin FCrd := PointF(X,Y); end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin Invalidate; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.Fill.Color := TAlphaColorRec.Wheat; Canvas.FillRect(rectf(FCrd.X, FCrd.Y, FCrd.X+100, FCrd.Y+100), 0,0,[], 1); end; там в проекте еще дофига разных странных решений и ошибок. Но это уже оффтоп...
×
×
  • Создать...