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

gonzales

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

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

  • Посещение

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

    27

Весь контент gonzales

  1. Продолжаем разговор... Вчера радостные мужеложцы из Apple повизгивая сообщили, что с марта 2019 перестают принимать приложения с SDK ниже 12.1. Ну, думаю, какие проблемы, скачал новый пакет SDK, запускаю, получаю file not found: /usr/lib/system/libcache.dylib for architecture arm64 Гугления и педалирования темы показали, что проблема была пофиксена каким-то там хотфиксом к 10.2. Но проблема в том, что пока не могу использовать ни 10.2, ни 10.3, в силу того, что под новые стандарты придется переписать половину кода. А выложить новую версию необходимо. Проблема решилась достаточно просто, вдруг кому пригодится. Фокус в том, что SDK для всех версий Delphi хранятся в одном месте. Соответственно сначала скачал SDK для 10.1, а затем тоже самое для 10.3. Делфа спросила, заменять ли ей файлы, соглашаемся. После чего все компилируется на ура с SDK 12.1.
  2. ЗЫ. Я конечно могу открыть новое соединение и послать туда запрос и закрыть его, но хотелось бы все делать через одно соединение
  3. Че то я все таки торможу. Пните плиз в нужную сторону. У меня есть TCPClient, который открывает сокет с сервером, и пока сокет открыт сервер шлет туда информацию об обновлении. Также через этот же сокет идут управляющие команды от клиента к серверу. Как мне это все добро запихнуть в поток? Раньше, когда я делал обновление по таймеру, конструкция была такая MasterTask := TTask.Run( procedure begin try IdTCPClient := TIdTCPClient.Create(nil); TThread.Synchronize(nil, procedure begin IdTCPClient.Host := Form1.Client1.Host; IdTCPClient.Port := Form1.Client1.Port; Form1.MasterTimer.Enabled := false; t_out := Form1.TimerBuffer; l := Length(Form1.RoomElements); end); if l > 0 then begin if IdTCPClient.Connected = false then IdTCPClient.Connect; if IdTCPClient.Connected = true then begin IdTCPClient.Socket.Write(t_out, Length(t_out)); IdTCPClient.Socket.WriteBufferFlush; SetLength(t_in, l * 8); IdTCPClient.Socket.ReadBytes(t_in, l * 8, false); for j := 0 to l - 1 do begin if MasterTask.Status <> TTaskStatus.Canceled then begin TThread.Synchronize(nil, procedure begin //обновление элемента end); end; end; IdTCPClient.Disconnect; IdTCPClient.Free; TThread.Synchronize(nil, procedure begin Form1.MasterTimer.Enabled := true; end); except on Er: Exception do begin //исключение end; то есть внутри TTask создавался TCPClient и там же умирал. Но теперь мне этого не надо, нужно чтобы клиент жил все время, пока активно приложение. Если я сделаю While not (Terminated or fStopped) do то я смогу опрашивать клиента, на предмет прихода ответа от сервера. А как мне в потоке послать запрос? Надеюсь понятно объяснил вопрос
  4. Не путайте людей! Все работает и на Берлине, нужно лишь внести изменения в манифест. Сам не смог перейти на РИО, целая гора косяков (((
  5. Получилось сделать с помощью обычного таймера procedure TForm1.Timer1Timer(Sender: TObject); begin if client.Connected then if Client.Socket.InputBufferIsEmpty = false then memo1.Lines.Add(Client.Socket.ReadChar); end; Но это как-то не по православному)) Неужели нет нормального метода получения данных.
  6. я попробовал добавить к клиенту idIOHandler и IdConnectionIntercept у которого есть метод OnRecive, но что-то он не отрабатывает, когда я с сервера шлю что-либо. Или я не умею его правильно настроить.
  7. Как отправить понятно. На стороне сервера я фиксирую клиента и отправляю в него. Как на стороне клиента получить эту информацию? Сейчас я посылаю запрос и жду ответ. Если ответ не пришел, ошибка по таймауту. SetLength(t_out, SizeOf(HTTPRequest)); Move(HTTPRequest, t_out[0], SizeOf(HTTPRequest)); Client1.Socket.WriteBufferOpen; Client1.Socket.Write(t_out, 13); Client1.Socket.WriteBufferFlush; Client1.Socket.WriteBufferClose; SetLength(t_in, SizeOf(THTTPAnswer)); try Client1.Socket.ReadBytes(t_in, SizeOf(THTTPAnswer), false); Client1.Disconnect; А как сделать, чтобы принимать информацию в произвольный момент времени?
  8. Да, ковыряю WebSockets, но пока без особых успехов. Сервер TCP, крутится на контроллере. А не подскажите подробнее, что значит открыть сокет на прослушку? На стороне клиента использую idTCPClient. Вы имеете ввиду создавать TCPServer и слушать порт?
  9. Да, забыл, клиенты должны работать на Андроиде и iOS, поэтому FMX конечно же.
  10. Доброго времени суток! Интересует вопрос, больше по технологии, чем конкретной реализации. Задача такая, на форме есть много компонентов (это динамический массив, условно при разных условиях отображаются разные компоненты), отображающих информацию, хранящуюся на сервере. Соответственно для отображения изменений есть таймер, который раз в секунду кидает на сервер запрос, для каких компонентов нужна информация. Получая и распарсивая ответ меняю информацию на визуальных контролах. Нет ли технологии, чтобы сервер сам отдавал мне информацию, когда у него изменяется тот или иной компонент? И еще примечание, клиентов у сервера может быть несколько, на всех естественно должна отображаться актуальная информация. Заранее спасибо, буду благодарен за любые идеи
  11. спасибо большое! буду проверять!
  12. А не подскажете случайно, как работать с пушами в 10.3. Код, который работал на 10.1 тут не работает. Нужно ли получить разрешение для работы с уведомлениями?
  13. Тогда почему не отрабатывает вот такой код Application.CreateForm(TForm27, Form27); TThread.Synchronize(nil, procedure begin Form27.ProgressBar1.Visible := false; Form27.StartUpLabel.Text := 'Ждите...'; Form27.Visible := true; end); Задача простая, при выполнении ресурсоемкого куска кода показать пользователю форму ожидания. В 10.1. Это было сделано просто Application.CreateForm(TForm27, Form27); Form27.ProgressBar1.Visible := false; Form27.StartUpLabel.Text := 'Ждите...'; Form27.Visible := true; Application.ProcessMessages; И все прекрасно работало на Винде, Андроиде и iOS
  14. Тоже столкнулся с отсутствием Application.ProcessMessages в 10.3 Удалось ли найти какое-то решение?
  15. Есть подозрение, что в 10.3. перестала работать функция Application.ProcessMessages. В 10.1 для Андроид она прекрасно работала, а теперь, как будто ее нет. Формы не перерисовываются, вовремя не отображаются те или иные вещи. На что можно заменить ее. Пример такой, создаю форму в рантайме и показываю ее пользователю. Application.CreateForm(TForm27, Form27); Form27.ProgressBar1.Visible := false; Form27.StartUpLabel.Text := 'Ждите...'; Form27.Visible := true; Application.ProcessMessages; На андроид в 10.3. форму не вижу, хотя остальной код отрабатывает.
  16. 5. Возникла новая ошибка на Адроид 6.1. Error in context method 'DoCopyBits' Подозреваю, что это связано с отрисовкой иконок. Буду разбираться
  17. Спасибо большое, Вы мне очень помогли, в самом низу комментариев нашел решение своей проблемы. Итак, все что нужно было сделать - выставить на форме Quality - SystemDefault У меня стояло HighQuality Итак первый пункт можно считать решенным!
  18. Пока нет, борюсь с первым пунктом, как самым критичным. За наводку с удалением проекта спасибо - буду пробывать
  19. Доброго времени суток! Возникла необходимость переехать на 10.3 (дабы поддерживались пуши на устройствах с андроид8 ну и вообще) Ну и как водится огребаю кучу багов и несовместимостей. В этой теме буду писать и том, что нашел, как боролся. Может еще кто-то что напишет. Во первых, под Винду все запустилось нормально, по крайней мере явных косяков я сходу не увидел, уже плюс. А вот с Андроидом куча проблем 1. Не смог запустить программу на Андроид 6.1. У меня реализован SplashScreen, так вот при показе главной формы получаю Cannot create OpenGL context for 'eglMakeCurrent' откуда ноги растут пока не понятно. На Андроид 8.0 все запустилось нормально. Пробывал понижать версию SDK - не помогло, есть подозрение, что глючит какой-то из визуальных компонентов, дебаг не помог, весь код по onshow главной формы отрабатывает, а затем делфа начинает показывать окно CPU и в какой-то момент выскакивает ошибка. 2. На Андроид 8 не работает SplashScreen - то есть вообще. Показывает заставку и затем сразу главное окно, пока не ясно что это. 3. Не работают ПУШи - не формируется Токен, вообще не стартует сервис пушей, говорит, чего-тоне хватает, буду разбираться. 4. Есть у меня прозрачная форма, на которой лежит прямоугольник с прозрачностью (Opacity). Так вот он показывается просто черным, прозрачность не отрабатывает, хотя на непрозрачной форме работает корректно. В параметрах Brush прямоугольника не отображаются правильно значения цвета.
  20. Спасибо. Попробую на досуге
×
×
  • Создать...