krapotkin
Пользователи-
Постов
2 184 -
Зарегистрирован
-
Посещение
-
Победитель дней
209
Весь контент krapotkin
-
означать это может все что угодно windows использует минимум три разных исторических системы для работы с мультимедией Какой конкретно она воспользуется в этот раз - можно и разобраться с применением разных инструментов. Но вопрос один - вам шашечки или такси ехать? Все норм плееры тащат с собой целую тучу DLL для воспроизведения всех форматов. Если бы было все хорошо, этого бы не было в принципе. Поэтому моя рекомендация - как сделать, чтобы всегда работало. А если хотите узнать почему иногда (чаще всего) не работает - читайте MSDN и проводите эксперименты. (Делфи инструментов для этого не найдете)
-
Это зависит исключительно от набора установленных у Windows кодеков. Поэтому использовать этот компонент абсолютно рисковое мероприятие. Лучше взять что-то специальное типа PasLibVlc
-
ну вот тут как раз и вылезет то, что всегда говорят - разделяйте данные и визуализацию все идет нормально, работа с компонентами и т.д. в целом это достаточно дешевые операции и тут - бах - сохранение данных в файл. а это уже не так быстро если есть возможность, нужно что-то выполнять, работать с переменными, файлами и т.д. а потом вызывать процедуру, которая разом обновит интерфейс но сама ничего не делает
-
Задача любой синхронизации - не дать разным потокам одновременно изменять данные. Можете себе представить принтер, на который печатают несколько человек. Если не выстроить их в очередь, то результат вам не понравится. Ровно так же и с объектами программы. Если к ним есть доступ у нескольких потоков, то результат взаимодействия почти гарантированно приведет к ошибке программы. Synchronize ставит действие в очередь на ожидание главного потока. Как только тот освобождается, он выполняет это действие и оба потока идут дальше. Главный - своей дорогой, вызвавший Synchronize - своей. Достаточно просто запомнить - экран - один, вызов только через синхронизацию. Более полное объяснение заповедей многопоточного программирования несложно найти в сети)
-
нет не следует там написано, "если вы хотите получать данные прямо в процессе их получения, вместо того чтобы ждать когда скачается всё до конца..." ну собсно, да, можно из того же стрима их забирать в событии OnReceiveData, но зачем вам неполный json ?? это же не звук, не видео, которые можно сразу на экран выводить, не дожидаясь всего кино... но при этом это будет происходить независимо, опять же в другом потоке. ваш поток, где вы вызвали Post, будет ждать окончания загрузки. Асинхронно это будет только через BeginPost
-
Вся эта процедура в моем коде запущена в отдельном потоке через 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. Несколько раз так зависнет, а потом Андроид предлагает удалить ее с устройства, т.к. в ней баги и вообще она плохая. Пользователи не очень любят такое))
-
упс, опечатался, AcceptCharset конечно но тут есть нюансы поэтому я спрашиваю именно что реально приходит на сервер а не что настроено при отправке иногда это не одно и то же. я тоже долго разбирался с этой проблемой и там много всяких нюансов бывает. В последний раз убил два дня, чтобы понять, что реальный сервер делает redirect а по стандарту Delphi делает POST редирект как GET. И это все портило. Пришлось подкрутить немного...
-
нормально у меня работают и Get и Post и кодировка нормально принимается. вам нужно проверить, что же реально уходит на сервер для этого есть эхо сервера например https://docs.postman-echo.com либо направить на любой свой сервер, сделать неск строк скрипт на PHP который покажет все заголовки и контент, который он получил Совершенно непонятно, для чего тут TBytesStream, TStringStream работает абсолютно прозрачно (под капотом ессно то же самое) Ну и делать общение с сервером в главном потоке - странное занятие конечно
-
да ну полноте ж))) я всегда включаю отображение касания и вижу прям кружок, куда касаюсь и система дает координаты центра этого кружка, так что не загоняйтесь с софтом, это хард