Página 1 de 1

MiniGui x Botão "X"

Enviado: 27 Mai 2015 17:37
por Hasse
Boa tarde colegas.

No Aplicativo em MiniGui 3.3.0, tenho:

Código: Selecionar todos

DEFINE WINDOW TEMPLATE ;
   AT n_X1, n_Y1 ;
   WIDTH n_Lrg HEIGHT n_Alt;
   TITLE PROG_TIT ;
   CHILD ;
   ON INTERACTIVECLOSE Sai_Sim_Nao()

   @ 12,15 LABEL label_1 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE 'ConexÆo INATIVA' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   @ 40,15 LABEL label_2 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE '===============' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   ON KEY ALT+F4  ACTION { || Sai_Sim_Nao( ), Fecha_Connect() }
   ON KEY ALT+F12 ACTION { || Sai_Sim_Nao( ), Fecha_Connect() }
   ON KEY F5      ACTION { || Baixa_Prescr() }
Segundo eu entendi as teclas ALT+F4 e ALT+F12 quando pressionadas desviam o processamento para a Função Sai_Sim_Nao()
O mesmo deveria acontecer ao clicar no Botão "X", pois o ON INTERACTIVECLOSE Sai_Sim_Nao() também deveria desviar o processamento para a Função Sai_Sim_Nao().
Entretanto, o Botão "X" aborta o aplicativo.

Onde está o erro ?

MiniGui x Botão "X"

Enviado: 27 Mai 2015 18:18
por Toledo
Amigo, qual é o código da função Sai_Sim_Nao( )?

O código que você passou acima é de um arquivo FMG? E o tipo da janela é CHILD mesmo, então não é janela principal (Main)?

Abraços,

MiniGui x Botão "X"

Enviado: 27 Mai 2015 19:29
por Hasse
Boa noite Toledo.

Postando os códigos na sequência natural. Primeiro parte do MAIN(), nas linhas que enviam para os Form's:

Código: Selecionar todos

   *
   LOAD WINDOW Form_0
   *
   LOAD WINDOW Form_1
   *
   ACTIVATE WINDOW Form_1, Form_0
   *
Segue a Fom_0.fmg:

Código: Selecionar todos

DEFINE WINDOW TEMPLATE ;
   AT 0,0 ;
   WIDTH 0 HEIGHT 0 ;
   TITLE PROG_TIT ;
   MAIN NOSHOW ;
   NOTIFYICON "FILESYS2.ico" ;
   NOTIFYTOOLTIP PROG_TIT ;
   ON NOTIFYCLICK IF( IsWindowVisible( hWnd ), Form_1.Hide, Form_1.Show ) ;

   DEFINE NOTIFY MENU OF Form_0
     BuildMenu()
   END MENU
   
END WINDOW

//// hMainWin:=WIN_N2P( Application.Handle )
Form_1.fmg:

Código: Selecionar todos

n_X1    := VAL( MASCARA1 )                   && Posição e Medidas da janela Windows 'Form_1.fmg'.
n_Y1    := VAL( MASCARA2 )
n_Lrg   := VAL( LINF )
n_Alt   := VAL( LSUP )
*
DEFINE WINDOW TEMPLATE ;
   AT n_X1, n_Y1 ;
   WIDTH n_Lrg HEIGHT n_Alt;
   TITLE PROG_TIT ;
   CHILD ;
   ON INTERACTIVECLOSE Sai_Sim_Nao()

   @ 12,15 LABEL label_1 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE 'ConexÆo INATIVA' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   @ 40,15 LABEL label_2 WIDTH n_Lrg-20 HEIGHT 20 ;
      VALUE '===============' ;
      FONT 'Times New Roman' SIZE 14 ;
      FONTCOLOR BLUE

   ON KEY ALT+F4  ACTION { || Sai_Sim_Nao( ), Fecha_Connect() }
   ON KEY ALT+F12 ACTION { || Sai_Sim_Nao( ), Fecha_Connect() }
   ON KEY F5      ACTION { || Baixa_Prescr() }

   DEFINE TIMER Timer_1 INTERVAL n_Interv_1 ACTION MudaLabel( l_Atualiza )
   
   DEFINE CONTEXT MENU
      *
      BuildMenu()
      *
   END MENU
   *
END WINDOW
*
FORM_1 := n_Width_ - 640
E finalizando, a Função Sair_Sim_Nao() completa:

Código: Selecionar todos

FUNCTION Sai_Sim_Nao(  )
   *
   STATIC l_First := .T.
   Local l_Ret := .T.
   *
   IF l_First = .T.                             && Verificar se o aplicativo está iniciando.
      l_First := .F.
      l_Ret   := .F.
   ELSEIF File( "Processando.Sim" )             && Verifica se o Importador está importando Prescrições.
      l_Ret := .F.
      MsgStop( "Texto 1", 'Texto 2' )
   ELSE
      DO EVENTS
      l_Ret := MsgYesNo( "*      Deseja encerrar o Programa      *"+CRLF+CRLF+"           BAIXAR  PRESCRIیES ?         ", "BAIXAR  PRESCRIیES" )
      IF l_Ret
         Fecha_Connect()
      ENDIF
   ENDIF
   *
RETURN( l_Ret )
Aqui observe que inseri a linha "MsgStop( "Texto 1", 'Texto 2' )" somente para ter a certeza de que realmente o processamento NÃO passava onde deveria.

A Linha "ELSEIF File( "Processando.Sim" ) && Verifica se o Importador está importando Prescrições." deve evitar que o aplicativo feche antes de terminar algum processo importante que não pode ser interrompido.

Como sugestão, se isto for possível, quando o Botão "X" fosse clicado, o processamento deveria retornar imediatamente. Uma pequena mensagem informando o ocorrido poderia ser apresentada, mas SEM interromper o processamento. O Encerramento do aplicativo só deve ser possível quando o valor da variável l_Ret for .T.

Acho que as informações acima ajudem.

MiniGui x Botão "X"

Enviado: 27 Mai 2015 21:59
por Toledo
Amigo, segue em anexo um exemplo.

Fiz algumas alterações no Form_1 e na função Sai_Sim_Nao().

Abraços,

MiniGui x Botão "X"

Enviado: 28 Mai 2015 10:08
por Hasse
Obrigado Toledo.

Ainda hoje pretendo me dedicar ao assunto.