Não sair do sistema

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

joaosolution
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 07 Ago 2013 11:19
Localização: Contagem/MG

Não sair do sistema

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Não sair do sistema

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
joaosolution
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 07 Ago 2013 11:19
Localização: Contagem/MG

Não sair do sistema

Mensagem 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
Anexos
errsysw.prg
(14.75 KiB) Baixado 70 vezes
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Não sair do sistema

Mensagem 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()
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
joaosolution
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 07 Ago 2013 11:19
Localização: Contagem/MG

Não sair do sistema

Mensagem 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
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Não sair do sistema

Mensagem 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?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
joaosolution
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 07 Ago 2013 11:19
Localização: Contagem/MG

Não sair do sistema

Mensagem por joaosolution »

Jairo

Sim normalmente declaro getlist:={} no início de todas a funções.

Att
João Bosco
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Não sair do sistema

Mensagem 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() )
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder