Salvar variáveis

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Salvar variáveis

Mensagem por Poka »

# INCLUDE "MINIGUI.CH"
# INCLUDE "I_COLOR.CH"
# INCLUDE "ERROR.CH"
funct cadconv
VCODIGO:=SPAC(03)
VNOME:=SPAC(15)
VVALORCH:=0
define window TelaConv;
at 0,0;
WIDTH 490;
HEIGHT 300;
title "Manutencao de Convenios";
MODAL

@ 10 ,05 label LABEL1 value "Codigo" width 140 height 30
@ 40 ,05 label LABEL2 value "Nome" width 140 height 30
@ 70 ,05 label LABEL3 value "Valor CH" width 140 height 30

@ 10, 10*9 getBox t_codigo ;
width 4*9.5;
value @vcodigo;
pict"@k9";
tooltip "Codigo do convenio"


@ 40, 10*9 getBox t_NOME ;
width len(vnome)*9.5;
value @vnome;
pict"@!x";
Tooltip "Nome do Convenio"


@ 70, 10*9 getBox t_valor ;
width 14*9.5;
value @vVALORCH;
pict"@ke 999.999";
tooltip "valor do ch desse convenio"

@ 180,70 buttonex botaoGrava width 60 height 25;
caption "Grava" action Igrava()

end window
center window telaConv
activate window telaConv
retu nil
/////////////
func Igrava

msginfo( vCODIGO)
msginfo( VNOME )
msginfo( str(vvalorch,07,3) )

retu nil
//////////


O problema:

Eu preencho os campos , mas na funcao Igrava as variaveis vem em branco.


Agradeço qualquer ajuda.

Poka
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Mensagem por HASA »

:))

TENTA ASSIM:
msginfo( TelaConv.t_NOME.VALUE)
ABRAÇO
Avatar do usuário
gralak
Usuário Nível 3
Usuário Nível 3
Mensagens: 233
Registrado em: 21 Mar 2007 13:28
Localização: Cianorte/PR

variavel

Mensagem por gralak »

Tenta assim

func Igrava ()
msginfo(TelaConv.t_codigo .value)
msginfo(TelaConv.t_NOME.value)
msginfo(TelaConv.t_valor .value)

Se não der avisa ai pra gente ve outra coisa blziha
vlw té+++
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem por Poka »

Obrigado Hasa e Gralak por responder, deu certo sim.

Não abusando da boa vontade de vocês, se puderem me dar uma ajuda no seguinte:

Estou mexendo agora no Xharbour / Minigui, e confesso que estou gostando muito, estou tentando deixar um cadastro igual ao que eu uso em clipper, ou pelo menos parecido, não gosto muito dos que eu vejo em alguns sistemas, como por exemplo, criar o codigo apos confirmar a gravação do registro. Vou explicar melhor como eu tenho em cliiper.

Eu não tenho uma rotina de Inclusao, Alteraçao , Exclusao , Consulta seprados.

No cadastro de clientes por exemplo, quando o usuario entra na rotina eu ja preencho o codigo com o proximo numero, o meu campo codigo é sempre numero, mas tipo caracter, imagine que o proximo numero seja 10 e o tamanho do campo codigo seja 3. O sistema ja preenche com 010, se o cliente teclar enter, a rotina entra para incluir.

Se o usuario digitar no lugar de 010 um numero maior que o ultimo eu emito um aviso e peço para confirmar se aceita ou não. Já teve caso do usuario digitar a data no lugar do codigo, aí já viu né.

Se o usuario no lugar do 010 digitar um numero inferior, mas que o numero esteja em branco tambem entra para inclusão. Dessa maneira fica facil na inmplantação de um sistema quando o usuario tem muitas fichas já numeradas, e que para cadastrar todas pegam em 2 ou + usuarios para preencher os cadastros.

Se o usuario digitar um numero que já existe, o sistema traz na tela o cadastro prenchido e pergunta de quer Alterar / Excluir ou Sair. Assim que sair dessa ficha o sistema já volta novamente com o ultimo numero, e assim sucessivamente.

Estando no campo codigo, teclando o F2 o sistema mostra a tela de consulta e permite a pesquisa por codigo, nome, filtro, etc.

Outra coisa, no campo codigo, que ja esta com 010 e o usuario entrar com o codigo 7 por exemplo e teclar o enter, o sistema apaga o 010 e ja preenche o campo com 007.

Já vi muitos exemplos,e ja quebrei bastante a cabeca, mas não consequi fazer.

Gostaria da seguinte ajuda.

Em clipper seria +- assim:
cadcli->(dbgobottom())

vcodigo:=strzero(val(cadcli->codigo)+1, len(cadcli->codigo) )
vnome:=spac( len( cadcli->nome) )

@ 10,02 say "Codigo do Cliente: " get vcodigo pict"@k9";
valid zeros(@vcodigo).and. Fpesquisa() .and. funger()
read


@ 12,02 say "Nome: " get vnome
"
"
"


retu nil
///////////////
stat func funger
local xret:=.t.
//em todos os cadastro tenho essa funcao que faço todos os testes
// necessarios do cadastro

if readvar() = "VCODIGO"
...
elseif readvar() ="outro campo"
...
endif

//aqui o retorno pode ser .f. ou .t.
retu xret
//////////////////////////
func zeros(xvar)
retu ( xvar:=strzero( val(xvar),len(xvar)) )


Outra coisa, quando o campo for preenchido completamente, o cursor ir para o proximo campo. Note que no VALID eu tenho varias funcoes.


Como faço isso no GetBox?????

Se puderem dar uma ajuda, agradeço, enquanto isso vou queimando a pestana por aqui.

Um abraço


Poka
Avatar do usuário
gralak
Usuário Nível 3
Usuário Nível 3
Mensagens: 233
Registrado em: 21 Mar 2007 13:28
Localização: Cianorte/PR

Mensagem por gralak »

Caro Amigo POKA desculpa minha falha
mas vc quer fazer essa validação em que ?
XHARBOUR ou MINIGUI ?
:))
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Poka escreveu:Em clipper seria +- assim:
cadcli->(dbgobottom())
vcodigo:=strzero(val(cadcli->codigo)+1, len(cadcli->codigo) )
vnome:=spac( len( cadcli->nome) )
Isso não é bom, pois estando em rede, pode haver duplicações facilmente.

Já que você quer deixar o usuário alterar o código, o ideal seria então você criar um outro campo ID onde este sim seria sempre autoinccremental e inacessível.

Como você relaciona os clientes com outros processos? Não é pelo código?

Se você quer exibir o código antes da inclusão, uma maneira seria gravar numa outra tabela o numerador atual, pq se o cara ficar 15 minutos parado na tela pra incluir e outro pc incluir em 10, vai duplicar.

Poka escreveu:Outra coisa, quando o campo for preenchido completamente, o cursor ir para o proximo campo. Note que no VALID eu tenho varias funcoes.
Coloque no evento onchange do controle:

Código: Selecionar todos

if ( len(this.value) == this.maxlenght, proximo_obj.setfocus() )
Falou!!!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem por Poka »

Olá a todos

Gralak, estou usando GetBox da Minigui, mas acredito que o comando é em Xharbour mesmo.

Stanis, eu ja faço o tratamento de erros, apenas não coloquei aqui para nao estender mais o assunto. Todos os exemplos que eu vejo em sistema Windows, eles pegam o proximo codigo apos a confirmar a gravaçao do registro, aí fica fácil, mas pra mim essa maneira já fica enviavel. Todos dizem pra fazer a validação dos campos no final. Concordo, mas tem campos especificos que devem ser testado no ato.

Vi um sistema de Contabilidade uma vez que depois do usuario digitar "trocentos" campos disse que nao poderia gravar pelo motivo de algum campo invalido la no meio do cadasto. Aí não dá.

Sempre quando eu entro com o codigo eu gravo ele em branco no arquivo, se otro usuario entrar , ja vem com o proximo, se o usuario anterior nao gravar, o codigo vai ficar pulado mesmo. Se o usuario desistir de incluir, eu elimino o registro que nao foi concluido.

O seu exemplo não deu certo , dá erro de "caracter ilegal", mas eu consegui resolver.

Para dar continuidade nos meus cadastros , preciso trabalhar com macros, assim como eu fazia no Clipper.

Eu preciso usar macros principalmente na hora de gravar os dados.
Imagine o arquivo com 50 campos e ter que definir um a um. Já vi em varios exemplos, mas todos fazem assim.

Exemplo:

msginfo(TelaConv.t_codigo.value)
retorna por exemplo 003

x:="telaconv.t_codigo.value"
msginfo(x)
retorna a string "telaconv.t_codigo.value" e é isso mesmo

msgInfo(&x)
dá erro dizendo que a variavel nao existe
eu gostaria que me retornasse o conteudo, ou seja 003

Se puder me ajudar, agradeço.

Um abraço

Poka
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem por Stanis Luksys »

Poka escreveu:Vi um sistema de Contabilidade uma vez que depois do usuario digitar "trocentos" campos disse que nao poderia gravar pelo motivo de algum campo invalido la no meio do cadasto. Aí não dá.
É só jogar o foco no campo com erro, num tem nada demais. Eu também faço as validações só no final do cadastro. Ficar "travando" o cadastro com validações é coisa do DOS. Era bom mesmo, mas agora o conceito mudou.

Código: Selecionar todos

janela.campo.setfocus()
Poka escreveu:x:="telaconv.t_codigo.value"
msginfo(x)
retorna a string "telaconv.t_codigo.value"

Basta tirar das aspas:

Código: Selecionar todos

x:= telaconv.t_codigo.value
msginfo(x)
Isso aí...
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
momente
Usuário Nível 3
Usuário Nível 3
Mensagens: 496
Registrado em: 03 Mar 2005 11:53
Localização: São Carlos-SP
Contato:

Mensagem por momente »

Amigo Poka,

Eu também tenho cadastros assim em clipper e xharbour console, mas com a miniGUI vc tem outras vantagens, então tente pensar diferente, eu sei que é difícil, mas para o ambiente windows ter resultados vc precisará mudar sua lógica de programação. Procure separar sua maneira de programar.

Valeu!

:)Pos
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
Responder