Tumaso
-
Постов
333 -
Зарегистрирован
-
Посещение
-
Победитель дней
39
Сообщения, опубликованные Tumaso
-
-
Всё никак не могу разобраться, как все таки отправлять данные через TNetHTTPClient на сервер, сжатые gzip
В исходниках модуля System.Net.HttpClient видно, что компонент умеет распаковывать сжатые данные, пришедшие от сервера. А как самому правильно сжать отправляемые данные на сервер?
-
Увы, но нет проблем вытащить пароль из apk, если он лежит в открытом виде. Подпись приложения этому никак не препятствует (подпись гарантирует только отсутствие изменений, но не более того).
Пароль внутри кода однозначно нужно хранить в разобранном виде, чтобы его было как можно сложнее узнать. Идеальный вариант - получать зашифрованный пароль с сервера, причем с использованием временных ключей шифрования.
-
2 часа назад, CyberStorm сказал:
Поставил новую версию делфей. Решил перекомпилить свои предыдущие проекты, при вызове рекламного модуля:
BannerAd1.LoadAd;вываливается ошибка: Java class JAdSize could not be found
Если тот же BannerAd создавать в новом проекте - то все Ок.
Как такое может быть?
Попробуй в дереве проекта кликнуть правой клавишей мышки на узле Target platforms->Android->Libraries, в появившемся меню выбрать Revert System Files to Default
И после этого ребилдни проект
-
45 минут назад, Akad сказал:
А есть какие-нибудь демки? Главное, что бы хеловорд apk не весил 5-10Мб и не тормозил на старых аппаратах безбожно, как FMX. И что с сервисами под андроид?
Размер apk/ipa как раз не главное, пусть хелловорд хоть 50 мб весит. Главное чтобы все быстро и надежно работало.
Ждем вебинара.
-
Может поувольнять нахрен всех индусов и отдать разработку в Россию? ))
-
Потому что фрейм это обычный TControl
-
Application.ProcessMessages может и плоха, в FMX в принципе не использую, но вот в VCL помогает решить проблемы с перерисовкой)))
-
-
Токио умеет работать с XCode 9, берлин же только с 8.0, а с 8.1 и 8.2 уже проблемы. И это критично.
-
При онлайне 10 человек точно не упадет, подобные высказывания бред))). Вот 10 тысяч в онлайне один сервер может и не потянуть.
-
Используй библиотеку LiteDAC вместо UniDAC того же разработчика, там включаешь режим Options.Direct := True и внешние библиотеки использоваться не будут
-
33 минуты назад, DMS сказал:
Здравствуйте!
Как сделать такое приложение на Андроиде, чтобы было удобно ввести значения для множества полей TEdit?
На форме больше 10 эдитов друг под другом (различные поля). Когда спускаемся к 8-му эдиту, то при выплывании клавиатуры не видно, что мы вводим в эдите.Как выйти из положения?
Определяй, не перекрывается ли активный TEdit клавиатурой. Если перекрывается, то смещай все едиты вверх, чтобы было видно, в какое поле и что вводишь.
Я бы разместил все TEdit например на TRectangle, ловил событие FormVirtualKeyboardShown, определял размеры перекрываемой области и в случае необходимости двигал TRectangle. А на событие FormVirtualKeyboardHidden возвращал бы все назад.
Тут только есть нюанс - FormVirtualKeyboardShown не всегда вызывается с правильными размерами (Эмбе над этим еще видимо долго работать))) ), поэтому нужно отдельно хранить правильное значение размеров клавиатуры (оно возвращается при первом вызове FormVirtualKeyboardShown)
-
В 03.03.2018 в 04:58, Pulsarius сказал:
Я тоже с этим не согласен. Почти все терминалы, кассовые ПК и т.п. работают на Linux'е и в основном на ARM. Им нужно делать поддержку и x64, и ARM Linux. Иначе действительно смысла нет, если делать только x64. Я больше сторонник C/C++, т.к. это уже вроде как стандарт и код на этом языке можно перенести хоть куда, если конечно не использовать библиотеки среды, а на Delphi перенос уже более ограниченный. Да и, мне кажется, C/C++ более гибкие языки, на них можно писать от системных драйверов режима ядра до высокоуровневых приложений.
Да ты, батенька, оптимист. Большинство терминалов и кассовых ПК работают на винде XP )))
-
TMS Crypto не работает в эмуляторе ios, поэтому например в нашем проекте без реального iphone никак
-
-
Делфи не хватает большого количества примеров из коробки, с решением как можно большего количества возникающих задач при разработке. С этим у Эмбы беда.
-
Подниму тему - для текущей версии Tokyo 10.2.2.2004 до какого NDK с r9c можно обновиться или токио так и работает только с r9c?
-
Код также пишешь, как пишешь на русском языке?
- DMS и Brovin Yaroslav
- 1
- 1
-
-
На iOS при деплое сталкивался с проблемой, что если хотя бы у одного файла указано Startup\Documents\ вместо StartUp\Documents\, то не деплоятся ВСЕ файлы.
-
12 минуты назад, mazayhin сказал:
Только лучше использовать THTTPClient
да, согласен
1 минуту назад, DMS сказал:Tumaso, спасибо!
Получается, необязательно использовать асинхронный NetHTTPClient? Можно использовать синхронный, но запустить во TThread
именно так, только замените TNetHTTPClient на THTTPClient
-
DMS,
простейший пример (без обработки эксепшенов) отдельного класса на базе TThread:Скрытый текстtype TAsyncHttp = class(TThread) private FCritical: TCriticalSection; [volatile] FCommand: string; [volatile] FIsReady: Boolean; FHttpClient: TNetHTTPClient; function GetIsReady: Boolean; procedure SerIsReady(Value: Boolean); function GetCommand: string; procedure SetCommand(Value: string); procedure Post; protected procedure Execute; override; public property Command: string read GetCommand write SetCommand; property IsReady: Boolean read GetIsReady; constructor Create; destructor Destroy; override; procedure Lock; inline; procedure UnLock; inline; end; function TAsyncHttp.GetIsReady: Boolean; begin Lock; try Result := FIsReady; finally UnLock; end; end; procedure TAsyncHttp.SetIsReady(Value: Boolean); begin Lock; try FIsReady := Value; finally UnLock; end; end; function TAsyncHttp.GetCommand: string; begin Lock; try Result := FCommand; finally UnLock; end; end; procedure TAsyncHttp.SetCommand(Value: string); begin Lock; try FCommand := Value; finally UnLock; end; end; procedure TAsyncHttp.Post; var LUrl: string; LSource: TStrings; LResult: TStringStream; begin Lock; try LUrl := FCommand; FCommand := ''; FIsReady := False; finally UnLock; end; LSource := TStrings.Create; try LResult := TStringStream.Create; try FHttpClient.Post(LUrl, LSource, LResult); { todo : здесь добавить код, который возвращает в нужном виде ответ. Можно через Synchronize, можно через callback, а можно просто заполнить дополнительное свойство в этом потоке, а главный поток потом считает при IsReady = True } finally LResult.DisposeOf; end; finally LSource.DisposeOf; end; SetIsReady(True); end; procedure TAsyncHttp.Execute; begin while not Terminate do begin if Command <> '' then Post; Sleep(1); end; end; constructor TAsyncHttp.Create; begin inherited Create(True); FCritical := TCriticalSection.Create; FHttpClient := TNetHTTPClient.Create(nil); FHttpClient.Asynchronous := False; FCommand := ''; FIsReady := True; end; destructor TAsyncHttp.Destroy; begin try FHttpClient.DisposeOf; FCritical.DisposeOf; finally inherited Destroy; end; end; procedure TAsyncHttp.Lock; begin FCritical.Acquire; end; procedure TAsyncHttp.UnLock; begin FCritical.Release; end;
В основном потоке создаешь нужное количество экземпляров (можно начать с одного), запускаешь, потом при необходимостии передаешь команду на выполнение/получаешь ответ выполненной команды. например так (простейший пример):
LThread := TAsyncHttp.Create;
LThread.Start;
LThread.Command := 'http://www.site.com/data?param=value';
while not LThread.IsReady do
Sleep(1);
-
Если ты сам руками удаляешь компоненты, то правильнее их будет создавать так:
control := TEdit.Create(nil);
control.Parent := parent;
уничтожаю контролы через .DisposeOf (но с таким способом уничтожения согласны не все)
-
А меня System.JSON полностью устраивает. Ошибок парсинга валидных данных не было ни разу, скорость на нормальном уровне. Гигабайтные данные правда не парсирую, но мне это и не нужно
Тормозит выполнение таймера
в TFloatAnimation
Опубликовано
На винде много примеров реализации таймеров, выдающих дискретность 1 мс. Навскидку - у либы с glscene.org есть подобный таймер, банально сделан через отдельный поток, так что можно обойтись без тюнинга ОС