Clipper On Line • Ver Tópico - Problemas ao SAIR de uma janela no aplicativo.

Problemas ao SAIR de uma janela no aplicativo.

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor jsnascimento » 04 Fev 2013 20:34

Prezados,

Boa Noite!


Tenho um aplicativo simples em Hmg.3.0.35, rodando em Windows Xp sp3, que possui duas Janelas: (1ª) “Principal” e (2ª) “Padrao”.
Através de um item da “TOOLBAR” da primeira janela, a segunda janela é ativada, onde é dado sequência ao processamento específico.
Ao final do processamento, saio da janela (2ª) “Padrao” e vou para a janela (1ª) “Principal”. Neste ponto em diante identifico a ocorrência de um problema. Apesar do “Foco” ir para a Janela (1ª) “Principal” e mostrar os item da “TOOLBAR”, estes item de menu se tornam inertes, não executa mais nada - nem mesmo o item “Sair” está funcionando. Não consigo ir para lugar nenhum. Clico em qualquer item da “TOOLBAR” eles não realizam nada. É como se ação estivesse marcada com “Nil”.
A única forma de abandonar o aplicativo é clicando no “X” da janela (1ª) “Principal”, não obstante esta janela possuir um botão específico para sair, mas mesmo este botão não funciona mais.
Outra constatação é que ao sair do aplicativo pela única alternativa citada acima, notei que o programa, apesar de encerrado, ainda fica ativo na memória do Windows como um processo invisível, notado apenas no “Gerenciador de Tarefas do Windows”.
O que será que está acontecendo? Alguém poderia me ajudar?
Segue código da Função “Sair”:

FUNCTION SAIR
   
  IF MsgYesNo('Deseja realmente Sair ?','Confirmação',{'Sim','Não'})
      RELEASE KEY F10 OF Padrao
      DOMETHOD("Padrao","Hide")
      DOMETHOD("Padrao","Release")     
      __Quit()
           //*CLOSE DATABASE                                   
           //*THISWINDOW.RELEASE       
   ENDIF


Muito Obrigado!

Jamil S. Nascimento
" Deus amou o mundo de tal maneira que deu seu Filho Unigênito para que o mundo fosse salvo por intermédio dele." João 3:16
jsnascimento
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 21
Data de registro: 08 Jul 2004 20:05
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor Pablo César » 05 Fev 2013 09:42

Jamil, seria interessante que seja exibido o código por completo. Não interessam as funções de processamento específico, essas poderiam apenas eliminadas, mas interessaria ver as duas janelas (os dois forms) e as funções que chamam-se.
Não sabemos a razão da função SAIR ser escondida antes do release.

Liste o código completo. Assim não dá pra testar.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor MSDN » 05 Fev 2013 13:37

No código que vc mostrou, é dado o comando para deixar a janela invisível, e logo em seguida para eliminar, não é necessário, e tbem, caso vc precise usar mais de uma janela para processar informações relacionadas, chamar a função que monta a janela, e depois fechar o form seria mais indicado, em raros casos deixar 2 janelas criadas e ocultando/mostrando uma delas é uma opção usual.
Vc poderia usar somente : Padrao.Release , isso já basta para fechar a janela, automaticamente o foco volta para onde estava anteriormente.

Abraços
MSDN
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 28 Nov 2003 14:55
Cidade/Estado: CWB
Curtiu: 178 vezes
Mens.Curtidas: 123 vezes

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor jsnascimento » 05 Fev 2013 20:46

Prezados Colegas
Boa Noite!


MSDN postou:
No código que vc mostrou, é dado o comando para deixar a janela invisível, e logo em seguida para eliminar, não é necessário, e tbem, caso vc precise usar mais de uma janela para processar informações relacionadas, chamar a função que monta a janela, e depois fechar o form seria mais indicado, em raros casos deixar 2 janelas criadas e ocultando/mostrando uma delas é uma opção usual.
Vc poderia usar somente : Padrao.Release , isso já basta para fechar a janela, automaticamente o foco volta para onde estava anteriormente.


MSDN, você tem razão! Estava utilizando dois comandos para um objetivo só. Sou novato em Habour/MiniGui, por isso vou testando as possibilidades. Eu tentei utilizar "Padrao.Release", conforme sua orientação, mas está dando "pau" quando tento abortar o aplicativo na segunda Janela.

Estou enviando os fontes, mais três arquivo dbf's e um arquivo com a imagem da mensagem de erro na hora do erro. ( BUG.BMP).

Vejam se podem me ajudar a entender este erro e como solucioná-lo.

Obrigado!

Jamil S. Nascimento

Enviar.rar
(432.92 KiB) Baixado 77 vezes
" Deus amou o mundo de tal maneira que deu seu Filho Unigênito para que o mundo fosse salvo por intermédio dele." João 3:16
jsnascimento
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 21
Data de registro: 08 Jul 2004 20:05
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor Pablo César » 06 Fev 2013 08:08

Olá Jamil, como eu tinha dito também sobre não entender o esconder antes do release na função SAIR e pedi para você disponibilizar o seu código. Tudo tem uma razão. Primeiramente, parabéns pela sua criatividade e permita-me fazer algumas observações, talvez sejam críticas pessoal minha, apenas:

1. Observei que tem muitos prgs, muito módulos que em certas situações apenas chamam outros módulos. Não teria nada de mal ter muitos PRGs, seria mais prático e mais entendível você desdobrar as funções de processamento e as funções de interface (telas ou forms) separadamente. Englobando num ou dois módulos apenas.
2. Os nomes da funções, estão muito longas. Não lembro até qual tamanho é aceito em Harbour. Mas seria conveniente ser mais sintético.
3. Pelo visto, você quer cancelar o processamento Padrao_processar_action(). Do qual executa uma série de restruturações de dbf na função main_Padronizar(). Ai eu pergunto: se você interromper no meio desse processamento, isso não poderá causar algum dano nos dbfs ? (*1)
4. Se houver problemas de interromper o processamento na metade (digamos), você precisará também desabilitar todas as saídas do programa.

É importante que o seu código obedeça a lógica de funcionamento do seu aplicativo. Imagine um fluxograma onde você colocará as opções do seu aplicativo e os seus comportamentos como também a suas isenções.

Eu vou tentar re-estruturar os seus módulos, mas precisarei que você responda a minha pergunta (*3) e faça um Pseudocódigo, isto é, que relate com termos convencionais que indiquem todas as instruções (o que o programa tem que fazer). Esta é uma prática que auxilia ao programador a descrever todas as situações cabíveis para enfim elaborar um algoritmo adequado.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor jsnascimento » 06 Fev 2013 08:25

Pablo César e demais colegas,
Bom dia!

Obrigado pela críticas construtivas. Em tempo oportuno tentarei customizar mais os meus "Prgs". Quantos aos nomes dos "prgs" acredito que não interfiram no funcionamento global, mas é viável reduzi-los. Quanto ao corrompimento dos "dbf" na interrupção abrupta do programa é previsível e aceitável. Eu preciso deste dispositivo de abortamento assim como está.

Isto posto, gostaria por favor da avaliação de vocês sobre o "bug" relatado e mostrada no arquivo "Bug.bmp" anexo ao tópico; pois o "bug" apresentado certamente não é devido a customização dos meus prgs.

O que será que está acontecendo? Alguém rodou o aplicativo e viu o erro acontecendo?

Obrigado!

Jamil S. Nascimento
" Deus amou o mundo de tal maneira que deu seu Filho Unigênito para que o mundo fosse salvo por intermédio dele." João 3:16
jsnascimento
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 21
Data de registro: 08 Jul 2004 20:05
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor Pablo César » 06 Fev 2013 08:44

jsnascimento escreveu:Isto posto, gostaria por favor da avaliação de vocês sobre o "bug" relatado e mostrada no arquivo "Bug.bmp" anexo ao tópico; pois o "bug" apresentado certamente não é devido a customização dos meus prgs.

O que será que está acontecendo? Alguém rodou o aplicativo e viu o erro acontecendo?
Ahh sim esqueci de mencionar. Não é BUG é erro de programação. Eu sei que você agora tem o interesse apenas de resolver o problema a todo custo, sem se preocupar sobre as consequências. Você ainda não me disse se a interrupção do processamento poderia ou não causar danos aos seus dbfs. De todas formas o que eu quero alertar é sobre o chamado de funções que você faz de forma não sistemática. Desculpe, parece tudo muito chato o que eu estou dizendo, mas é que tenho visto que você chama e retorna aos forms de forma não muito usual e que muita vezes estaria abrindo sessões em outras áreas.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Problemas ao SAIR de uma janela no aplicativo.

Mensagempor Pablo César » 06 Fev 2013 09:07

Jamil, veja um fato muito importante. Focando apenas o erro que está dando. Você está processando arquivos dbfs e está mudando a estrutura dos mesmos e fazendo a importação dos dados, certo ? Pois bem, você está fazendo isso num laço de repetição e no meio de tudo isso você quer abortar o processamento. Para isso você teria que dar um EXIT no seu laço de repetição (no seu FOR e nos Do While) que você tem. Mas em contrapartida você está chamando uma função para liberar a tela. É por isso que sugiro você restruturar os seus módulos. Programar em GUI é diferente do que estávamos acostumados.

Uma sugestão imediatista seria você colocar uma variável lógica na linha antes do final de cada laço e essa variável seria atribuída ao botão que estaria cancelando o processo.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes




Retornar para MiniGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro