Pessoal, boa noite!
Estou quase terminando minha tela de ERROSYS.PRG com base no PCTERROR.PRG e no HMG.CH, que será totalmente gráfica, como já mostrei no tópico específico do assunto: https://pctoledo.org/forum/viewto ... 686#p96686.
Bom, esse não é o assunto desse tópico (apesar da relação entre as rotinas).
Parei então provisoriamente com esse assunto e comecei a achar uma solução em que dá pra ser executado MODO CONSOLE e MODO GRÁFICO juntos, que também já postei no tópico: https://pctoledo.org/forum/viewto ... 53&start=0.
Então, até antes de eu executar as rotinas e alterações em meus códigos fonte para que funcionem o desejado, as mensagens de erro estavam aparecendo tudo corretamente.
Agora, se houver um erro, ele o mostra normalmente (só que não mostra a minha nova tela de erro) e quando clico em OK (na tela de erro ou no 'X' pra fechar) ele aparece uma continuação dos erros que vão se duplicando a cada pressionada de OK ou click no fechar da tela e só muda o título para Main window already defined. Program terminated.
E o programa não encerra pela tela de erro, fica em loop e mostra sempre o erro (CALLED FROM _DEFINEWINDOW) no cabeçalho das informações como sendo na linha 3305.
O engraçado que no meu código e nos módulos relacionados ao erro não existe essa linha.
Então o programa só é encerrado de 2 jeitos:
1 - abrindo o gerenciador de tarefas e forçando o encerramento, ou;
2 - clicando no X da tela MODO CONSOLE (tela do software que apresentou o erro) que está atrás da tela de erro e assim é fechado.
Bom, sei que se eu voltar para o jeito anterior que estava fazendo irá funcionar. Mas, como todos nós queremos avançar e não retroceder.
Fazer novos módulos em tela gráfica e aos poucos indo mexendo nos outros módulos - acredito que é o que todos nós queremos.
É como se a gente andasse a vida inteira de Fiat 147 e achássemos que estávamos numa FORD FUSION; mas o dia em que a gente senta numa FORD FUSION, liga o carro, engrena a marcha automática, fecha os vidros, liga o ar, não queremos mais voltar ao 147.
Acredito que é assim com todos nós que estávamos no clipper e insistindo com ele e achando que deveria ter um jeito de imprimir em USB (sem programas externos), fazer com que funcionasse sem lentidão no win xp e seguintes (osLIB foi inventada pra isso - rodar em 32 bits), achar que rodaria em 64 bits...
enfim, não podíamos e nem podemos ficar no passado agarrados e grudados como um "dente enterrado em nosso quintal".
Agora, eu que estava no máximo querendo a HMG 3.0.35, já instalei a 3.0.46, a 3.4.0 e também a MiniGui Extended.
Acho que agora estou entendendo que não posso ficar parado no tempo, tenho que avançar para fazer softwares com as aparências que os usuários querem; e, se eu não progredir do clipper pro harbour, todo jeito terei que aprender C, C++, C#, JAVA, DELPHI, PHYTON, etc...
o que acho que estou entendendo e até tomando gosto pra coisa é ver os resultados e meu software que só funcionava no máximo em win xp e desde jan/2015 já fiz testes em até máquinas com Win 8.1 64 bits.
Portanto, acredito que todos que lerem esse tópico e se ainda permaneciam em MODO CONSOLE por não haver uma solução de integração entre CONSOLE e GRÁFICO, eis aqui as soluções.
Espero que os colegas tarimbados no assunto Harbour, HMG, etc, possam ajudar na resolução do erro aqui mencionado.
Main window already defined. Program terminated
Moderador: Moderadores
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Main window already defined. Program terminated
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Main window already defined. Program terminated
Isto está ocorrendo porque dentro do "seu ERRORSYS" está ocorrendo algum erro, então o programa tenta chamar o ERRORSYS novamente e encontra o erro novamente e fica num loop infinito (erro recursivo, onde uma rotina chama ela mesma infinitamente).microvolution escreveu:e quando clico em OK (na tela de erro ou no 'X' pra fechar) ele aparece uma continuação dos erros que vão se duplicando a cada pressionada de OK
Isto ocorre porque em algum momento no "seu ERRORSYS" você está tentando criar uma janela MAIN que já existe. No modo gráfico só pode existir apenas uma janela MAIN, que seria a janela principal do programa, aquela que é apresentada no início do programa.microvolution escreveu:click no fechar da tela e só muda o título para Main window already defined. Program terminated.
A linha 3305 em questão não é do seus PRG e sim dos códigos fontes da HMG (MiniGui), onde a função _DEFINEWINDOW() vai criar uma janela em modo gráfico. Provavelmente, ou melhor, com certeza é neste momento que ocorre o erro, onde uma janela MAIN tenta ser criada, mas ela já existe.microvolution escreveu:E o programa não encerra pela tela de erro, fica em loop e mostra sempre o erro (CALLED FROM _DEFINEWINDOW) no cabeçalho das informações como sendo na linha 3305.
O engraçado que no meu código e nos módulos relacionados ao erro não existe essa linha.
Bom, pela imagem que você postou, dá para observar o caminho que o programa percorreu até ocorrer o primeiro erro, e este caminho está passando por SHOWERROR(183). Provavelmente você deve ter modificado esta função SHOWERROR(), pois no ERRORSYS original da HMG 3.0.35 esta função inicia na linha 161 e termina na linha 172, então não existe a linha 183 dentro desta função.
Então, sem ver quais foram as modificações que você fez no código original da HMG, fica impossível tentar ajudar.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Main window already defined. Program terminated
Olá bom dia!
Eis aqui o conteúdo do ERRORSYS com a linha 183 (onde está a definição do FORM_1 como MAIN):
Bom, de acordo com as explicações do nobre professor Toledo, concordo plenamente - apesar ainda do meu pouco conhecimento em HARBOUR/HMG/GUIEXT, etc...
Nessa linha 183 (MAIN) se eu mudá-la para MODAL (que é o correto no meu entendimento) quando crio novamente a LIBHMG ele me apresenta um erro de sintaxe pois não aceita criar a janela MODAL, pois a compilação entende que não existe nesse momento um formulário MAIN.
Agora, quando volto para MAIN a LIBHMG é compilada com sucesso.
Então no meu sistema eu crio o FORM_LOGIN como MAIN. Quando acontece um erro de "RUN_TIME" aí ao acionar a ERRORSYS que na linha 183 tenta criar um novo formulário MAIN aparece o erro acima descrito no tópico dessa mensagem.
Bom, obrigado ao TOLEDO e aos demais que prontamente estão sempre dispostos a nos atender e com tanta rapidez e presteza.
Enfim, agora preciso de um jeito que quando acionar a ERRORSYS o formulário MAIN do sistema seja excluído e esse seja criado.
Só que como todos sabemos a ERRORSYS é padrão e então é preciso uma forma de verificação, tipo IF/ELSE/ENDIF que verifique se já existe um formulário MAIN, se existir não será criado um MAIN na ERRORSYS, se não existir aí sim será criado na ERRORSYS o MAIN.
Bom, lembrando que como tentei compilar a LIBHMG (que contém a ERRORSYS) com um formulário MODAL deu erro de sintaxe.
Então, como será essa solução?
O prezado professor TOLEDO sabe sair dessa ou alguém responderá primeiro?
Eis aqui o conteúdo do ERRORSYS com a linha 183 (onde está a definição do FORM_1 como MAIN):
Código: Selecionar todos
DEFINE WINDOW form_1 ;
AT 90, 90 WIDTH 860 HEIGHT 400 ;
TITLE "Erro Interno no Sistema" ;
BACKCOLOR { 255, 200, 200} ;
NOSIZE NOMINIMIZE NOMAXIMIZE ;
MAIN // POR TER MUDADO DE "MODO CONSOLE .T." PARA ".F." CRIEI NO PRG (MAIN) DO SISTEMA OUTRA JANELA "MAIN" COM ISSO ELE NÃO ACEITA 2 (MAINs) AO MESMO TEMPO. 2/6/15W
//MODALNessa linha 183 (MAIN) se eu mudá-la para MODAL (que é o correto no meu entendimento) quando crio novamente a LIBHMG ele me apresenta um erro de sintaxe pois não aceita criar a janela MODAL, pois a compilação entende que não existe nesse momento um formulário MAIN.
Agora, quando volto para MAIN a LIBHMG é compilada com sucesso.
Então no meu sistema eu crio o FORM_LOGIN como MAIN. Quando acontece um erro de "RUN_TIME" aí ao acionar a ERRORSYS que na linha 183 tenta criar um novo formulário MAIN aparece o erro acima descrito no tópico dessa mensagem.
Bom, obrigado ao TOLEDO e aos demais que prontamente estão sempre dispostos a nos atender e com tanta rapidez e presteza.
Enfim, agora preciso de um jeito que quando acionar a ERRORSYS o formulário MAIN do sistema seja excluído e esse seja criado.
Só que como todos sabemos a ERRORSYS é padrão e então é preciso uma forma de verificação, tipo IF/ELSE/ENDIF que verifique se já existe um formulário MAIN, se existir não será criado um MAIN na ERRORSYS, se não existir aí sim será criado na ERRORSYS o MAIN.
Bom, lembrando que como tentei compilar a LIBHMG (que contém a ERRORSYS) com um formulário MODAL deu erro de sintaxe.
Então, como será essa solução?
O prezado professor TOLEDO sabe sair dessa ou alguém responderá primeiro?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
MICROVOLUTION - 16 anos Evoluindo Com Você!
Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!