Página 1 de 1

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 09:12
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.

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 09:49
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.

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 15:49
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.

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 19:04
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/

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 19:28
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"

Multiplas chamadas de um mesmo fomulário

Enviado: 18 Nov 2013 20:49
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.

Multiplas chamadas de um mesmo fomulário

Enviado: 19 Nov 2013 09:42
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 5959 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.

Multiplas chamadas de um mesmo fomulário

Enviado: 19 Nov 2013 21:21
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,

Multiplas chamadas de um mesmo fomulário

Enviado: 20 Nov 2013 09:36
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 -:]

Multiplas chamadas de um mesmo fomulário

Enviado: 29 Mar 2020 12:49
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