-
Постов
208 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные GASCHE
-
-
1 час назад, лёля сказал:
получаеться у меня согласно этому
Согласно этому получилось так
Path3D1->Path->MoveTo(TPointF(0,0)); Path3D1->Path->LineTo(TPointF(0,0));
-
-
Увы показалось что вернули дату изменения
-
-
3 часа назад, #WAMACO сказал:
В общем пришли и "накостыляли" тут всем, своим кодом!
Придется смириться, другого кода тут ни вы ни кто другой не предложил.
-
5 минут назад, Yarpda сказал:
Конечно программа.
А так
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;
не получается? -
9 часов назад, #WAMACO сказал:
так у вас и не "встанет колом", так как ничего и не делается! где sleep(1000) (длительная операция имеется ввиду)?
У меня так
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. -
1 час назад, Yarpda сказал:
[.... делаем что-то]
А это что значит? Делает программа или пользователь что-то меняет?
-
37 минут назад, krapotkin сказал:
нет. все, что происходит в обработчике, происходит в главном потоке, и не прерывается ничем. Вспомните учебник. Ни один поток не имеет прав лазить к компонентам без синхронизации.
Согласен.
-
10 часов назад, krapotkin сказал:
это намекает что автор какбе не верит в однопоточность ))) и думает, что волшебные силы могут что-то делать с таймером в то время пока выполняется этот кусок кода ))))
Верю, но думаю что таймер работает в отдельном потоке и по завершению заданного периода времени из него вызывается функция Timer1Timer, но не уверен что при этом происходит синхронизация с основным потоком,.
-
В 02.04.2019 в 18:00, Yarpda сказал:
Тут приведен просто пример, а на самом деле же нужно выполнять какой-то код в программе, который будет вместо sleep(100), а если это делать, то все встанет колом
Чтоб не "встало колом" можно так
procedure TForm1.Timer1Timer(Sender: TObject);
beginProgressBar1.Value:=iI;
Timer1.Enabled := False;
Inc( iI );
sleep(100);
IF iI <= 100 THEN
Timer1.Enabled := True;
end;
Вместо sleep(100) можно выполнять любой код.
-
14 часов назад, Yarpda сказал:
Тут приведен просто пример, а на самом деле же нужно выполнять какой-то код в программе, который будет вместо sleep(100), а если это делать, то все встанет колом едва запустившись.
Ну извините я не Кашпировский чтобы догадаться какой код нужно выполнять вместо sleep(100), и естественно на болванку я предложил такую же болванку. Как реально все это синхронизировать это дело автора вопроса если он захочет этим воспользоваться. У меня весь "sleep(100)" работает в потоке, проблем с синхронизацией нет.
14 часов назад, Yarpda сказал:В общем это решения ОЧЕНЬ спорное на мой взгляд.
Предложите своё и, если оно будет проще непременно им воспользуюсь.
-
1 час назад, Yarpda сказал:
Это очень интересная альтернатива... Я бы сказал совсем альтернативная.
А чем эта хуже application.ProcessMessages?
-
procedure TForm1.Timer1Timer(Sender: TObject); begin ProgressBar1.Value:=I; IF I = 100 THEN Timer1.Enabled := False; Inc( I ); end;
-
В 22.03.2019 в 12:03, gonzales сказал:
И еще, если я в своем классе TThread создаю форму для отображение прогресс бара
Если
13 часов назад, gonzales сказал:Я хочу открыть соединение с сервером и получать в него данные, пока живо приложение
нет данных и вы хотите отобразить их загрузку, то что будет делать в это время основной поток? Основной поток простаивает зачем нужен дополнительный? Если в основном потоке работает пользователь, то зачем ему надо показывать прогресс бар?
-
6 часов назад, gonzales сказал:
И еще, если я в своем классе TThread создаю форму для отображение прогресс бара
Пожалейте пользователя, перед глазами две формы плюс splash форма да еще форма с прогресс баром при этом на каждой что-то меняется куда ему смотреть и на какой жать клавиши
-
18 часов назад, krapotkin сказал:
как хорошо, что в Андроиде наконец всех отучат от этого крайне вредного трюка
C этим согласен, но как бы было хорошо если бы андроид научили "тормозить" потоки типа WaitForSingleObject.
-
12 часов назад, gonzales сказал:
sleep здесь исключительно для наглядности, и вообще весь код
21 час назад, gonzales сказал:Можно. Но этот выход не выход)))
Вы бы прикрепили исходники с имитацией вашей проблемы может кто что и подскажет, а так будем долго обсуждать что у вас не получается.
-
8 часов назад, gonzales сказал:
Можно. Но этот выход не выход
Полностью с вами согласен, но каков вопрос...
8 часов назад, gonzales сказал:Боюсь представить, какой код будет в таком случае
Да все просто использовать 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;
-
5 часов назад, gonzales сказал:
Как заставить это все работать без ProcessMessages?
Можно так
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;
-
-
38 минут назад, Nick Peterson сказал:
Что значит " у меня " ?
Беру ваш пример, запускаю вашей проблемы нет 10.1.2
-
У меня на Berlin все нормально.
-
6 часов назад, Nick Peterson сказал:
но жаль потраченного месяца работы
Зато столько интересного для себя обнаружили и сколько обнаружите потом при переходе на новую версию
рисование на Image1
в Клиппинг
Опубликовано
Сюда вместо Image2.Position.X, Image2.Position.Y подставлять преобразованные координаты Х, Y из