Вверх ↑
Этот топик читают: Гость
Ответов: 60
Рейтинг: 0
#1: 2020-07-23 15:06:11 ЛС | профиль | цитата
Как при такой схеме обновить прогрессбар при повторном нажатии на кнопку, чтобы он был опять в начальном состоянии.
Заранее спасибо.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,84,98)
{
}
Add(ChildForm,11729209,413,434)
{
link(Data1,10833417:Value,[(419,387)(405,387)])
link(Data2,6253299:Var1,[(426,354)])
}
BEGIN_SDK
Add(EditMulti,8530858,21,21)
{
EventCount=1
WorkCount=5
DataCount=2
Width=804
Height=438
link(doWork1,11439420:doVisible,[(112,27)(112,237)(235,237)(235,209)])
link(doWork2,1922458:doEvent1,[(45,34)(45,251)])
}
Add(MainForm,11439420,252,175)
{
Left=35
Top=105
Height=70
Visible=1
Caption=""
BorderStyle=1
Point(doVisible)
Point(onShow)
Point(doShowModal)
Point(onClose)
link(onCreate,12306177:doTimer,[(314,195)(314,328)])
link(onClose,8530858:onEvent1,[(554,209)(554,27)])
}
Add(Memory,3929357,441,329)
{
Point(Data)
link(onData,7718957:doCalc,[])
link(Data,8530858:Data2,[(447,136)(34,136)])
}
Add(Hub,1922458,63,245)
{
link(onEvent1,12306177:doStop,[(210,251)(210,335)])
link(onEvent2,11439420:doClose,[(165,258)(165,202)])
}
Add(ProgressBarRush,16178631,672,371)
{
Left=20
Top=10
Width=350
ColorTo=8388608
Frame=0
Point(doMax)
Point(doUpdate)
}
Add(MathParse,7718957,532,329)
{
MathStr="%1*100/%2"
link(onResult,16178631:doPosition,[(621,335)(621,377)])
link(X1,3929357:Value,[(538,317)(492,317)(492,373)(447,373)])
link(X2,8530858:Data1,[(545,114)(27,114)])
}
Add(Timer,12306177,343,322)
{
Interval=1
Enable=1
link(onTimer,3929357:doValue,[(408,328)(408,335)])
}
END_SDK
Add(Button,10836537,189,287)
{
Left=25
Top=45
link(onClick,12001635:doEvent1,[])
}
Add(Math,11671252,427,98)
{
Op2=1
link(onResult,16751094:doValue,[])
link(Op1,16751094:Value,[(433,86)(471,86)(471,142)(471,142)(510,142)])
}
Add(Memory,16751094,504,98)
{
Default=Integer(0)
Point(Data)
link(onData,1297035:doWork2,[(562,104)(562,146)])
link(Data,11671252:Result,[(510,86)(485,86)(485,162)(433,162)])
}
Add(Hub,12001635,252,287)
{
link(onEvent1,11729209:doWork1,[(339,293)(339,440)])
link(onEvent2,9470844:doStart,[(278,300)(278,198)(226,198)(226,97)])
}
Add(MutexThread,9470844,238,91)
{
Delay=5000
FastStop=0
OneWaitSyncExec=0
Point(doStopFlag)
link(onExec,7884715:doFor,[])
}
Add(For,7884715,329,91)
{
End=1000
link(onEvent,11671252:doOperation,[(394,97)(394,104)])
link(onStop,1745307:doEvent1,[(373,104)(373,132)(331,132)(331,160)])
}
Add(Memory,10833417,399,308)
{
Default=Integer(1000)
}
Add(Hub,1745307,343,154)
{
OutCount=4
link(onEvent1,16129758:doText,[(437,160)(437,398)])
link(onEvent2,16751094:doClear,[(431,167)(431,111)])
link(onEvent3,10009205:doValue,[(427,174)(427,237)])
link(onEvent4,11729209:doWork2,[(381,181)(381,447)])
}
Add(GlobalVar,10314734,588,140)
{
Name="1"
}
Add(Label,16129758,525,392)
{
Left=135
Top=50
link(Text,6253299:Var2,[(531,375)(573,375)])
}
Add(GetDataEx,6253299,567,349)
{
Angle=1
link(Data,10314734:Var,[(594,354)])
}
Add(Memory,16310300,497,175)
{
Default=Integer(0)
}
Add(Memory,10009205,497,231)
{
Point(Data)
link(onData,1297035:doWork3,[(564,237)])
link(Data,16310300:Value,[])
}
Add(HubEx,1297035,560,140)
{
link(onEvent,10314734:doValue,[])
}


карма: 1

0
Ответов: 16884
Рейтинг: 1239
#2: 2020-07-23 15:51:58 ЛС | профиль | цитата

Add(MainForm,282251,210,112)
{
}
Add(Button,10836537,210,147)
{
Left=25
Top=45
Data=Integer(0)
link(onClick,12001635:doEvent1,[])
}
Add(Hub,12001635,252,147)
{
OutCount=3
link(onEvent1,3246689:doWork3,[(389,153)])
link(onEvent3,9470844:doStart,[(284,167)(284,118)])
}
Add(MutexThread,9470844,301,112)
{
Delay=500
FastStop=0
OneWaitSyncExec=0
Point(doStopFlag)
link(onExec,7884715:doFor,[])
}
Add(For,7884715,343,112)
{
End=1000
link(onEvent,3246689:doWork2,[])
}
Add(ProgressBarRush,7315589,399,112)
{
Left=20
Top=10
Width=350
ColorTo=8388608
Max=1000
Frame=0
Caption=""
Point(doUpdate)
}
Add(HubEx,3246689,385,112)
{
link(onEvent,7315589:doPosition,[])
}


Редактировалось 1 раз(а), последний 2020-07-23 15:53:00
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 60
Рейтинг: 0
#3: 2020-07-23 17:56:13 ЛС | профиль | цитата
Спасибо, но такая схема не подходит. Мне надо чтобы по схеме похожую на мою обновлялся. Мне надо выполнить расчеты, при которых зависает программа, поэтому пришлось их перенести в отдельный поток. Я не стал их приводить на схеме, просто заменил их одной формулой. А ход расчета должен отображаться с помощью прогресс бара. Потом снова надо выполнять эти же расчеты. Соответственно прогресс бар должен находиться в начальном состоянии.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#4: 2020-07-23 20:21:34 ЛС | профиль | цитата
Gik писал(а):
Как при такой схеме обновить прогрессбар
Никак.
В твоей схеме нарушен порядок событий.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 60
Рейтинг: 0
#5: 2020-07-23 21:06:55 ЛС | профиль | цитата
Как сделать, чтобы расчеты выполнялись в параллельном потоке, а прогрессбар отображался в основном, показывая процесс расчета. Просто если они в одном потоке, расчеты зависают и прогрессбар тоже. Или вообще такое невозможно выполнить?
карма: 1

0
Ответов: 60
Рейтинг: 0
#6: 2020-07-24 10:15:31 ЛС | профиль | цитата
Все сделал. Просто в моей схеме переставил связь с onCreate на onShow в дочерней форме для запуска таймера.

Make(delphi)
ver(4.05 build 186)
Add(MainForm,2953706,84,98)
{
}
Add(ChildForm,11729209,413,434)
{
link(Data1,10833417:Value,[(419,387)(405,387)])
link(Data2,6253299:Var1,[(426,354)])
}
BEGIN_SDK
Add(EditMulti,8530858,21,21)
{
EventCount=1
WorkCount=5
DataCount=2
Width=804
Height=438
link(doWork1,11439420:doVisible,[(112,27)(112,237)(235,237)(235,209)])
link(doWork2,1922458:doEvent1,[(45,34)(45,251)])
}
Add(MainForm,11439420,252,175)
{
Left=35
Top=105
Height=70
Visible=1
Caption=""
BorderStyle=1
Point(doVisible)
Point(onShow)
Point(doShowModal)
Point(onClose)
link(onShow,12306177:doTimer,[(314,202)(314,328)])
}
Add(Memory,3929357,441,329)
{
Point(Data)
link(onData,7718957:doCalc,[])
link(Data,8530858:Data2,[(447,136)(34,136)])
}
Add(Hub,1922458,63,245)
{
link(onEvent1,12306177:doStop,[(210,251)(210,335)])
link(onEvent2,11439420:doClose,[(165,258)(165,202)])
}
Add(ProgressBarRush,16178631,672,371)
{
Left=20
Top=10
Width=350
ColorTo=8388608
Frame=0
Point(doMax)
Point(doUpdate)
}
Add(MathParse,7718957,532,329)
{
MathStr="%1*100/%2"
link(onResult,16178631:doPosition,[(621,335)(621,377)(621,377)])
link(X1,3929357:Value,[(538,317)(492,317)(492,373)(447,373)])
link(X2,8530858:Data1,[(545,114)(27,114)])
}
Add(Timer,12306177,343,322)
{
Interval=1
Enable=1
link(onTimer,3929357:doValue,[(408,328)(408,335)])
}
END_SDK
Add(Button,10836537,189,287)
{
Left=25
Top=45
link(onClick,12001635:doEvent1,[])
}
Add(Math,11671252,427,98)
{
Op2=1
link(onResult,16751094:doValue,[])
link(Op1,16751094:Value,[(433,86)(471,86)(471,142)(471,142)(510,142)])
}
Add(Memory,16751094,504,98)
{
Default=Integer(0)
Point(Data)
link(onData,1297035:doWork2,[(562,104)(562,146)])
link(Data,11671252:Result,[(510,86)(485,86)(485,162)(433,162)])
}
Add(Hub,12001635,252,287)
{
link(onEvent1,11729209:doWork1,[(339,293)(339,440)])
link(onEvent2,9470844:doStart,[(278,300)(278,198)(226,198)(226,97)])
}
Add(MutexThread,9470844,238,91)
{
Delay=5000
FastStop=0
OneWaitSyncExec=0
Point(doStopFlag)
link(onExec,7884715:doFor,[])
}
Add(For,7884715,329,91)
{
End=1000
link(onEvent,11671252:doOperation,[(394,97)(394,104)])
link(onStop,1745307:doEvent1,[(373,104)(373,132)(331,132)(331,160)])
}
Add(Memory,10833417,399,308)
{
Default=Integer(1000)
}
Add(Hub,1745307,343,154)
{
OutCount=4
link(onEvent1,16129758:doText,[(437,160)(437,398)])
link(onEvent2,16751094:doClear,[(431,167)(431,111)])
link(onEvent3,10009205:doValue,[(427,174)(427,237)])
link(onEvent4,11729209:doWork2,[(381,181)(381,447)])
}
Add(GlobalVar,10314734,588,140)
{
Name="1"
}
Add(Label,16129758,525,392)
{
Left=135
Top=50
link(Text,6253299:Var2,[(531,375)(573,375)])
}
Add(GetDataEx,6253299,567,349)
{
Angle=1
link(Data,10314734:Var,[(594,354)])
}
Add(Memory,16310300,497,175)
{
Default=Integer(0)
}
Add(Memory,10009205,497,231)
{
Point(Data)
link(onData,1297035:doWork3,[(564,237)])
link(Data,16310300:Value,[])
}
Add(HubEx,1297035,560,140)
{
link(onEvent,10314734:doValue,[])
}


карма: 1

0
Ответов: 4628
Рейтинг: 749
#7: 2020-07-24 11:10:17 ЛС | профиль | цитата
Gik писал(а):
Просто если они в одном потоке, расчеты зависают и прогрессбар тоже.

1) Если задача выполняется в главном потоке, то после задания значений вызвать метод doProcessMessages компонента Application - это позволит перерисовать интерфейс. Из параллельного потока смысла вызывать нет.
2) При обращении к визуальным компонентам из параллельных потоков использовать компонент Synchronize.
3) Если нужно включить таймер из параллельного потока - включать через Synchronize.
карма: 26

0
7
Сообщение
...
Прикрепленные файлы
(файлы не залиты)