The response to the CANCEL did, no longer responding OK

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
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

#1 Post by Eugene Lutsenko »

Did the reaction to CANCEL, but stopped at the end to respond to OK. Tell me, what's wrong?
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

User avatar
rdonnay
Site Admin
Posts: 4745
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: The response to the CANCEL did, no longer responding OK

#2 Post by rdonnay »

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?
The eXpress train is coming - and it has more cars.

User avatar
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

#3 Post by Eugene Lutsenko »

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
[/size]

User avatar
jdsoft
Posts: 113
Joined: Thu Jan 28, 2010 1:13 pm
Location: Overberg
Contact:

Re: The response to the CANCEL did, no longer responding OK

#4 Post by jdsoft »

How about DCREAD GUI EXIT after the DCPUSHBUTTON ?

Regards,
Jack Duijf
Regards,
Jack Duijf

User avatar
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

#5 Post by Eugene Lutsenko »

jdsoft wrote:How about DCREAD GUI EXIT after the DCPUSHBUTTON ?

Regards,
Jack Duijf
Which version do you offer to write this line:

Code: Select all

       DCREAD GUI ;
              TITLE '1.3. Установка заданных из 17 учебных приложений (лабораторных работ)' ;
              PARENT @oDialog ;
              FIT ;
              EXIT ;
              MODAL

User avatar
rdonnay
Site Admin
Posts: 4745
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: The response to the CANCEL did, no longer responding OK

#6 Post by rdonnay »

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.

User avatar
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

#7 Post by Eugene Lutsenko »

Thank you very much! Now everything works as it should!

Post Reply