Define window
Moderador: Moderadores
-
Ricardo Mauricio
- Usuário Nível 1

- Mensagens: 17
- Registrado em: 24 Nov 2009 09:09
- Localização: Londrina
Define window
Ola a todos
Estou utilizando o projeto HMG 2.9.4 com IDE 2.9.5 do Roberto Lopez
Alguem poderia me explicar as diferenças de telas e guando eu utilizo cada uma.
Define Window
Main, Child, Modal, SplitChild, Standard
(A)
Estou utilizando o projeto HMG 2.9.4 com IDE 2.9.5 do Roberto Lopez
Alguem poderia me explicar as diferenças de telas e guando eu utilizo cada uma.
Define Window
Main, Child, Modal, SplitChild, Standard
(A)
-
Ricardo Mauricio
- Usuário Nível 1

- Mensagens: 17
- Registrado em: 24 Nov 2009 09:09
- Localização: Londrina
Re: Define window
Ola a todos
Alguem poderia me dizer com o comando que eu desligo a opção de mover a tela ?
Alguem poderia me dizer com o comando que eu desligo a opção de mover a tela ?
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Define window
MAIN: como o próprio nome diz, esta será a janela principal.Ricardo Mauricio escreveu:Define Window
Main, Child, Modal, SplitChild, Standard
CHILD: é a janela "filha" da MAIN. Apesar de ficar sobre a janela MAIN, você pode acessar as opções (Menu) da janela MAIN. Se a janela MAIN for minimizada, ela será minimizada também.
MODAL: esta é igual a CHILD, mas ela retém todo o foco do programa para ela, não permite acessar as opções da janela MAIN que a criou, até que ela seja fechada.
SPLITCHILD: esta também é uma janela "filha" da MAIN, mas você não pode mover ela para fora dos limites da janela MAIN que a criou.
STANDARD: esta janela fica livre no programa, pode tanto sobrepor como pode ser sobreposta por outras janelas.
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
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Define window
Só uma observação... nas opções CHILD, MODAL e SPLITCHILD quando falo da janela MAIN, eu quero dizer a janela "PAI" que criou a janela "Filha", e não necessariamente a janela MAIN principal (Inicial).
Abraços,
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
-
Ricardo Mauricio
- Usuário Nível 1

- Mensagens: 17
- Registrado em: 24 Nov 2009 09:09
- Localização: Londrina
Re: Define window
Ola a Todos :)Pos
Colega Toledo agradeço muito sua explicação.
Fiz a pergunta pois estou com um problema de manipular as telas, coisa que eu não tinha com o clipper.
Eu abri uma tela Main e dentro do menu abri outra tela Modal ate ai tudo bem, mas quando eu abro outra tela modal e
entro e saio da erro no Ruindows e trava o micro. o que devo estar fazendo de errado.
Main/ Modal/ Modal
O pior é que tenho que abrir outra tela modal depois da ultima. Pois não quero que o usuario tenha foco da tela anterior. Dai a coisa vai pegar.
Main/ Modal/ Modal/ Modal
Da uma Dica.
Devo desabilitar as telas anteriores com Enabled, devo usar Hide ou mudo o esquema de manipulação para Main/ Child/ Child/ Modal.
Colega Toledo agradeço muito sua explicação.
Fiz a pergunta pois estou com um problema de manipular as telas, coisa que eu não tinha com o clipper.
Eu abri uma tela Main e dentro do menu abri outra tela Modal ate ai tudo bem, mas quando eu abro outra tela modal e
entro e saio da erro no Ruindows e trava o micro. o que devo estar fazendo de errado.
Main/ Modal/ Modal
O pior é que tenho que abrir outra tela modal depois da ultima. Pois não quero que o usuario tenha foco da tela anterior. Dai a coisa vai pegar.
Main/ Modal/ Modal/ Modal
Da uma Dica.
Devo desabilitar as telas anteriores com Enabled, devo usar Hide ou mudo o esquema de manipulação para Main/ Child/ Child/ Modal.
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
Re: Define window
Ricardo, segue abaixo um pequeno exemplo de como faço aqui...
Em anexo está os arquivos FMG.
Abraços,
Código: Selecionar todos
#include <minigui.ch>
Function Main
Declare Window principal
Load Window principal
principal.Center
principal.Activate
Return Nil
Function Janela1()
Declare Window janelamodal1
Load Window janelamodal1
janelamodal1.Center
janelamodal1.Activate
Return Nil
Function Janela2()
Declare Window janelamodal2
Load Window janelamodal2
janelamodal2.Center
janelamodal2.Activate
Return NilAbraços,
- Anexos
-
testemodal.zip- (2.84 KiB) Baixado 362 vezes
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:
Define window
Olá pessoal, a eu aqui traveis...
bom, de vez em quando aparece esse problema que vou relatar, mas, daí eu deixo passar batido e, o que tenho feito pra resolver é mudar o nome dele.
Exemplo:
DEFINE WINDOW F1
Então se o problema aparece eu mudo para:
DEFINE WINDOW F2.
Bom, só que agora dessa vez, não tive solução nem mudando o nome do WINDOW de F1 para F2, ou F3, F4, F5, etc...
O problema acontece já quando estou concluindo o item:
DEFINE MAIN MENU, onde as opções horizontais e seus respectivos itens verticais do POPUP/ITEM desaparecem simplesmente do nada:
POPUP Opção1
ITEM opção2
ITEM opção3
END POPUP
Então, simplesmente o formulário WINDOW F2 é criado normalmente mas, as opções do MENU POPUP não aparecem.
Então, alguém sabe o que causa isso? Já tentei a opção de excluir a pasta temporária .HBMK e compilar tudo novamente do zero, mas, não resolve. Como disse, já mudei o nome do WINDOW F2 para F3, F4, etc... e não resolve.
Aguardo sua opinião, caso saiba como solucionar.
Atenciosamente,
bom, de vez em quando aparece esse problema que vou relatar, mas, daí eu deixo passar batido e, o que tenho feito pra resolver é mudar o nome dele.
Exemplo:
DEFINE WINDOW F1
Então se o problema aparece eu mudo para:
DEFINE WINDOW F2.
Bom, só que agora dessa vez, não tive solução nem mudando o nome do WINDOW de F1 para F2, ou F3, F4, F5, etc...
O problema acontece já quando estou concluindo o item:
DEFINE MAIN MENU, onde as opções horizontais e seus respectivos itens verticais do POPUP/ITEM desaparecem simplesmente do nada:
POPUP Opção1
ITEM opção2
ITEM opção3
END POPUP
Então, simplesmente o formulário WINDOW F2 é criado normalmente mas, as opções do MENU POPUP não aparecem.
Então, alguém sabe o que causa isso? Já tentei a opção de excluir a pasta temporária .HBMK e compilar tudo novamente do zero, mas, não resolve. Como disse, já mudei o nome do WINDOW F2 para F3, F4, etc... e não resolve.
Aguardo sua opinião, caso saiba como solucionar.
Atenciosamente,
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!
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Define window
vejam em anexo a imagem do FORMULÁRIO sem o MENU POPUP:
vlw pessoal!
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:
Substituir variável por nome dentro do texto
Amigo, só com a imagem fica difícil tentar ajudar, se possível seria bom postar um código fonte que possa ser compilável, assim ficaria mais fácil para achar onde está o erro.
Abraços,
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:
Define window
Prezado Toledo e companheiros, eis aí o nosso código do DEFINE WINDOW F2 com seu DEFINE MAIN MENU que funcionava:
À medida que eu vou acrescentando as opções vou testando-as e sempre que eu errava dava um erro de RUN-TIME,corrigia e compilava para ver como ficava e eu ia ficando satisfeito.
A última vez que funcionou estava pronto os seguintes MENUs que seus respectivos nomes veem das variáveis públicas a que pertencem:
CADASTROS
Orçamentos - Orçamento
Orçamento simplificado
OSV
Contas a Pagar/ a Receber
Contas a Pagar - Incluir
- Baixar
- Contas
Quando incluí o código e fui testar o Contas a Receber é que deu no que deu
Contas a Receber - Prestações Antigas.
Espero ter ajudado a entender o problema.
DEUS EXISTE!
Código: Selecionar todos
DEFINE WINDOW F2 ;
AT 0,0 ;
WIDTH 800 HEIGHT 600 ;
TITLE 'SiCCoSV - SISTEMA DE CONTROLE COMERCIAL DE ORDENS DE SERVIÇO VEICULAR' ;
FONT 'Arial' SIZE 12 ;
CHILD // ; // já existe o WINDOW F1 como MAIN.
DEFINE MAIN MENU
for H=1 TO LEN(MENU_H)
// ? MENU_GUI[I,1],MENU_GUI[I,2],MENU_GUI[I,3],MENU_GUI[I,4]
// INKEY(0)
if MENU_H[H,1]='&Cadastros'
POPUP MENU_H[H,1]
// for CAD=1 to len(MENU_CAD)
POPUP MENU_CAD[1,1]
for CADH1=1 to len(MENU_CADH1)
// ? 'MENU_CADH1[CADH1,2]',MENU_CADH1[CADH1,2]
// wait
MENUITEM MENU_CADH1[CADH1,1] ACTION MENU_CADH1[CADH1,2] // NAME MENU_CAD1[CAD1,3]
next
END POPUP
POPUP MENU_CAD[2,1]
// for CADH2=1 to len(MENU_CADH2)
// POPUP MENU_CADH2[CADH2,1]
POPUP MENU_CADH2[1,1]
for CADH2V1=1 to len(MENU_CADH2V1)
MENUITEM MENU_CADH2V1[CADH2V1,1] ACTION MENU_CADH2V1[CADH2V1,2] // NAME MENU_CAD1[CAD1,3]
next
POPUP MENU_CADH2[2,1]
for CADH2V2=1 to len(MENU_CADH2V2)
MENUITEM MENU_CADH2V2[CADH2V2,1] ACTION MENU_CADH2V2[CADH2V2,2] // NAME MENU_CAD1[CAD1,3]
next
END POPUP
POPUP MENU_CADH2[3,1]
for CADH2V3=1 to len(MENU_CADH2V3)
MENUITEM MENU_CADH2V3[CADH2V3,1] ACTION MENU_CADH2V3[CADH2V3,2] // NAME MENU_CAD1[CAD1,3]
next
END POPUP
POPUP MENU_CADH2[4,1]
for CADH2V4=1 to len(MENU_CADH2V4)
MENUITEM MENU_CADH2V4[CADH2V4,1] ACTION MENU_CADH2V4[CADH2V4,2] // NAME MENU_CAD1[CAD1,3]
next
END POPUP
// next
END POPUP
POPUP MENU_CAD[3,1]
for CADH3=1 to len(MENU_CADH3)
MENUITEM MENU_CADH3[CADH3,1] ACTION MENU_CADH3[CADH3,2] // NAME MENU_CAD1[CAD1,3]
next
END POPUP
// next
MENUITEM MENU_CAD1[1,1] ACTION MENU_CAD1[1,2] // NAME MENU_CAD1[CAD1,3]
END POPUP
elseif MENU_H[H,1]='C&onsultas'
POPUP MENU_H[H,1]
for CON=1 to len(MENU_CON)
MENUITEM MENU_CON[CON,1] ACTION MENU_CON[CON,2] NAME MENU_CON[CON,3]
next
END POPUP
elseif MENU_H[H,1]='&Relatórios'
POPUP MENU_H[H,1]
for REL=1 to len(MENU_REL)
MENUITEM MENU_REL[REL,1] ACTION MENU_REL[REL,2] NAME MENU_REL[REL,3]
next
END POPUP
endif
// endif
next
POPUP '&Configurações'
for FOR=1 to len(MENU_FOR)
MENUITEM MENU_FOR[FOR,1] ACTION MENU_FOR[FOR,2] // NAME &MENU_FOR[FOR,3]
next
END POPUP
END MENU
END WINDOW
CENTER WINDOW F2
F2.Activate()
A última vez que funcionou estava pronto os seguintes MENUs que seus respectivos nomes veem das variáveis públicas a que pertencem:
CADASTROS
Orçamentos - Orçamento
Orçamento simplificado
OSV
Contas a Pagar/ a Receber
Contas a Pagar - Incluir
- Baixar
- Contas
Quando incluí o código e fui testar o Contas a Receber é que deu no que deu
Contas a Receber - Prestações Antigas.
Espero ter ajudado a entender o problema.
DEUS EXISTE!
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:
Define window
Amigo, seu código não é compilável, isto quer dizer... eu com este código não consigo compilar ele para fazer alguns testes, ficando assim mais complicado de saber onde está o erro. Outra coisa, seu código está com várias linhas comentadas, que acaba confundindo tudo, tornando ainda mais complicado o entendimento do código. Falta saber qual é o conteúdo ou um exemplo das matriz (MENU_H, MENU_CAD, MENU_CADH2, MENU_CADH3, MENU_CON, etc).
Então o primeiro a fazer é excluir o lixo, retirando todas estas linhas comentadas e recompilar o programa novamente... ai se o erro persistir, poste aqui novamente o código mais limpo e completo.
Abraços,
Então o primeiro a fazer é excluir o lixo, retirando todas estas linhas comentadas e recompilar o programa novamente... ai se o erro persistir, poste aqui novamente o código mais limpo e completo.
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:
Define window MAIN MENU opções POPUP/ITEM desapareceram
a pedidos... segue as funções que faltam:
Acima é apenas uma de várias outras idênticas, substituindo-se apenas o nome das variáveis MENU_H, para MENU_CAD, MENU_CADH1, etc...
E, pra completar a função MONTA_VETOR:
Prezado Toledo, quanto aos comentários que V.Sa. se refere, sabe muito melhor que eu que eles não interferem na compilação do código fonte, aliás, o interpretador de comandos nem os considera.
Como eu disse, eu fui criando as variáveis públicas, ou melhor, MATRIZes unilaterais para que com qualquer usuário fosse criado no momento do RUN-TIME o MENU de acordo com seus critérios e poderes. Por isso que dentro da função MONTA_VETOR que é chamada sempre que um ITEM do MENU é criado ela verifica através de 2 funções E_MASTER() ou EXISTE_PROGRAMA().
Eu explico:
E_MASTER - essa função retorna se o usuário/senha do LOGADO tem senha MASTER. Se isso for verdadeiro o MENU em questão será montado e liberado. Se essa função não for .T. e sim .F. entra em ação a 2ª chance do usuário com função:
EXISTE_PROGRAMA - essa função já que o usuário não tem SENHA master, verifica se esse programa está liberado pra ele. Se estiver liberado, eu coloco dentro da MATRIZ pública (no exemplo aqui a substituição de &MATRIZ_MENU. pelo seu conteúdo que é MENU_FOR) o nome desse MENU para que o usuário o veja completamente.
Bom, espero ter esclarecido para que V.Sas. me ajudem com esse problema. Apesar que esse problema me parece que é algo intermitente, pois nenhuma opção do MENU aparece.
Abraços!
O REI está voltando!
Código: Selecionar todos
aadd (LINHA,'&Cadastros')
aadd (BLOCO,{|LIN,COL| MCI10001 (LIN,COL)})
aadd (H_IND,'MCI10001')
aadd (MENU_H,{ATAIL(LINHA),ATAIL(BLOCO),ATAIL(H_IND)})
MONTA_VETOR (LINHA,BLOCO,H_IND,'Formatador-1',{|| EXECUTA_PROGRAMA ({|| PCI10998 ()})},'PCI10998','MENU_FOR')
E, pra completar a função MONTA_VETOR:
Código: Selecionar todos
static function MONTA_VETOR (LINHA,BLOCO,H_IND,PROMPT,ACAO,INDICE,MATRIZ_MENU)
if E_MASTER () .or. EXISTE_PROGRAMA (INDICE)
aadd (LINHA,PROMPT)
aadd (BLOCO,ACAO)
aadd (H_IND,INDICE)
aadd (&MATRIZ_MENU.,{ATAIL(LINHA),ATAIL(BLOCO),ATAIL(H_IND)})
return
Como eu disse, eu fui criando as variáveis públicas, ou melhor, MATRIZes unilaterais para que com qualquer usuário fosse criado no momento do RUN-TIME o MENU de acordo com seus critérios e poderes. Por isso que dentro da função MONTA_VETOR que é chamada sempre que um ITEM do MENU é criado ela verifica através de 2 funções E_MASTER() ou EXISTE_PROGRAMA().
Eu explico:
E_MASTER - essa função retorna se o usuário/senha do LOGADO tem senha MASTER. Se isso for verdadeiro o MENU em questão será montado e liberado. Se essa função não for .T. e sim .F. entra em ação a 2ª chance do usuário com função:
EXISTE_PROGRAMA - essa função já que o usuário não tem SENHA master, verifica se esse programa está liberado pra ele. Se estiver liberado, eu coloco dentro da MATRIZ pública (no exemplo aqui a substituição de &MATRIZ_MENU. pelo seu conteúdo que é MENU_FOR) o nome desse MENU para que o usuário o veja completamente.
Bom, espero ter esclarecido para que V.Sas. me ajudem com esse problema. Apesar que esse problema me parece que é algo intermitente, pois nenhuma opção do MENU aparece.
Abraços!
O REI está voltando!
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:
Define window
microvolution escreveu:Prezado Toledo, quanto aos comentários que V.Sa. se refere, sabe muito melhor que eu que eles não interferem na compilação do código fonte, aliás, o interpretador de comandos nem os considera.
Amigo, sim, eu sei que estas linhas serão descartadas na compilação, mas como você pode observar nos meu comentários acima, estas linhas acaba complicando o entendimento do código. Se antes de postar o código, você tivesse retirado estas linhas, ficaria mais fácil para interpretar o seu código que por si só já é bem complexo.Toledo escreveu:Outra coisa, seu código está com várias linhas comentadas, que acaba confundindo tudo, tornando ainda mais complicado o entendimento do código.
Bom, então eu fiz uma cópia do seu código e retirei todas as linhas comentadas, e notei o seguinte:
Entre as linhas 27 e 28 faltou um END POPUP.
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:
Define window HMG 3.0.46
opa
Bom, fiz os testes e o MENU POPUP já está quase todo completo. Então, resolvi testar o ACTION de cada função, mas, pude observar que agora estão acontecendo erros que antes não aconteciam no CONSOLE MODE. Eu explico:
Bom, de acordo com o código abaixo, essa linha acima era a responsável por no momento do pressionamento do ENTER ou da letra em destaque (TECLA HOTKEY) o programa ou módulo em questão era acionado. E, pra isso um loop usando o INKEY() nós usávamos para que o MENU ficasse esperando o acionamento de alguma tecla. E que fazia esse aguardamento era as linhas abaixo que ficam imediatamente após a linha acima:
Agora, só falta colocar parte do código da função MENU_VERTICAL, não vou postar todo o código pois é muito grande, mas, vou postar algumas partes e o local do pressionamento do ENTER onde é acionada a função EVAL(). Vejam:
Bom, de acordo com a função acima (destacamos a matriz BLOCO nas linhas 1 e 34) a função EVAL () aciona a matriz BLOCO que em seguida novamente a MONTA_VETOR que consequentemente executa EXECUTA_PROGRAMA. Vejam:
Bom, expus todas essas funções, para que V.Sas. nos ajudem a compreender as mensagens de erro que estão aparecendo.
Se eu colocar no modo gráfico dentro da ACTION os seguintes códigos apresentam, respectivamente as mensagens de erro:
EXEMPLO1
MENSAGEM ERRO EXEMPLO1
A linha acima é: exatamente a linha que chama o tal EXECUTA_PROGRAMA() do MONTA_VETOR() que usa o EVAL():
EXEMPLO2
as linhas acima, modifiquei apenas qual posição da matriz é acionada (já postei anteriormente como funcionam esse MENU_CAD(CAD1,3) ou MENU_CAD(CAD1,2)) e mesmo assim apresenta o mesmo erro anterior.
Agora para funcionar sem erros, o único jeito que descobri é no exemplo 3 abaixo. Bom, eu quero entender por que do jeito antigo (MODO CONSOLE funcionava) e agora não mais funciona:
EXEMPLO3
Nesse exemplo3, observem que irá funcionar, mas, não é o correto, pois terei que fazer em todos os PRGs que estão em MODO CONSOLE uma pequena alteração.
Outra coisa, mas, dentro do mesmo assunto:
Observem que ao final dessa função EXECUTA_PROGRAMA2, tem set key TECLA_HELP to e TECLA_UTIL to...
percebi que no MODO_GRÁFICO as teclas de função (F1 ao F12) que usava no modo CONSOLE (@ say/get ou inkey) não são acionadas para executar algumas tarefas especiais que eram:
F1 - HELP
F2 - MENU UTILITÁRIOS
F3 - repetir última digitação do campo @SAY/GET
F4 - chama o browse de pesquisa no arquivo
etc etc...
Então, alguém sabe como fazer para isso voltar a funcionar ou ser acionado?
por enquanto é só!
JESUS está voltando, queiram crer ou não, Ele é real e está sentado numa cadeira Real de realeza. Leia a Bíblia Atos 17:30-31
Prezado, mais uma vez obrigado pela ajuda interativa!Toledo escreveu:
Entre as linhas 27 e 28 faltou um END POPUP.
Abraços,
Bom, fiz os testes e o MENU POPUP já está quase todo completo. Então, resolvi testar o ACTION de cada função, mas, pude observar que agora estão acontecendo erros que antes não aconteciam no CONSOLE MODE. Eu explico:
Código: Selecionar todos
MONTA_VETOR (LINHA,BLOCO,H_IND,'Formatador-1',{|| EXECUTA_PROGRAMA ({|| PCI10998 ()})},'PCI10998','MENU_FOR')Código: Selecionar todos
if len (LINHA) > 0
OPCAO := MENU_VERTICAL (LIN,COL,LINHA,BLOCO,H_IND,OPCAO)
restscreen (0,0,maxrow (),maxcol (),S_TEL)
endif
Código: Selecionar todos
function MENU_VERTICAL (LIN1,COL1,ELEM,BLOCO,IND_HELP,INICIO)
memvar K_HELP,K_UTIL,K_CNS
local I := 1,;
J := 1,;
N_PROMPT := len (ELEM),;
PROMPT := aclone (ELEM),;
HOTKEY := array (len (ELEM)),;
TECLA := 1,;
S_CURSOR := set (_SET_CURSOR),;
COMPL := 0
afill (HOTKEY,'')
set cursor off
if LIN1 = 1
LIN1++
endif
FORM_PROMPT (PROMPT)
COMPL := MAX_ELEM_VETOR (PROMPT)
COL1 := if (COL1 + COMPL + 1 < 80,COL1,COL1 - (COL1 + COMPL + 1 - 80) - 1)
MOLDURA (LIN1,COL1,LIN1 + N_PROMPT + 1,COL1 + COMPL + 1,.f.,'')
COL1++
for I := 1 to N_PROMPT
PROMPT [I] := if (at ('~',PROMPT [I]) = 0,padr (PROMPT [I],COMPL),padr (PROMPT [I],COMPL+1))
ESCR_BAR_NORMAL (LIN1 + I,COL1,PROMPT [I])
if at ('~',PROMPT [I]) <> 0
HOTKEY [I] := upper (substr (PROMPT [I],at ('~',PROMPT [I]) + 1,1))
endif
next I
I := if (INICIO <> nil,INICIO,1)
do while .t.
ESCR_BAR_DESTAQUE (LIN1 + I,COL1,PROMPT [I])
TECLA := inkey (0)
do case
case TECLA = K_ENTER
eval (BLOCO [I],LIN1 + I + 1,COL1 + 1)
case TECLA = K_ESC
TECLA := I
exit
endcase
enddo
set (_SET_CURSOR,S_CURSOR)
return TECLACódigo: Selecionar todos
static function EXECUTA_PROGRAMA (PROGRAMA)
// MINIMIZE WINDOW F2
// RELEASE WINDOW F2
set key TECLA_UTIL to UTIL_PROG
close all
eval (PROGRAMA)
ABRE_ARQ_ACESSO ()
set key TECLA_HELP to
set key TECLA_UTIL to
return
Se eu colocar no modo gráfico dentro da ACTION os seguintes códigos apresentam, respectivamente as mensagens de erro:
EXEMPLO1
Código: Selecionar todos
if len(MENU_CADH2V1)>0
for CADH2V1=1 to len(MENU_CADH2V1)
MENUITEM MENU_CADH2V1[CADH2V1,1] ACTION MENU_CADH2V1[CADH2V1,2] // NAME MENU_CAD1[CAD1,3]
next
endif
Código: Selecionar todos
Error BASE/1132 Bound error:array access
called from (b) MCI10000(2232)
...Código: Selecionar todos
MENUITEM MENU_CADH2V1[CADH2V1,1] ACTION MENU_CADH2V1[CADH2V1,2] // NAME MENU_CAD1[CAD1,3]Código: Selecionar todos
if len(MENU_CADH1)>0
for CADH1=1 to len(MENU_CADH1)
MENUITEM MENU_CADH1[CADH1,1] ACTION MENU_CADH2V1[CADH2V1,3] // NAME MENU_CAD1[CAD1,3]
next
endifAgora para funcionar sem erros, o único jeito que descobri é no exemplo 3 abaixo. Bom, eu quero entender por que do jeito antigo (MODO CONSOLE funcionava) e agora não mais funciona:
EXEMPLO3
Código: Selecionar todos
if len(MENU_CADH1)>0
for CADH1=1 to len(MENU_CADH1)
MENUITEM MENU_CADH1[CADH1,1] ACTION EXECUTA_PROGRAMA2(pci10048()) // NAME MENU_CAD1[CAD1,3]
next
endifCódigo: Selecionar todos
static function EXECUTA_PROGRAMA2 (PROGRAMA)
MINIMIZE WINDOW F2
RELEASE WINDOW F2
set key TECLA_UTIL to UTIL_PROG
close all
PCI10048() // ou &PROGRAMA. (acho que tanto faz, não testei ainda esse exemplo)
ABRE_ARQ_ACESSO ()
set key TECLA_HELP to
set key TECLA_UTIL to
return
Outra coisa, mas, dentro do mesmo assunto:
Observem que ao final dessa função EXECUTA_PROGRAMA2, tem set key TECLA_HELP to e TECLA_UTIL to...
percebi que no MODO_GRÁFICO as teclas de função (F1 ao F12) que usava no modo CONSOLE (@ say/get ou inkey) não são acionadas para executar algumas tarefas especiais que eram:
F1 - HELP
F2 - MENU UTILITÁRIOS
F3 - repetir última digitação do campo @SAY/GET
F4 - chama o browse de pesquisa no arquivo
etc etc...
Então, alguém sabe como fazer para isso voltar a funcionar ou ser acionado?
por enquanto é só!
JESUS está voltando, queiram crer ou não, Ele é real e está sentado numa cadeira Real de realeza. Leia a Bíblia Atos 17:30-31
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!
-
microvolution
- Usuário Nível 5

- Mensagens: 1231
- Registrado em: 02 Set 2011 22:17
- Contato:
Define window RELEASE
GENTE, boa noite!
dando continuidade aos trabalhos acima que já estão bem avançados.
Criei uma tela de LOGIN com o seguinte código:
Bom, a primeira linha está comentada, pois eis o problema.
Ela é semelhante à segunda, mas com 2 diferenças que testei e vc também pode fazer o teste:
1 - No lugar de ser CHILD não coloquei nada para que fosse STANDARD.
2 - Se colocar MODAL dá uma série de erros.
Bom, mas, se o problema fosse só esse estava tudo OK, mas, não o problema é bem maior.
Antes de fazer o login eu crio o FORM principal como MAIN sem o POPUP MENU e ITEMSOURCE/ITEMS. Coloco ele em HIDE e MINIMIZE (estou falando do formulário principal MAIN). Somente depois de uns 3 formulários e várias etapas que eu MAXIMIZO.
Então antes dessa etapa de maximização do FORM PRINCIPAL (WINDOW MAIN) uma delas é a criação da tela de SPLASH, depois o LOGIN depois a tela que verifica se o aplicativo é definitivo ou apenas demonstrativo, depois ainda a tela de configuração de dados com o usuário que efetuou o LOGIN.
Depois desses processos todos e fechamento de todas telas, eu dou um MAXIMIZE no formulário WINDOW MAIN (aqui chamado de F1.MAXIMIZE) é que vem o problema que comecei a expor através do código acima.
Não sei o que é, mas, o formulário do LOGIN abre novamente e ficam os 2 formulários em aberto, conforme imagem logo abaixo: Como viram acima, tanto o MENU principal (FORM WINDOW MAIN) como o LOGIN (formulário CHILD ou não fica junto. E, se eu o fechar ele fecha todo o programa).
Já revisei todo o código e nos caminhos que percorre o sistema, através de uma coisa simples, que é: a cada função que o sistema entra e no final dela eu coloco o código:
Com o código acima eu DEBUGei todos os caminhos percorridos para tirar a dúvida se em algum momento eu chamo o formulário de LOGIN novamente.
Mas, percebi que não é isso. Então, imagino o seguinte:
O formulário login não está pegando o RELEASE (se é que esse é o comando/função para fechar definitivamente um formulário), mesmo ele sendo claro no sistema, pois quando se faz o login ele some da tela.
O código de fechamento do formulário LOGIN é:
Então se os colegas observarem aparentemente está tudo correto, mas, como vimos o formulário LOGIN volta novamente.
O que os colegas podem me ajudar a esclarecer sobre o funcionamento de DEFINE WINDOW?
dando continuidade aos trabalhos acima que já estão bem avançados.
Criei uma tela de LOGIN com o seguinte código:
Código: Selecionar todos
// DEFINE WINDOW FLogin AT 0,0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Tela de Entrada" BACKCOLOR aPicBackColor CHILD NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE ;
DEFINE WINDOW FLogin AT 0,0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Tela de Entrada" BACKCOLOR aPicBackColor NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE ;
ON INTERACTIVECLOSE {||NIL};
ON INIT SetCoords() ON MOUSEDRAG MoveForm() ON MOUSEMOVE SetCoords()
ON KEY ESCAPE OF FLogin ACTION {||ENCERRA_LOGIN()}
ON KEY ALT+F4 OF FLogin ACTION {||ENCERRA_LOGIN()}
@ 50, 82 LABEL lblUserID VALUE "Usuário:" TRANSPARENT FONTCOLOR YELLOW BOLD AUTOSIZE
FLogin.txbPasswrd.SetFocus }
@ 45, 140 TEXTBOX txbUserID WIDTH 85 HEIGHT 21 FONTCOLOR BLUE BOLD NUMERIC INPUTMASK '999999' ON ENTER { || ConfirmUser() };
ON GOTFOCUS FLogin.lblUserID.FontBold := .T. ;
ON LOSTFOCUS FLogin.lblUserID.FontBold := .F.
@ 80, 90 LABEL lblPaswrd VALUE "Senha:" TRANSPARENT FONTCOLOR YELLOW BOLD AUTOSIZE
@ 75, 140 TEXTBOX txbPasswrd WIDTH 85 HEIGHT 21 FONTCOLOR BLUE BOLD PASSWORD MAXLENGTH 06 ON ENTER { || ConfirmSenha() };
ON GOTFOCUS FLogin.lblPaswrd.FontBold := .T. ;
ON LOSTFOCUS FLogin.lblPaswrd.FontBold := .F.
DEFINE TOOLBAR barrasenha OF FLogin BUTTONSIZE 200,40 FONT 'Arial' SIZE 08 FLAT BORDER BOTTOM
BUTTON btnApply CAPTION '&Ok' PICTURE BMPCONFIRMA ACTION {||ConfirmUserSenha()} TOOLTIP "Clique aqui para confirmar seu Usuário e Senha e entrar no SiCCoSV!" SEPARATOR
BUTTON cancela CAPTION '&Cancela' PICTURE BMPCANCELA ACTION {||ENCERRA_LOGIN()} TOOLTIP "Cancela a entrada no SiCCoSV!" END TOOLBAR
END WINDOW // FLogin
FLogin.Cursor := "DragCurs"
FLogin.Center()
FLogin.Activate()
ELSE
MsgStop( cPictFNm + " Faltado Arquivos de Imagens! O sistema será abortado !", "ERROR 8 - SiCCoSV" )
ENDIF
RETURN // PERMITIU // CheckUser()
Ela é semelhante à segunda, mas com 2 diferenças que testei e vc também pode fazer o teste:
1 - No lugar de ser CHILD não coloquei nada para que fosse STANDARD.
2 - Se colocar MODAL dá uma série de erros.
Bom, mas, se o problema fosse só esse estava tudo OK, mas, não o problema é bem maior.
Antes de fazer o login eu crio o FORM principal como MAIN sem o POPUP MENU e ITEMSOURCE/ITEMS. Coloco ele em HIDE e MINIMIZE (estou falando do formulário principal MAIN). Somente depois de uns 3 formulários e várias etapas que eu MAXIMIZO.
Então antes dessa etapa de maximização do FORM PRINCIPAL (WINDOW MAIN) uma delas é a criação da tela de SPLASH, depois o LOGIN depois a tela que verifica se o aplicativo é definitivo ou apenas demonstrativo, depois ainda a tela de configuração de dados com o usuário que efetuou o LOGIN.
Depois desses processos todos e fechamento de todas telas, eu dou um MAXIMIZE no formulário WINDOW MAIN (aqui chamado de F1.MAXIMIZE) é que vem o problema que comecei a expor através do código acima.
Não sei o que é, mas, o formulário do LOGIN abre novamente e ficam os 2 formulários em aberto, conforme imagem logo abaixo: Como viram acima, tanto o MENU principal (FORM WINDOW MAIN) como o LOGIN (formulário CHILD ou não fica junto. E, se eu o fechar ele fecha todo o programa).
Já revisei todo o código e nos caminhos que percorre o sistema, através de uma coisa simples, que é: a cada função que o sistema entra e no final dela eu coloco o código:
Código: Selecionar todos
? 'início da função'
wait
? 'fim da função'
waitMas, percebi que não é isso. Então, imagino o seguinte:
O formulário login não está pegando o RELEASE (se é que esse é o comando/função para fechar definitivamente um formulário), mesmo ele sendo claro no sistema, pois quando se faz o login ele some da tela.
O código de fechamento do formulário LOGIN é:
Código: Selecionar todos
PROCEDURE ConfirmSenha()
STATIC nAttempt := 0
LOCAL n2Right, n2Left, nRepeat
LOCAL nColumn, nStep
LOCAL cUserID := FLogin.txbUserID.Value,;
cPassword := padr (alltrim (upper(FLogin.txbPasswrd.Value)),6), mPASSWORD := space (6)
// padr (alltrim (upper(cPassWord)),6)
if .not. fUSUA (cUserID)
MsgStop ('Usuário Não Cadastrado. Tente Novamente','SiCCoSV')
lConfirmed := .f.
return lConfirmed
endif
mPASSWORD := padr (alltrim (upper(cPassWord)),6)
PERMITIU := CRIPTOGRAFA (mPASSWORD) == PASSWORD
set key K_F4 to
set cursor off
if (PERMITIU) .and. (lastkey () <> K_ESC)
COD_ACESSO := mCOD_USU := cUserID
lConfirmed := .T.
FLogin.HIde
// FLogin.Release // substituí essa linha pela abaixo, por pensar que aqui era o problema.
ThisWindow.Release
ELSE
MsgStop( "Senha Inválida. Tente Novamente!", "Acesso ao Sistema" )
ENDIF
RETURN lConfirmed // ConfirmUser()O que os colegas podem me ajudar a esclarecer sobre o funcionamento de DEFINE WINDOW?
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!