Multiplas chamadas de um mesmo fomulário

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Multiplas chamadas de um mesmo fomulário

Mensagem por Cavalo Marinho »

Bom dia pessoal, sou programador em Clipper a mais de 20 anos e agora estou necessitando e disposto a mudar para harbour, então resolvi começar fazendo alguns testes para saber qual e nível de dificuldades que irei enfrentar para converter tudo que tenho. Já no primeiro instante me deparei com um problema que peço a ajuda dos srs. Estou utilizando hmg 3.1.5 de Roberto Lopez.
Em Clipper eu tenho uma função genérica de consulta que passando parâmetros como: tabela, títulos, nomes de campos, teclas de atalho etc eu monto um grid de consulta para qualquer tabela passada, e a executo varias chamadas ao mesmo tempo conforme necessidade. Exemplo.: estou em uma nota fiscal e quero consultar um fornecedor, estando consultado fornecedor eu quero consultar cliente, e novamente consultar produtos, e assim sucessivamente ou seja eu chamo o mesmo formulário n vezes e depois saio retornando até o ponto inicial, como se fosse uma pilha, então em harbour comecei a implementar um formulário para fazer o que fazia em Clipper, até aí blz já está fazendo a consulta de tabelas o problema é que após a primeira consulta está instanciada eu não consigo fazer a segunda gerando um erro de que o formulário já existe. “Window:form1 already defined. Program Termined.”
Existe solução pra este problema, por favor ajude-me. Obrigado.
Editado pela última vez por Toledo em 18 Nov 2013 10:02, em um total de 1 vez.
Razão: O presente tópico foi movido da seção Harbour, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com o [x]Harbour.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Multiplas chamadas de um mesmo fomulário

Mensagem por Pablo César »

Cavalo Marinho escreveu:estou em uma nota fiscal e quero consultar um fornecedor, estando consultado fornecedor eu quero consultar cliente, e novamente consultar produtos, e assim sucessivamente ou seja eu chamo o mesmo formulário n vezes e depois saio retornando até o ponto inicial, como se fosse uma pilha
Olá. Acho que deverias ter postado na seção Minigui, se é a solução que esperas seja para HMG. Pois acredito que a sua dificuldade não esteja em Harbour em si, pois como você mesmo disse, está aproveitando a mesma rotina que tinha no Clipper.

Tanto Minigui Extended como HMG, possuem um complemento para identificador do formulário. Você criar o seu fomulário padrão que irá utilizar nas diversas pesquisas e carregá-lo através do comando:
LOAD WINDOW <arquivo_fmg> AS <nome_ do_novo_form>

Observe em vermelho o "AS" é uma espécie de alias que antecede ao nome do Form que você pode dar para cada pesquisa. Dê nomes diferentes conforme as opções de pesquisas. E para cada pesquisa você seguramente terá uma rotina diferente que ai fica mais fácil de diferenciar e dar o nome correto do form para cada opção.

Dê uma olhada em:

C:\hmg.3.0.35\SAMPLES\MULTI.INSTANCE

Se você utilizar a nova versão da HMG (atualmente, 3.1.5 em UNICODE), você encontra em:

C:\hmg.3.1.5\SAMPLES\ProgramExecution\MULTI.INSTANCE

Mas por favor surgirem mais dúvidas a respeito é bom fazê-lo na seção Minigui e de preferência poste seu código fonte ou parte dele para pode exemplificar melhor as nossas indicações.
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 do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Multiplas chamadas de um mesmo fomulário

Mensagem por Cavalo Marinho »

Boa tarde, em primeiro lugar gostaria de pedir desculpa aos moderadores por ter colocado a minha dúvida na seção errada, prometo que vou prestar mais atenção na proximas postatem, e agradecer tambem ao amigo Paulo Cesar pela diga, ja fiz uns testezinhos básicos e funcionou com 3 forms abertos, Muito obrigado, creio que vou pedir muito a ajuda de voces, mas estou empolgado com a ferramenta, aproveitando se alguem souber de uma boa apostila (Portugues) sobre harbour e Hmg por favor me indiquem.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Multiplas chamadas de um mesmo fomulário

Mensagem por Pablo César »

Cavalo Marinho escreveu:ja fiz uns testezinhos básicos e funcionou com 3 forms abertos
Quê bom que está servindo.
Cavalo Marinho escreveu:aproveitando se alguem souber de uma boa apostila (Portugues) sobre harbour e Hmg por favor me indiquem.
Veja nesta mensagem algumas das indicações:

https://pctoledo.org/forum/viewto ... 471#p85471

Mas em português vai ser difícil. Mas acho que é bom você praticar com o inglês porque existe muito material e que não é atualizado. Eu lembro que eu já deixei este o arquivo Helps.rar como anexo aqui no fórum, mas não consegui encontrar o tópico. Talvez seja melhor disponibilizá-lo na área de Downloads ou em alguma seção que atenda a finalidade de poder ser baixado. (pois agora não consigo disponibilizá-lo como anexo)

Inclusive tem um blog do brasileiro e colega Daniel Crocciari: http://hmglights.wordpress.com/
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 do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Multiplas chamadas de um mesmo fomulário

Mensagem por Pablo César »

Pablo César escreveu:Eu lembro que eu já deixei este o arquivo Helps.rar como anexo aqui no fórum, mas não consegui encontrar o tópico.
Achei ! neste tópico clique em "baixe aqui"
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 do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Multiplas chamadas de um mesmo fomulário

Mensagem por Cavalo Marinho »

Boa noite, mas uma vez tiver um problema e não conseguir me sair, parece facil mas como estou começando não conseguir entender
o problema é o seguinte: Conforme a dica do amigo Paulo Cesar, criei um formulário generico que contem alguns objetos, no memento somente dois, (ira ter mais componentes) um label e um browse para exibir dados de uma tabela, pois bem, para chamar este forumalario eu instancio com: load window xxxxx as yyyyy, quando quero setar propriedades dos componentes deste formulario funciona pro label e pro browse gera um erro de sintaxe
Exemplo yyyy.title := "formulario de consulta" funciona beleza
yyyy.label_1.value := "teste" funciona beleza
yyyy.browse_1.workarea := "forne" nao funciona
yyyy.browse_1.fields := {'campo', 'campo2'} nao funciona e assim por diante
estou anexando o projetinho para facilitar as coisas, agradeço desde já qualquer ajuda, Obrigado
estou utilizando HMB 3.1.5

Mais uma coisa: como saber a instancia que estou trabalhando, veja quando instancio o formulario com o nome forne por exemplo eu desabilito o botão ou menu que chamou para que o usuario nao click novamente gerando um erro, quando eu fechar este formulario no evento onrelease eu quer habilitar o botao exato que chamou aquele formulário, por tanto se fiz 3 chamadas ao formulario com nomes diferentes eu quero desabilitar exatamente o botao ou menu que o chamou.
Anexos
projeto_hb.rar
(1.64 MiB) Baixado 280 vezes
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Multiplas chamadas de um mesmo fomulário

Mensagem por Pablo César »

Cavalo Marinho escreveu:yyyy.browse_1.workarea := "forne" nao funciona
yyyy.browse_1.fields := {'campo', 'campo2'} nao funciona e assim por diante
Oi você tem nome que possamos te tratar ? Imagine tratar você de cavalinho... rs :)

Estas propriedades, se você olhar no HMG.CHM verá que são apenas atribuíveis durante a DEFINIÇÃO. isto é quando são definidas no momento de criar-las.
Screen.PNG
Screen.PNG (6.94 KiB) Exibido 5955 vezes
Acho que você vai ter que colocar variável e vetor para os campos e atribuir redefinindo area e campos novamente e como eu tinha te dito anteriormente na função especifica para cada ação/modalidade. Se isso não funcionar. Você poderia mudar o seu BROWSE para GRID.
Cavalo Marinho escreveu:Mais uma coisa: como saber a instancia que estou trabalhando, veja quando instancio o formulario com o nome forne por exemplo eu desabilito o botão ou menu que chamou para que o usuario nao click novamente gerando um erro, quando eu fechar este formulario no evento onrelease eu quer habilitar o botao exato que chamou aquele formulário, por tanto se fiz 3 chamadas ao formulario com nomes diferentes eu quero desabilitar exatamente o botao ou menu que o chamou.
Aqui é uma questão de lógica. Se o usuário abriu o forne e depois clica no botão clientes, o form forne, não deve fechar, sim deve abrir o form clientes (quando digo o form é o alias do form, certo ?). Mas se fechar a janela do form forne, você terá que verificar por exemplo o título da janela. Ai vai conseguir diferenciar para "re-habilitar" o botão que estava desabilitado enquanto o form estava aberto.
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 do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Multiplas chamadas de um mesmo fomulário

Mensagem por Toledo »

Cavalo Marinho escreveu:yyyy.browse_1.workarea := "forne" nao funciona
yyyy.browse_1.fields := {'campo', 'campo2'} nao funciona e assim por diante
Amigos, veja este exemplo:

Arquivo Main.prg

Código: Selecionar todos

#include <hmg.ch>

Function Main

        Load Window Main
        Main.Center
        Main.Activate

Return

Function manutForne()
   Private area_:="forne", aHeaders_:={'Código', 'Nome do Fornecedor'},;
           aFields_:={'codif', 'nomef'}, aWidths_:={50,600}
   load WINDOW fConsulta as ConsForne
   ConsForne.title := "Manutenção do Modulo de Fornecedores"
   ConsForne.lblTitulo.value := "Manutenção do Modulo de Fornecedores" 
   ConsForne.lblTitulo.FontSize := 20
   ConsForne.lblTitulo.FontBold := .t.
   
   ConsForne.center
   ConsForne.activate 
   
return

Function manutGrupo()
   Private area_:="grupo", aHeaders_:={'Código', 'Descrição do Grupo'},;
           aFields_:={'grupo', 'grupodesc'}, aWidths_:={60,600}
   load WINDOW fConsulta as ConsGrupo
   ConsGrupo.title := "Manutenção do Modulo de Grupo de Produtos"
   ConsGrupo.lblTitulo.value := "Manutenção do Modulo de Grupo de Produtos" 
   ConsGrupo.lblTitulo.FontSize := 20
   ConsGrupo.lblTitulo.FontBold := .t.   
   ConsGrupo.center
   ConsGrupo.activate 
   
return

Function Sair()
quit

Function AbrirArquivos()
request dbfcdx
rddsetdefault("dbfcdx")
dbsetdriver("dbfcdx")


//dbUseArea(.T., "DBFCDX", "ESTGRUPO", "GRUPO")
select 0
use estgrupo alias grupo 

if(!file("GRUPO.CDX"))
   index on grupo tag gcodigo to "grupo.cdx"
   index on grupodesc tag gdesc to "grupo.cdx"
ENDIF 
set index to GRUPO.CDX

select 0
use g00forne alias forne 

if(!file("FORNE.CDX"))
   index on CODIF tag Fcodigo to "FORNE.cdx"
   index on NOMEF tag FNOME to "FORNE.cdx"
ENDIF 
set index to FORNE.CDX


Function FecharArquivos()
   close databases 
   
Function SetaBotoes(lTipo)
   If ThisWindow.Name = "ConsForne"
      SetProperty( "Main", "tFornecedores", "Enabled", lTipo )
      SetProperty( "Main", "pFornecedores", "Enabled", lTipo )      
   Endif
   If ThisWindow.Name = "ConsGrupo"
      SetProperty( "Main", "tGruposProd", "Enabled", lTipo )   
      SetProperty( "Main", "pGrupos", "Enabled", lTipo )      
   Endif
No arquivo fConsulta.Fmg alterar:

Código: Selecionar todos

ON INIT SetaBotoes(.F.) ON RELEASE SetaBotoes(.T.)
e também:

Código: Selecionar todos

        WIDTHS aWidths_
        HEADERS aHeaders_
        WORKAREA &area_
        FIELDS aFields_
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
Avatar do usuário
Cavalo Marinho
Usuário Nível 3
Usuário Nível 3
Mensagens: 156
Registrado em: 01 Ago 2009 10:01
Localização: Aracaju/Se

Multiplas chamadas de um mesmo fomulário

Mensagem por Cavalo Marinho »

Bom dia a todos, venho aqui agradecer a Pablo Cesar e ao Toledo pela dicas, isso me dar força para tocar em frente, Muito Obrigado -:]
syslink
Usuário Nível 3
Usuário Nível 3
Mensagens: 132
Registrado em: 20 Fev 2018 13:13
Localização: joinvile/sc

Multiplas chamadas de um mesmo fomulário

Mensagem por syslink »

bom dia
alguem tem exemplo de um formulario padrao q possa ser usado para clientes, produtos, fornecedores, vendas, etc
ou terei q fazer um por um
tem como ser no objetc pascal onde vc cria um formulario padrao e os botoes, label, textbox, etc vai colocano a medida q for necessario
Responder