Clipper On Line • Ver Tópico - Posição do cursor
Página 1 de 1

Posição do cursor

MensagemEnviado: 01 Nov 2010 09:59
por gbetorodrigues
Ola a todos
Estou tentando fazer uma pesquisa em um GET a medida que o usuário vai digitando, porém ao retornar da funcao de verificação ele perde a coluna (ou seja a posicao do cursor que ele estava anteriormente), indo parar no inicio do campo. Tentei enviar um KEYBOARD CHR(6) - Tecla END mas nao funciona se alguem tiver alguma sugestao agradeco
veja o exemplo das intrucoes:

LINHA ONDE CHAMA A FUNCAO ...
REDEFINE GET oOBS2D VAR xobs2 ID 4002 OF oshwobs MEMO ON CHANGE Tamobs(oOBS2D,@oSayob2,500,@oshwobs) UPDATE

TRECHO DA FUNCAO QUE EXECUTA E RETORNA

Local nTama := Len(oOBS2D:cText())
sayob2 := ALLTRIM(STR(fixobs - nTama)) + " caracteres"

formobs:update()
formobs:refresh()

...

oOBS2D:setfocus()
KEYBOARD CHR(6)

Re: Posição do cursor

MensagemEnviado: 01 Nov 2010 14:53
por Eric.Developer
gbetorodrigues,

Keyboard normalmente não se aplica a ambientes gráfico orientados a eventos, são os eventos que disparam o comportamento.

A classe utilizada pela instrução @... get ... do FiveWin, possui o método oGet:GoHome() para mover para o inicio, mas não a todos os métodos comuns, porém FiveWin também depende da Classe GET nativa do xBase console (Clipper, [x]Harbour), não via herança, ele instancia um objeto do console e guarda na propriedade oGet:oGet do FiveWin, portanto para mover para o fim, experimente:

oSeuGet:oGet:end()

as vezes, poderá se fazer necessário códigos adicionais. No passado precisei mover o cursor, analisando todas as classes envolvidas consegui a solução.

Re: Posição do cursor

MensagemEnviado: 03 Nov 2010 15:28
por gbetorodrigues
Ainda estou testando as dicas (ainda nao funcionou), estou fazendo algumas mudancas na rotina que é executada (antes do retorno). Obrigado a todos.

Re: Posição do cursor

MensagemEnviado: 03 Nov 2010 15:34
por gbetorodrigues
Acabei de efetuar o teste e o 'editbox' some ao passar pela função...

Re: Posição do cursor

MensagemEnviado: 03 Nov 2010 15:39
por gbetorodrigues
Observe as funcoes:

Quando eu faço com um GET VALID funciona, mas ao mudar para ON CNANGE , parece que o cursor se perde.

FUNCTION OBSLAUDO1()

sayob2 := ALLTRIM(STR(600-LEN(xobs2))) + " caracteres"

DEFINE DIALOG oshwobs RESOURCE "OBSLAUDO" 

REDEFINE GET oOBS1A VAR xobs1    ID 4001 OF oshwobs MEMO UPDATE
REDEFINE GET oOBS1B VAR xobstit2 ID 4007 OF oshwobs UPDATE
REDEFINE GET oOBS1C VAR xendweb  ID 4008 OF oshwobs UPDATE
REDEFINE SAY oSayob2 VAR sayob2  ID 4010 OF oshwobs UPDATE
REDEFINE GET oOBS2D  VAR xobs2   ID 4002 OF oshwobs MEMO ON CHANGE Tamobs(oOBS2D,@oSayob2,(800-LEN(xobs2)),@oshwobs,@sayob2) UPDATE
REDEFINE GET oOBS3E VAR xobs3    ID 4003 OF oshwobs MEMO UPDATE

REDEFINE BUTTON obtobs ID 100 OF oshwobs ACTION oshwobs:End()

ACTIVATE DIALOG oshwobs CENTERED 

RETURN NIL

*******************************************
FUNCTION Tamobs(oOBS2D,oSayob2,fixobs,formobs,sayob2)

LOCAL CHRLF := chr(10)+chr(13)//, sitobs := .T.

Local nTama := Len(oOBS2D:cText())
sayob2 := ALLTRIM(STR(fixobs-nTama)) + " caracteres"

If nTama > fixobs
    MsgAlert("Tamanho máximo permitido !","Aviso !")
    //sitobs := .F.
Endif

formobs:update()
formobs:refresh()

oOBS2D:Goend()

RETURN NIL

*********************************************

Re: Posição do cursor

MensagemEnviado: 03 Nov 2010 15:43
por gbetorodrigues
Na linha onde se lê: ...800-LEN( ... deve mudar para 600
foi um esquecimento. (São 600 caracteres no máximo onde o usuário deve utilizar ).

Re: Posição do cursor

MensagemEnviado: 06 Jan 2011 14:22
por ICO
Boa Tarde..

Veja se é isso que vc. tá querendo...

oget[8]:SetPos(0)


onde oget[8] é o get onde o cursor retorna, altere o SetPos(0) para a posição que vc. quer que retorne..

Abraços..