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 (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:
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