Página 1 de 1
Não sair do sistema
Enviado: 07 Ago 2013 11:23
por joaosolution
Srs.
Bom dia
Alterei minha função errorsys para não sair do sistema e retornar ao Menu principal do sistema.
Mas após isso, meus SAY´s não aparecem e os GET´s aparecem todos na mesma linha.
Grato pela ajuda
Att
João Bosco
Não sair do sistema
Enviado: 07 Ago 2013 15:18
por Jairo Maia
Olá João,
Seja bem vindo ao Fórum.
João, creio que a única forma de podermos ajudá-lo, seria se você anexasse seu ERRORSYS.PRG alterado, e explicasse melhor em que situação você deseja que o sistema não aborte.
Está me parecendo que você está enviando um retorno antes mesmo que a rotina de erro possa tratar o erro.
Para anexar um arquivo no fórum veja este link:
Como anexar arquivo nas mensagens
Não sair do sistema
Enviado: 07 Ago 2013 15:34
por joaosolution
Jairo
Obrigado pelo retorno!
Acredito que o problema não está na errosys, mas está em anexo.
Pois a sequencia está correta, abre a janela do erro e ao invés de executar um Quit eu executo um Break para voltar no Menu do sistema.
Só que após este retorno os SAYs e GETs não posicionam de forma correta.
Acredito que tenha que setar alguma coisa para os GETS posicionarem de forma correta novamente.
Att
João Bosco
Não sair do sistema
Enviado: 07 Ago 2013 17:07
por Jairo Maia
Olá João Bosco,
Veja que quem está chamando o comando Break é função
DoBreak(), que é chamada dentro do
BEGIN SEQUENCE / END SEQUENCE:
Código: Selecionar todos
BEGIN SEQUENCE
oOldError = ErrorBlock( { || DoBreak() } )
MemoWrit( "Error.log", cErrorLog )
END SEQUENCE
Da forma que você está fazendo, faz que o Break chamado, apenas quebra esse envelope, ou seja, ele segue após a linha
END SEQUENCE
Existem formas de tratar erros pelo xHarbour, o fórum tem alguns exemplos usando o RECOVER, mas acho que você poderia ver se o exemplo abaixo ajuda você a entender o comando Break:
Código: Selecionar todos
Function Main()
Inicio()
Return Nil
Function Inicio()
Alert( "Inicio" )
If LastKey() = 27 // K_ESC
Quit
EndIf
Final()
Return Nil
Function Final()
Alert( "Final" )
If LastKey() = 27 // K_ESC
Quit
EndIf
Break( Inicio() ) // volta para função Inicio()
Não sair do sistema
Enviado: 07 Ago 2013 17:27
por joaosolution
Jair
Obrigado pela resposta! Mas o Break está funcionando perfeitamente.
O sistema dá o erro e volta certinho para o Menu que eu quero.
Até aí blz!
Só que após este retorno, nas telas os SAYs somem e os GETS ficam desposicionadas(todos na mesma linha)(ou na linha 23)
É como se o sistema perdesse alguma referência, pois os Menus e Browses funcionam perfeitamente.
Att
João Bosco
Não sair do sistema
Enviado: 07 Ago 2013 17:58
por Jairo Maia
João, olhei sua função e me parece que o problema deve ser outro, embora ainda não entendo como o Break está funcionando.
Vou fazer uma pergunta que acho que com certeza a resposta será sim, mas vamos lá: Você declarou a variavel GetSys := {} na sua função MenuPrincipal() como Local?
Não sair do sistema
Enviado: 07 Ago 2013 18:08
por joaosolution
Jairo
Sim normalmente declaro getlist:={} no início de todas a funções.
Att
João Bosco
Não sair do sistema
Enviado: 08 Ago 2013 07:37
por Jairo Maia
Ok.
Mas eu ainda acho que você poderia mudar este trecho do seu código:
Código: Selecionar todos
BEGIN SEQUENCE
oOldError = ErrorBlock( { || DoBreak() } )
MemoWrit( "Error.log", cErrorLog )
END SEQUENCE
Por este e testar:
Código: Selecionar todos
MemoWrit( "Error.log", cErrorLog )
Break( MenuPrincipal() )