LOCAL lCancelled := .F.
@s++,97 DCPUSHBUTTON CAPTION '&Cancel' ;
ACTION {||lCancelled:=.T.} OBJECT oButton ;
SIZE 7,1.5
FOR M_CurrLab=1 TO 9 // В этой версии 9 Лаб.работ устанавливается путем копирования БД (сделать 10 - транспорт)
DC_CompleteEvents() // Обработка события Cancel
************* Прерывание процесса по нажатию Cancel #########
IF lCancelled // Прерывание процесса по нажатию Cancel
LB_Warning("Процесс установки учебных приложений был прерван пользователем !!!")
oButton:SetCaption('&Ok') // Деструктурирование окна отображения графического Progress-bar
DC_AppEvent( @lOk )
oDialog:Destroy()
RETURN NIL
ENDIF
.......
NEXT
oButton:SetCaption('&Ok') // Деструктурирование окна отображения графического Progress-bar
DC_AppEvent( @lOk )
oDialog:Destroy()
RETURN NIL
The response to the CANCEL did, no longer responding OK
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
The response to the CANCEL did, no longer responding OK
Did the reaction to CANCEL, but stopped at the end to respond to OK. Tell me, what's wrong?
Re: The response to the CANCEL did, no longer responding OK
I don't know why it is not responding.
Can you write a sample program (that I can compile and run) that demonstrates this problem?
Can you write a sample program (that I can compile and run) that demonstrates this problem?
The eXpress train is coming - and it has more cars.
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: The response to the CANCEL did, no longer responding OK
rdonnay wrote:I don't know why it is not responding.
Can you write a sample program (that I can compile and run) that demonstrates this problem?
Code: Select all
PROCEDURE AppSys
// Рабочий стол остается окном приложения
RETURN
********************************************************************************
FUNCTION Main()
LOCAL GetList := {}, oMainDlg, lCancelled := .F.
LOCAL oProgress, oDialog, lOk := .t., oButton, nE, aSay[10], Wsego := 300, nEvery := 100
// Отображение стадии исполнения. Будет написано прямо в окне Progress-bar
@0,0 DCGROUP oGroup1 CAPTION 'Стадии исполнения процесса' FONT "6.Helv" SIZE 105,3.5 PARENT oTabPage1
@5,0 DCGROUP oGroup2 CAPTION 'Прогноз времени исполнения' FONT "6.Helv" SIZE 105,5.0 PARENT oTabPage2
s = 1
@s++,1 DCSAY "" SAYSIZE 100 SAYOBJECT aSay[ 1] FONT "10.Helv"
@s++,1 DCSAY "" SAYSIZE 100 SAYOBJECT aSay[ 2] FONT "10.Helv"
s++
@s++,1 DCSAY "" SAYSIZE 100 SAYOBJECT oSay97 FONT "10.HelvBold"
s++
@0.2+s++,1 DCSAY "" SAYSIZE 100 SAYOBJECT oSay98 FONT "9.Helv Bold" COLOR GRA_CLR_BLUE
@1.5+s ,1 DCSAY "" SAYSIZE 100 SAYOBJECT oSay99 FONT "9.Helv Bold" COLOR GRA_CLR_BLUE
@s ,1 DCPROGRESS oProgress ;
SIZE 95,1.5 ;
PERCENT ;
EVERY 1+INT(Wsego/nEvery) ; // Кол-во обновлений изображения
MAXCOUNT Wsego ;
COLOR GRA_CLR_CYAN // Цвет полосы
@s++,97 DCPUSHBUTTON CAPTION '&Cancel' ;
ACTION {||lCancelled:=.T.} OBJECT oButton ;
SIZE 7,1.5
DCREAD GUI ;
TITLE '1.3. Установка заданных из 17 учебных приложений (лабораторных работ)' ;
PARENT @oDialog ;
FIT ;
EXIT ;
MODAL
oDialog:show()
// Начало отсчета времени для прогнозирования длительности исполнения
Time_progress = 0
// Прошло секунд с начала процесса
// Процесс может идти больше суток, поэтому для определения
// во всех случаях вычисляется время, прошедшее с начала года
T_Mess1 = "Начало: "+TIME() // Начало
Sec_1 = (DOY(DATE())-1)*86400+SECONDS()
aSay[ 1]:SetCaption("1/2: 1st Step")
z = 0
aSay[ 1]:SetCaption(aSay[ 1]:caption+" - Finish ")
aSay[ 2]:SetCaption("2/2: 2nd Stage")
DO WHILE z <= Wsego .AND. !lCancelled // Начало цикла по анкетам обучающей выборки
DC_CompleteEvents() // Обработка события Cancel
// ...............
++z
lOk = Time_Progress (++Time_progress, Wsego, oProgress, lOk )
ENDDO
aSay[ 2]:SetCaption(aSay[ 2]:caption+" - Finish ")
************* Прерывание процесса по нажатию Cancel ##############################################
IF lCancelled // Прерывание процесса по нажатию Cancel
LB_Warning("The process of forming the base of the absolute frequencies was interrupted by user !!!")
ELSE
LB_Warning("z="+ALLTRIM(STR(z)))
ENDIF
oButton:SetCaption('&Ok') // Деструктурирование окна отображения графического Progress-bar
DC_AppEvent( @lOk )
oDialog:Destroy()
RETURN NIL
FUNCTION LB_Warning( message, ctitle )
LOCAL aMsg := {}
DEFAULT cTitle TO ''
IF valtype(message) # 'A'
aadd(aMsg,message)
ELSE
aMsg := message
ENDIF
IF LEN(ALLTRIM(cTitle)) > 0
DC_MsgBox( ,,aMsg,cTitle)
ELSE
DC_MsgBox( ,,aMsg,'Универсальная когнитивная аналитическая система "Эйдос-Х++"')
ENDIF
RETURN NIL
***********************************************************************************************************
****** Графический прогресс-бар (на основе примера XSample_14() xdemo.exe)
***********************************************************************************************************
STATIC FUNCTION Time_Progress (Time_Progress, Wsego, oProgress, lOk )
LOCAL nMaxCount := Wsego
x = Time_Progress
* ** Отображение занимает очень много времени, поэтому
* ** Если Wsego > 100
* ** показывать прогресс не для всех х, а только для таких,
* ** которые нацело делятся на Wsego/100
*IF x < 100 .OR. (x+1) = Wsego // Всегда показывать прогресс в начале и конце
* ELSE // и для малого числа событий: Wsego < 100
* Wsego100 = ROUND(Wsego/100,0)
* IF Wsego100 > 1 .AND. (x+1) <> Wsego100*INT((x+1)/Wsego100)
* RETURN lOk
* ENDIF
* ENDIF
*** Индикация времени исполнения
***** Процесс может идти больше суток, поэтому для определения
***** во всех случаях вычисляется время, прошедшее с начала года
* T_Mess1 = "Начало: "+TIME() // Начало
***** Прошло секунд с начала процесса
PUBLIC T_Mess2 := "ch:mi:se"
Sec_2 = (DOY(DATE())-1)*86400+SECONDS() - Sec_1
ch2 = INT(Sec_2/3600) && Часы
mm2 = INT(Sec_2/60)-ch2*60 && Минуты
cc2 = Sec_2-ch2*3600-mm2*60 && Секунды
T_Mess2 = "Прошло: "+ALLTRIM(STRTRAN(T_Mess2,"ch",STR(ch2,21)))
T_Mess2 = STRTRAN(T_Mess2,"mi",STRTRAN(STR(mm2,2)," ","0"))
T_Mess2 = STRTRAN(T_Mess2,"se",STRTRAN(STR(cc2,2)," ","0"))
*@19,2 SAY T_Mess2+" всего: "+ALLTRIM(STR(Sec_2,17))+" сек."
PUBLIC T_Mess3 := "ch:mi:se" // Осталось
Sec_3 = Sec_2*Wsego/x && Прогн.длит.исп. в секундах
ch3 = INT(Sec_3/3600) && Часы
mm3 = INT(Sec_3/60)-ch3*60 && Минуты
cc3 = Sec_3-ch3*3600-mm3*60 && Секунды
T_Mess3 = ALLTRIM(STRTRAN(T_Mess3,"ch",STR(ch3,21)))
T_Mess3 = STRTRAN(T_Mess3,"mi",STRTRAN(STR(mm3,2)," ","0"))
T_Mess3 = STRTRAN(T_Mess3,"se",STRTRAN(STR(cc3,2)," ","0"))
*@20,2 SAY T_Mess3+" всего: "+ALLTRIM(STR(Sec_3,17))+" сек."
PUBLIC T_Mess4 := "ch:mi:se" // Окончание
Sec_4 = Sec_1 + Sec_3 - (DOY(DATE())-1)*86400
ch4 = INT(Sec_4/3600) && Часы
mm4 = INT(Sec_4/60)-ch4*60 && Минуты
cc4 = Sec_4-ch4*3600-mm4*60 && Секунды
T_Mess4 = "Окончание: "+ALLTRIM(STRTRAN(T_Mess4,"ch",STR(ch4,21)))
T_Mess4 = STRTRAN(T_Mess4,"mi",STRTRAN(STR(mm4,2)," ","0"))
T_Mess4 = STRTRAN(T_Mess4,"se",STRTRAN(STR(cc4,2)," ","0"))
*@21,2 SAY T_Mess4+" всего: "+ALLTRIM(STR(Sec_4,17))+" сек.с нач.суток"
PUBLIC T_Mess5 := "Средн.время обработки 1-го объекта: ch:mi:se"
Sec_5 = Sec_2/x
ch5 = INT(Sec_5/3600) && Часы
mm5 = INT(Sec_5/60)-ch5*60 && Минуты
cc5 = Sec_5-ch5*3600-mm5*60 && Секунды
T_Mess5 = ALLTRIM(STRTRAN(T_Mess5,"ch",STR(ch5,21)))
T_Mess5 = STRTRAN(T_Mess5,"mi",STRTRAN(STR(mm5,2)," ","0"))
T_Mess5 = STRTRAN(T_Mess5,"se",STRTRAN(STR(cc5,2)," ","0"))
*@22,2 SAY T_Mess5+" всего: "+ALLTRIM(STR(Sec_5,17))+" сек."
PUBLIC T_Mess6 := "ch:mi:se" // Осталось
Sec_6 = Sec_3 - Sec_2
ch6 = INT(Sec_6/3600) && Часы
mm6 = INT(Sec_6/60)-ch6*60 && Минуты
cc6 = Sec_6-ch6*3600-mm6*60 && Секунды
T_Mess6 = "Осталось: "+ALLTRIM(STRTRAN(T_Mess6,"ch",STR(ch6,21)))
T_Mess6 = STRTRAN(T_Mess6,"mi",STRTRAN(STR(mm6,2)," ","0"))
T_Mess6 = STRTRAN(T_Mess6,"se",STRTRAN(STR(cc6,2)," ","0"))
*@23,2 SAY T_Mess6+" всего: "+ALLTRIM(STR(Sec_6,17))+" сек."
Mess98 = T_Mess1+SPACE(145-LEN(T_Mess1)-LEN(T_Mess4))+T_Mess4 // Начало, окончание (прогноз)
oSay98:SetCaption(Mess98);oSay98:SetCaption(oSay98:caption)
Mess99 = T_Mess2+SPACE(146-LEN(T_Mess2)-LEN(T_Mess6))+T_Mess6 // Прошло, осталось (прогноз)
oSay99:SetCaption(Mess99);oSay99:SetCaption(oSay99:caption)
DC_GetProgress( oProgress, Time_Progress ) // Отображение графического Progress-bar
DC_AppEvent( @lOk, 0, .01 )
RETURN lOk
Re: The response to the CANCEL did, no longer responding OK
How about DCREAD GUI EXIT after the DCPUSHBUTTON ?
Regards,
Jack Duijf
Regards,
Jack Duijf
Regards,
Jack Duijf
Jack Duijf
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: The response to the CANCEL did, no longer responding OK
Which version do you offer to write this line:jdsoft wrote:How about DCREAD GUI EXIT after the DCPUSHBUTTON ?
Regards,
Jack Duijf
Code: Select all
DCREAD GUI ;
TITLE '1.3. Установка заданных из 17 учебных приложений (лабораторных работ)' ;
PARENT @oDialog ;
FIT ;
EXIT ;
MODAL
Re: The response to the CANCEL did, no longer responding OK
Code: Select all
#include AppEvent.CH <<<<<<< add this to top of file
oButton:SetCaption('&Ok') // ?????????????????? ???? ??????????? ???????????? Progress-bar
oButton:activate := {||PostAppEvent(xbeP_Close,,,oDialog)} <<<<<< Add This
DC_AppEvent( @lOk )
oDialog:Destroy()
The eXpress train is coming - and it has more cars.
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: The response to the CANCEL did, no longer responding OK
Thank you very much! Now everything works as it should!