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

krapotkin

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

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

  • Посещение

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

    209

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

  1. правильное решение, конечно, с фреймами. не забудьте, что их нужно создавать отдельно, вручную, в нужный момент
  2. все правильно. деинсталляция очищает собственные данные программы
  3. у меня еще хитрее ) могу сейчас чуть-чуть приврать, давно ваял, но общий смысл... сделан поток, который стартует в FormShow, все проверяет, и возвращает все результаты проверок соответственно, в OnThreadTerminate стартует ShowModal формы логина но в большинстве мест все-таки загрузки профиля и т.п. идут в главном потоке под диалогом из fgx ...
  4. тут все непросто если нет связи например, или еще какая-то совсем беда, остаемся на первой если не залогинены, загружаю форму логина если залогинены - одну из двух "главных" (по смыслу, не по делфи) форм приложения при этом на каждой из форм есть и фреймы и всякая другая беда
  5. главное - главную форму делать из трех компонентов - бэкграунд, лого и кнопка Начать тогда все будет очень хорошо и быстро
  6. в TTask будет то же что в TThread только в модном спагетти-стиле ))
  7. можно сделать обычное окно, только прозрачное полностью, а на него положить непрозрачный image и кнопку. а вызывается псевдомодальная форма на Android / ios так: form2.ShowModal(procedure (aresult:TModalResult) begin // этот код получает управление при выходе из "модального" окна end)
  8. а чем вам не угодил TThread ? кроме того, если у вас что-то обращается в сеть, прервать это что-то не удастся, только выйти по тайм-ауту. поток просто ждет этого выхода, не блокируя программу.
  9. 1. все, что происходит с КОМПОНЕНТОМ, придется делать в ГП. Это заполнение св-ва Path 2. НО! все, что нужно предварительно рассчитать, не должно быть в ГП Как вариант procedure TMyThread.Execute; begin while not Terminated do begin ProcessCurrentState(); Synchronize(UpdateUserInterface); sleep(UpdateInterval); end; end; при этом ПО-ЛЮБОМУ будет уходить время на UpdateUserInterface/ Линейно увеличиваясь с кол-вом компонентов
  10. нет имеется в виду что Synchronize - это выполнение в главном потоке если весь код вашего потока выполняется в главном потоке, то зачем заводить поток??? у меня аналогичная анимация Path происходит путем расчетов ключевых точек в дополнительном потоке, и только заполнение готового Path.Path происходит в главном т.к. это всяко компонент и тут без ГП никак
  11. при установленном cnPack такое иногда у меня бывает. но редко и плюсы гораздо круче минусов и обычно никаких разрушений не несет. перезапустился и вперед. а Ctrl+Shift+S у меня на автомате со времен Turbo Pascal )
  12. не надо ничего в потоке, который так же сожрет весь проц
  13. вы вообще не читаете? этот пример от первого не отличается ничем. у вас неправильный алгоритм. вы нарушаете главный цикл приложения. программа и так находится в большом цикле while not terminated do begin processMessages end; и все события, которые возникают в программе и системе, обрабатываются именно там. вы нажимаете кнопку - вам временно передается управление, чтобы выполнить обработчик кнопки. потом программа опять находится в ожидании событий, и при этом не жрет процессор как не в себя. то, что вы делаете собственный цикл - разрушает нормальную обработку в главном цикле и забирает все свободное время процессора.
  14. 1. как уже отметили fr - это поле формы 2. вместо fr.free нужно freeAndNil(fr);
  15. вы не поверите, этот цикл УЖЕ встроен в программу (см. Application.Run) , и повторять его не надо. и вам уже написали 2.5 раза, как нужно делать. Под windows, android, и вообще любую платформу
  16. неправильно. это не должен быть цикл в понимании for, repeat, while это должна быть запись некоего состояния программы, изменение состояния, отражение состояния в пользовательском интерфейсе TForm1=class(TForm) ... ProcessStarted:boolean; PressCount:integer; ... end; procedure TForm1.Button1Click(...) begin StartProcess(); end; procedure TForm1.Button2Click() begin CheckProcessEnd(); end; procedure TForm1.StartProcess(); begin ProcessStarted:=true; PressCount:=0; button1.enabled := false; button2.enabled := true; end; procedure TForm1.CheckProcessEnd; const PRESS_COUNT_PENDING=5; begin inc(PressCount); if (PressCount=PRESS_COUNT_PENDING) then begin ProcessStarted:=false; button1.enabled:=true; button2.enabled:=false; end; end; да. именно конечный автомат это и есть.
  17. а если до нажатия 5 раз ничего делать не надо, то и таймер лишний )))
  18. еще хотелось бы знать, а что нужно-то ? из вашего кода не ясно запустить поток, активировать кнопку Button2 чтобы она остановила поток? либо выполнять какое-то действие время от времени, а по Button2 прекратить его выполнять? тогда простой таймер вполне решает вопрос
  19. что-то сильно поменяется в следующей версии??
  20. по слухам, у дешевых китайцев он один на всех
  21. думаю, можно попробовать TPath
  22. Очень трудно найти в сети упоминание о том, что PrototypeBind... это исключительно маркетинговый инстумент для создания "Live" демо. Он просто сам от фонаря генерирует данные нескольких типов, и можно их посмотреть в design-time при работе приложения он никак не должен использоваться
×
×
  • Создать...