Перейти к содержанию
  • Регистрация

krapotkin

Пользователи
  • Публикаций

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

  • Посещение

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

    86

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

  1. не надо вы должны передать в поток ссылки на то, что ДЕЙСТВИТЕЛЬНО нужно. Мемо, лейбл, прогрессбар. А форму - не нужно.
  2. TForm1 это чертежи автомобиля form1 это сделанный по этим чертежам экземпляр не странно, если в чертежах будет упоминаться не колесо автомобиля вообще, а колесо конкретного авто А666ААА77РУ ?
  3. "не надо никаких доп классов" и пошел спагетти-код) если задача не в три строки, то доп. класс - это отличный выбор в сторону ремонтопригодности. тем более под капотом происходит ровно то же самое @gonzales главное в классе потока это procedure Execute; override; вот ее то и нет... и вынос класса потока в отдельный модуль не даст вам ходить в form1, что несомненно, благо. глобальная переменная Client - зло Обращение к переменной Form1 в методе класса Tform1 - не меньшее зло procedure TForm1.ThreadTermProc(Sender:TObject); begin showmessage('ой всё'); end; procedure TForm1.Button1Click(...); var th:TClient; begin th := TClient.Create(true); th.pbar := ProgressBar1; th.OnTerminate:=TreadTermProc; th.Start; end; TClient=class(TThread) public pbar: TProgressBar; procedure Execute; override; end; procedure TClient.Execute; begin for i:=0 to xxxxxx do begin if i mod 1000 = 0 then begin Synchronize(procedure begin pbar.position := i; end); end; end; писал на коленке. не проверял
  4. для того, чтобы попробовать все опции, которые содержат слово Center, у вас ушло бы около 5 минут
  5. возможно потому что это слишком быстро, или нужно просто видеть код целиком. потому что в начале все висит при создании form1 а потом запускается поток. без полного кода и отладки тут нечего сказать, кроме упрощения вот это точно бессмысленно полностью SplashForm.StartUpLabel.text := 'Старт программы'; ... SplashForm.Close;
  6. зачем тут utf8tostring оно и так Unicode чарсет нужно указывать в запросе. в заголовках. тут никаких свойств запроса не заполнено кроме того, зачем вам TNetHttpClient. Это компонент - обертка класса THttpClient. Им проще и пользоваться.
  7. Upd. При Form1Close видимо нужно делать Application.terminate
  8. а зачем тогда создавать form1? может, дать потоку отработать, а на выходе он ее и создаст? кроме того, я не уверен, что application.MainForm := Form1; уже в процессе работы что-то там изменит. да еще и в андроиде. раньше это точно не работало... вообще понятие главной формы на андроид нафиг не сдалось. мое видение - 1. создать обычным образом SplashForm. Она пусть и будет главной. неважно 2. запустить поток, 3. на выходе поток создает и показывает следующую форму. (при этом все равно будет тормозок на время создания формы)
  9. интересно, а какая форма у вас получается главной? и где расположен код SplashForm.LoadProgramm;
  10. вы просто без разделителей склеиваете три разных JSON-массива вам бы каждый из них описать отдельно. да и вообще принято логически законченные участки кода выделять в отдельные функции function GetValuesAsJson($query) { ..... } тогда будет например '{"Arr1":'. GetValuesAsJson($query1). ', "Arr2":'.GetValuesAsJson($query2).', "Arr3":'.GetValuesAsJson($query3).'}' ну и разбор полученного объекта например с помощью XSuperObject. Примеры есть на офсайте https://github.com/onryldz/x-superobject
  11. предположу что ][ - это точно не JSON
  12. для рисования на VCL я использовал библиотеку Asphyre, которая задействовала DirectX. Никаких проблем со скроллом/масштабированием не было. На FMX такой же DirectX и рисование карты будет абсолютно таким же шустрым. Я все равно не понимаю суть проблемы. Там главная проблема рисование карты подложки. Она обычно существует в виде тайлов. Эти тайлы фиксированного масштаба. Выбираем их и копируем на битмап, потом поверх прорисовываем все собственные слои данных. Я делал битмап в 4 раза больше окна. Это позволяло не перерисовывать всё, а только динамические слои. И к скроллингу никаких абсолютно претензий не было. Наоборот, это работало в разы быстрее чем в браузере...
  13. и тогда никто ничего не сдвигал. просто говорил, какой символ где на экран вывести картинки были из аппаратного знакогенератора 80*40*16 цветов невелика мудрость ))) я так и не пойму, чем отличатеся копирование битмапа на пиксел вверх от скроллинга...
  14. хм я прямо хочу посмотреть, как можно нарисовать линию в пиксель "хоть чем", учитывая, тут должны быть и надписи и иконки едущего транспорта и отображение линий маршрута а вот кусок картинки (карты) шириной в пиксель (и в 1000 пикселей тоже) видеокарта копирует со скоростью света))
  15. функция скроллинга чего ? видеокарта постоянно отрисовывает свой буфер и даже если она сдвинет его на 1 пиксель какой-то магией, то недостающий пиксел с другой стороны кто нарисует?? вы рисуете все на битмап, который чуть больше окна просмотра. окно сдвигается. битмап не меняется. потом, когда мы подошли к границам битмапа, отрисовываем новое поле карты а поверх все равно НЕПРЕРЫВНО перерисовываются новые положения транспорта
  16. TIdTime is a client implementation of the Time Protocol as described in the Internet Standards document:RFC 868 - Time Protocol (http://www.rfc-editor.org/rfc/rfc868.txt)Time is a simple protocol for synchronizing time on a local network. For a time protocol with higher accuracy over several networks, use TIdSNTP. To retrieve the current date and time in human-readable form, use TIdDayTime.Please note that the Time Protocol in its current form cannot handle most dates after the year 2035. This limitation is stated in RFC 868.
  17. если даже не использовать NTP При каждом HTTP запросе в ответе приходят заголовки. Например Connection: keep-alive Strict-Transport-Security: max-age=0 Content-Encoding: Content-Type: text/html; charset=utf-8 Date: Fri, 05 Apr 2019 07:02:28 GMT Server: nginx
  18. уж лучше на PHP сервер написать ) работа с камерой есть в демо-примерах полученное изображение простым HTTP шлем на сервер. сервер пишет в базу
  19. Я десять лет занимался такой диспетчерской в Екатеринбурге. На js карты не вся функциональность удобно влазит. И производительности не хватает для больших объемов. Хотя если просто показать кто где едет, конечно норм. Есть на сайте ettu.ru
  20. Если это непродолжительное чтото, то все ровно так оставить и будет работать. Если нет, то см выше
  21. нет. все, что происходит в обработчике, происходит в главном потоке, и не прерывается ничем. Вспомните учебник. Ни один поток не имеет прав лазить к компонентам без синхронизации. Потому что это и так с гарантией убъет вашу программу
  22. Раньше, когда телевизоры были ламповыми, многие "чинили" их, долбая по корпусу до тех пор, пока немного окислившиеся ножки лампы чуть смещались в цоколе, контакт на недолгое время восстанавливался, и телек опять показывал. Но даже они не долбают севременные плоские панели. сама задача видеть "пробегание" в label даже в Windows решается не процессингом всех сообщений, а простым Form.Update. Или Label.Update. Правило никто не отменял - если вы делаете что-то у чего есть "срок выполнения", ваша задача должна решаться потоками. что еще-то непонятно? ProcessMessages это только и исключительно костыль для ленивого программиста. Плохая практика рано или поздно всегда приводит к выстрелу в ногу. Подробнее я писал об этом тут. http://www.cyberforum.ru/blogs/469693/blog4909.html Могу привести пример очень большой программы, которая используется в одной федеральной сети, и сейчас там идет авральная работа - вдруг появились ошибки и зависания. А вызваны они таким же отношением к архитектуре. Там тоже наваяли ProcessMessages и других "быстрых решений" и сейчас расплакиваются по полной. А это правда ОЧЕНЬ большая программа... Возвращаясь к началу моего пламенного спича - в Андроид-программе после совмещения главного потока с потоком JVM просто нет нужного вам механизма обработки сообщений, так что долбать кулаком бесполезно.
  23. колом - это значит выполнение долгой операции в том же потоке. например sleep(1000) вы вернитесь в начало. там Processmessages стоит. оно знаете ли тоже отдельных потоков не запускает/ вопрос был чем заменить ProcessMessages а не как использовать потоки ответов на второй вопрос полно. и на этом форуме в том числе совсем недавно писал очередной тред
  24. я искренне недоумеваю, почему у меня не "встает колом" ))) возраст видимо? public ind:integer; end; var fMainForm: TfMainForm; implementation {$R *.dfm} procedure TfMainForm.b1Click(Sender: TObject); begin ind := 0; tmr1.enabled := true; end; procedure TfMainForm.tmr1Timer(Sender: TObject); begin if ind=100 then tmr1.enabled := false else begin inc(ind); pb1.Position := ind; end; end;
×
×
  • Создать...