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

GASCHE

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

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

  • Посещение

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

    12

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

  1. Сюда вместо Image2.Position.X, Image2.Position.Y подставлять преобразованные координаты Х, Y из
  2. Согласно этому получилось так Path3D1->Path->MoveTo(TPointF(0,0)); Path3D1->Path->LineTo(TPointF(0,0));
  3. Теорию можно посмотреть здесь. Там же есть ссылка на пример, правда на Python.
  4. Увы показалось что вернули дату изменения ?
  5. Придется смириться, другого кода тут ни вы ни кто другой не предложил.
  6. А так procedure TForm1.Timer1Timer(Sender: TObject); begin label1.text = query.fiеlds[0].asstring; [.... делаем что-то, где срок выполнения задачи может быть разным] IF NOT Query.Eof THEN Timer1.Enabled := False ELSE Query.next; END; не получается?
  7. У меня так procedure TForm1.Timer1Timer(Sender: TObject); VAR iJ : Integer; begin ProgressBar1.Value:=iI; Label1.Text := iI.ToString ; //Timer1.Enabled := False; Inc( iI ); //sleep(100); for iJ := 0 to 100000000 do LT := LT + 1; IF iI > 100 THEN Timer1.Enabled := False; end; не "встает" хоть sleep хоть FOR.
  8. А это что значит? Делает программа или пользователь что-то меняет?
  9. Верю, но думаю что таймер работает в отдельном потоке и по завершению заданного периода времени из него вызывается функция Timer1Timer, но не уверен что при этом происходит синхронизация с основным потоком,.
  10. Чтоб не "встало колом" можно так ? procedure TForm1.Timer1Timer(Sender: TObject); begin ProgressBar1.Value:=iI; Timer1.Enabled := False; Inc( iI ); sleep(100); IF iI <= 100 THEN Timer1.Enabled := True; end; Вместо sleep(100) можно выполнять любой код.
  11. Ну извините я не Кашпировский чтобы догадаться какой код нужно выполнять вместо sleep(100), и естественно на болванку я предложил такую же болванку. Как реально все это синхронизировать это дело автора вопроса если он захочет этим воспользоваться. У меня весь "sleep(100)" работает в потоке, проблем с синхронизацией нет. Предложите своё и, если оно будет проще непременно им воспользуюсь.
  12. А чем эта хуже application.ProcessMessages?
  13. procedure TForm1.Timer1Timer(Sender: TObject); begin ProgressBar1.Value:=I; IF I = 100 THEN Timer1.Enabled := False; Inc( I ); end;
  14. Если нет данных и вы хотите отобразить их загрузку, то что будет делать в это время основной поток? Основной поток простаивает зачем нужен дополнительный? Если в основном потоке работает пользователь, то зачем ему надо показывать прогресс бар?
  15. Пожалейте пользователя, перед глазами две формы плюс splash форма да еще форма с прогресс баром при этом на каждой что-то меняется куда ему смотреть и на какой жать клавиши
  16. C этим согласен, но как бы было хорошо если бы андроид научили "тормозить" потоки типа WaitForSingleObject.
  17. Вы бы прикрепили исходники с имитацией вашей проблемы может кто что и подскажет, а так будем долго обсуждать что у вас не получается.
  18. Полностью с вами согласен, но каков вопрос... Да все просто использовать application.ProcessMessages и sleep не есть хорошо, и если это убрать и использовать таймер, то код будет довольно прост procedure TForm1.Button2Click(Sender: TObject); begin IF NOT Timer1.Enabled THEN BEGIN Label1.Text := '0'; Timer1.Enabled := True; END; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Inc( LT ); Label1.Text := inttostr( LT ); Inc( iI ); IF iI = 5 THEN BEGIN Timer1.Enabled := False; iI := 0; LT := 0; END; end;
  19. Можно так procedure TForm1.Button1Click(Sender: TObject); begin Label1.Text := '2'; tthread.CreateAnonymousThread( procedure begin sleep(1000); tthread.Synchronize( tthread.Currentthread, procedure begin Label1.Text := '3'; end); end). Start; end;
  20. Зато столько интересного для себя обнаружили и сколько обнаружите потом при переходе на новую версию
×
×
  • Создать...