Ao sair de um READ como identificar a posicao do ultimo get?
Moderador: Moderadores
Ao sair de um READ como identificar a posicao do ultimo get?
Pesquisei e nao encontrei. Ao sair de um READ (readmodal) preciso saber a posicao do ultimo GET que foi perdido o foco, ou seja o ultimo GET que foi pressionado enter ou exitkeys.
O que eu pretendo fazer é ao dar um erro de validacao fora do GET eu quero chamar a funcao readmodal passando o parametro nPos para que o usuario continue digitando da onde parou.
O que eu pretendo fazer é ao dar um erro de validacao fora do GET eu quero chamar a funcao readmodal passando o parametro nPos para que o usuario continue digitando da onde parou.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Ao sair de um READ como identificar a posicao do ultimo get?
Ola!
Na minha época usava as cláusulas WHEN e VALID.
@ x,y say "CPF:" get cCPF when fWhen() valid fValid()
Que é o equivalente "On [get]Focus", "On LostFocus"
Saudações,
Itamar M. Lins Jr.
Na minha época usava as cláusulas WHEN e VALID.
@ x,y say "CPF:" get cCPF when fWhen() valid fValid()
Que é o equivalente "On [get]Focus", "On LostFocus"
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Ao sair de um READ como identificar a posicao do ultimo get?
Obrigado Itamar!
Sim, preciso rever meus conceitos, estudar melhor when e valid e ver se me atende. É que estou tentando fazer algo dinamico como uma linguagem de marcacao para realizar cadastros CRUD de forma automatica.
De qualquer forma, se alguem souber agradeco!
Voce hoje esta usando a minigui?
rgds,
Sim, preciso rever meus conceitos, estudar melhor when e valid e ver se me atende. É que estou tentando fazer algo dinamico como uma linguagem de marcacao para realizar cadastros CRUD de forma automatica.
De qualquer forma, se alguem souber agradeco!
Voce hoje esta usando a minigui?
rgds,
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Ao sair de um READ como identificar a posicao do ultimo get?
Ola!
Tipo mineiro ôndicôtô!
Para cada aninhamento de read vc vai ter que salvar em uma nVarTelaTal
Ou usar keyboard() para simular o enter, muito complicado se tiver um campo com "valid .not. empty()"
Além do mais, pensei agora da necessidade de gravar todos os outros gets, que foi digitado, pq pra quê vou pular para o get tal se irei precisar digitar o nome da pessoa novamente ?
Saudações,
Itamar M. Lins Jr.
Se vai sair do read, via valid() vc vai jogar o "variável" do get em questão no disco ou salvar em uma nPosTelaX e sempre chamar uma função.De qualquer forma, se alguem souber agradeco!
Tipo mineiro ôndicôtô!
Para cada aninhamento de read vc vai ter que salvar em uma nVarTelaTal
Código: Selecionar todos
ReadModal( GetList, GotoGet("TelaClientes") ) ; GetList := {}
Function GotoGet(cTela)
local nRet:=1
IF cTela == "TelaClientes"
nRet := nPosTelaClientes
...
Return nRet
Além do mais, pensei agora da necessidade de gravar todos os outros gets, que foi digitado, pq pra quê vou pular para o get tal se irei precisar digitar o nome da pessoa novamente ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Ao sair de um READ como identificar a posicao do ultimo get?
Ola!
Saudações,
Itamar M. Lins Jr.
Hwgui.Voce hoje esta usando a minigui?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
Ao sair de um READ como identificar a posicao do ultimo get?
Eu estava imaginando que existisse algum metodo que retornasse a posicao do get dentro do getlist mas nao consegui encontrar. Como estou fazendo algo dinamico tenho gravado em um array do get e as posicoes row e col, entao ao sair do readmodal, estou pensando e "procurar" atraves do row() e col() que saiu do readmodal sua correspondencia no meu array get. Da um pouco de trabalho mas fica mais consistente. (assim espero....rsrsrs.....)
PS: Usei muito a solucao do keyboard como interface para troca de informacoes entre funcoes mas isso é meio que gambiarra e é dificil de dar manutencao. Quando precisa mexer é dificil de se alterar e testar.
PS: Usei muito a solucao do keyboard como interface para troca de informacoes entre funcoes mas isso é meio que gambiarra e é dificil de dar manutencao. Quando precisa mexer é dificil de se alterar e testar.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Ao sair de um READ como identificar a posicao do ultimo get?
To tentando imaginar pra que raios quer saber a posição do GET.
Se encerrou.... acabou
Mas se quiser complicar....
A alternativa é usar o READ SAVE
Nota:
Perguntaram nestes dias desse uso ( GetList ).
Tá aí um uso, só pra não dar erro na compilação -w3 -es2, porque ao fazer GetList := {} teria que usar depois.
E pra não dar erro de falta de uso.... usa pra nada.
Se encerrou.... acabou
Mas se quiser complicar....
Não vai poder nem usar o READ, porque a lista é limpa assim que o READ se completa.#command READ => ReadModal( GetList ) ; GetList := {} ; ( GetList )
A alternativa é usar o READ SAVE
Mas vai ter que limpar o GetList manualmente.#command READ SAVE => ReadModal( GetList )
Nota:
Perguntaram nestes dias desse uso ( GetList ).
Tá aí um uso, só pra não dar erro na compilação -w3 -es2, porque ao fazer GetList := {} teria que usar depois.
E pra não dar erro de falta de uso.... usa pra nada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
Adalberto
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 01 Set 2007 01:09
- Localização: Santa Cruz de la Sierra - Bolivia
Ao sair de um READ como identificar a posicao do ultimo get?
lwinter, boa noite.
Es posible saber de que GET ha salido el READ, se consigue modificando el GetSys en:
Espero que sea de utilidad para lo que estas buscando, si en algo puedo ayudar cuenta conmigo.
Abrazos, Adalberto
Es posible saber de que GET ha salido el READ, se consigue modificando el GetSys en:
Código: Selecionar todos
PROCEDURE GetApplyKey(
....
CASE (nKey == K_ESC)
oGet:exitState:= GE_ESCAPE
cVariablePublica:= oGet:NAME // esto es lo que debes aumentar
ENDIF
Luego en tu programa, debajo del READMODAL
...
@ 16,40 GET cDbf PICT '!' ;
VALID CtChekBox(@cDbf) COLOR cGet
READMODAL( GetList, 0, ,,,,, 1 ); GetList:= {}
Msg(cVariablePublica)
....
En cVariablePublica tendrás el nombre de la variable en la que estaba el foco cuando se terminó la captura de datos (GET/READ)
Abrazos, Adalberto
Ao sair de um READ como identificar a posicao do ultimo get?
Oi Adalberto, sim me ajudou bastante!
Obrigado!
rgds,
Obrigado!
rgds,
Ao sair de um READ como identificar a posicao do ultimo get?
Para não mexer no Getsys, tente
Código: Selecionar todos
nome=space(30)
codigo=0
endereco=space(50)
ultGet=""
@01,01 say "Nome.....: "get nome pict"@!" when acha("nome")=.t.
@02,01 say "Codigo...: "get codigo pict"999999" when acha("codigo")=.t.
@03,01 say "Endereco.: "get endereco pict"@!" when acha("endereco")=.t.
read
? ultGet
function acha(cGet)
ultGet=cGet
return .t.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Ao sair de um READ como identificar a posicao do ultimo get?
Ola!
Depois eu entendi que ele quer simular o comportamento dos navegadores.
Guardar na memória as entradas emails, etc... COMBOBOX com os históricos do que foi digitado.
Saudações,
Itamar M. Lins Jr.
Depois eu entendi que ele quer simular o comportamento dos navegadores.
Guardar na memória as entradas emails, etc... COMBOBOX com os históricos do que foi digitado.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Ao sair de um READ como identificar a posicao do ultimo get?
Se for assim, talvez melhor apenas mexer no READ
Mesmo assim, não sei se fica guardada a posição de finalização na GetList, vai ter que testar.
Uma vez que é pra aplicar seu dicionário, talvez seja interessante criar sua própria GetList, e ampliar recursos.
Por exemplo, a partir da GetList, fazer uma validação geral antes de finalizar.
Seria interessante, dividir o VALID em dois ou três: um pra validação, um pra formatação de campo, e um outro eventual que não tenha a ver com os anteriores. Meio parecido com o que existe, ou deveria existir, em GUI - OnChange(), OnGetFocus(), OnLostFocus(), Validate()
Como já comentei por aqui, no VB eu usava:
OnGetFocus() - por exemplo no CPF/CNPJ ou Date, pra retirar a formatação, e pro usuário digitar sem se preocupar com pontuação
OnLostFocus() - pra formatar, colocar pontuação do CPF/CNPJ ou data
Validate() - pra validação propriamente dita, até com preenchimento de um campo de descrição por exemplo, e principalmente pra validar todos os campos de uma vez no final.
Veja aí, conforme o que pretende fazer.
Código: Selecionar todos
READ SAVE
// Usa a GetList e/ou faz uma cópia
GetList := {} // ou CLEAR GETS
Uma vez que é pra aplicar seu dicionário, talvez seja interessante criar sua própria GetList, e ampliar recursos.
Por exemplo, a partir da GetList, fazer uma validação geral antes de finalizar.
Seria interessante, dividir o VALID em dois ou três: um pra validação, um pra formatação de campo, e um outro eventual que não tenha a ver com os anteriores. Meio parecido com o que existe, ou deveria existir, em GUI - OnChange(), OnGetFocus(), OnLostFocus(), Validate()
Como já comentei por aqui, no VB eu usava:
OnGetFocus() - por exemplo no CPF/CNPJ ou Date, pra retirar a formatação, e pro usuário digitar sem se preocupar com pontuação
OnLostFocus() - pra formatar, colocar pontuação do CPF/CNPJ ou data
Validate() - pra validação propriamente dita, até com preenchimento de um campo de descrição por exemplo, e principalmente pra validar todos os campos de uma vez no final.
Veja aí, conforme o que pretende fazer.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Ao sair de um READ como identificar a posicao do ultimo get?
Oi pessoal! Obrigado pelas sugestoes.
Eu acabei realizando uma pequena alteracao no GetSys para garantir que nPos seja a selecao do ultimo Get editado. Eu inclui uma nova variavel local chamada ultimoPos e coloquei ela dentro do While mas antes do settle pois caso der enter no ultimo campo ela retorna 0. E logo no final dela atribuo nPos = ultimoPos.
Ao inves de READ passo a chamar a readmodal direto, com:
ReadModal (GetList, @nPos)
GetList = {}
Agora tenho o valor da ultima posicao de onde saiu do Get.
Desta forma posso fazer as validacoes e caso houver erro ao entrar no get novamente a readmodal posiciona o foco no get onde ocorreu o erro.
if errocampo3()
nPos = 3 // retorna ao get 3
loop
end
Como estou tentando fazer uma classe generica de cadastro, apenas altero o metodo de validacao dos gets (de todos eles) na classe filha atraves de polimorfismo.
Sei la, foi uma forma que pensei e me parece ser boa (ate o momento) vamos ver na pratica que é onde os problemas aparecem!!
FUNCTION ReadModal( GetList, nPos, lIsMouse, getMouseButtons ) // by Leo
LOCAL oGet
LOCAL aSavGetSysVars
LOCAL aVarGet, oElement // altera��o JPA
local ultimoPos // by leo
nPos := iif( nPos == NIL, 0, nPos ) // by JPA, ref /z no 2000
hb_default (@getMouseButtons, {} )
IF ( VALTYPE( sbFormat ) == "B" )
EVAL( sbFormat )
ENDIF
IF ( Empty( GetList ) )
// S'87 compatibility
SETPOS( MAXROW() - 1, 0 )
RETURN (nPos) // by leo .F.) // NOTE
ENDIF
// Preserve state variables
aSavGetSysVars := ClearGetSysVars()
// Set these for use in SET KEYs
scReadProcName := PROCNAME( 1 )
snReadProcLine := PROCLINE( 1 )
// Set initial GET to be read
IF ! nPos > 0
nPos := Settle( Getlist, 0 )
ENDIF
ultimoPos = nPos
DO WHILE ! nPos == 0
aVarGet := Array( Len( GetList ) )
FOR EACH oElement IN GetList // by JPA to otimize screen update
aVarGet[ oElement:__EnumIndex ] := oElement:VarGet()
NEXT
// GET NEXT GET from list and post it as the active GET
PostActiveGet( oGet := GetList[ nPos ] )
// Read the GET
IF ( VALTYPE( oGet:reader ) == "B" )
EVAL( oGet:reader, oGet ) // Use custom reader block
ELSE
GetReader( oGet, lIsMouse, getMouseButtons ) // Use standard reader
ENDIF
FOR EACH oElement IN GetList // by JPA to otimize screen update
IF aVarGet[ oElement:__EnumIndex ] != oElement:VarGet()
oElement:Display()
ENDIF
NEXT
// Move to NEXT GET based on EXIT condition
nPos := Settle( GetList, nPos )
if nPos > 0
ultimoPos = nPos
end
ENDDO
// Restore state variables
RestoreGetSysVars( aSavGetSysVars )
// S'87 compatibility
SETPOS( MAXROW() - 1, 0 )
nPos = ultimoPos // by leo
RETURN (slUpdated )
Eu acabei realizando uma pequena alteracao no GetSys para garantir que nPos seja a selecao do ultimo Get editado. Eu inclui uma nova variavel local chamada ultimoPos e coloquei ela dentro do While mas antes do settle pois caso der enter no ultimo campo ela retorna 0. E logo no final dela atribuo nPos = ultimoPos.
Ao inves de READ passo a chamar a readmodal direto, com:
ReadModal (GetList, @nPos)
GetList = {}
Agora tenho o valor da ultima posicao de onde saiu do Get.
Desta forma posso fazer as validacoes e caso houver erro ao entrar no get novamente a readmodal posiciona o foco no get onde ocorreu o erro.
if errocampo3()
nPos = 3 // retorna ao get 3
loop
end
Como estou tentando fazer uma classe generica de cadastro, apenas altero o metodo de validacao dos gets (de todos eles) na classe filha atraves de polimorfismo.
Sei la, foi uma forma que pensei e me parece ser boa (ate o momento) vamos ver na pratica que é onde os problemas aparecem!!
FUNCTION ReadModal( GetList, nPos, lIsMouse, getMouseButtons ) // by Leo
LOCAL oGet
LOCAL aSavGetSysVars
LOCAL aVarGet, oElement // altera��o JPA
local ultimoPos // by leo
nPos := iif( nPos == NIL, 0, nPos ) // by JPA, ref /z no 2000
hb_default (@getMouseButtons, {} )
IF ( VALTYPE( sbFormat ) == "B" )
EVAL( sbFormat )
ENDIF
IF ( Empty( GetList ) )
// S'87 compatibility
SETPOS( MAXROW() - 1, 0 )
RETURN (nPos) // by leo .F.) // NOTE
ENDIF
// Preserve state variables
aSavGetSysVars := ClearGetSysVars()
// Set these for use in SET KEYs
scReadProcName := PROCNAME( 1 )
snReadProcLine := PROCLINE( 1 )
// Set initial GET to be read
IF ! nPos > 0
nPos := Settle( Getlist, 0 )
ENDIF
ultimoPos = nPos
DO WHILE ! nPos == 0
aVarGet := Array( Len( GetList ) )
FOR EACH oElement IN GetList // by JPA to otimize screen update
aVarGet[ oElement:__EnumIndex ] := oElement:VarGet()
NEXT
// GET NEXT GET from list and post it as the active GET
PostActiveGet( oGet := GetList[ nPos ] )
// Read the GET
IF ( VALTYPE( oGet:reader ) == "B" )
EVAL( oGet:reader, oGet ) // Use custom reader block
ELSE
GetReader( oGet, lIsMouse, getMouseButtons ) // Use standard reader
ENDIF
FOR EACH oElement IN GetList // by JPA to otimize screen update
IF aVarGet[ oElement:__EnumIndex ] != oElement:VarGet()
oElement:Display()
ENDIF
NEXT
// Move to NEXT GET based on EXIT condition
nPos := Settle( GetList, nPos )
if nPos > 0
ultimoPos = nPos
end
ENDDO
// Restore state variables
RestoreGetSysVars( aSavGetSysVars )
// S'87 compatibility
SETPOS( MAXROW() - 1, 0 )
nPos = ultimoPos // by leo
RETURN (slUpdated )
