Como Usar o SetFocus() do clipper5.2

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

gavel
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 16 Mar 2005 07:30

Como Usar o SetFocus() do clipper5.2

Mensagem por gavel »

O ERRO ocorre no momento que a linha Get:SetFocus() é acionada.
O Foco não fica no Lugar onde foi setado no: Get:Col(), Get:Row()

Segue o Programa.Prg e o "EXE" anexo

Código: Selecionar todos

---------------------------------
#include "common.ch"
#include "inkey.ch"
Clear Screen
Set Date Brit
Set cent on
      dd:= Date()
      dlr:= 0
      ln:= {21}
      cl:= {29}
      camp:= {"DLR"}
      private bl_c[1], b_v[1]
      b_pe:= {Nil}
      b_po:= {{|| dlr > 0}}
      masc:= {"99,999,999.999"}
      SetColor('15/7')
      DevPos(21, 1)
      DevOut("DOLAR DO DIA " + DToC(dd) + " U$: ")
      setcursor(1)
      pd_gets(ln, cl, camp, b_v, masc, bl_c, b_pe, b_po)
      ReadModal(getlist)
      getlist:= {}
      if (LastKey() == K_ESC)
         Clear
         Quit
      endif
 
*----------------
 function PD_GETS( nln,  ncl, qcpo, nb_v, nmas, bloc, bope, bopo)
 
   local VL1, VL2, VL3, VL4:= 1, VL5:= Set(29), ;
      VL6, VL7, VL8, VL9, VL10, VL11
   begin sequence
      aeval(getlist, {|_1| _1:display()})
      for VL11:= 1 to Len(nln)
         VL6:= qcpo[VL11]
         DevPos(nln[VL11], ncl[VL11])
         DevOutPict(&VL6, nmas[VL11])
      next
      while (VL4 <= Len(nln))
         dado:= qcpo[VL4]
         get:= getnew()
         get:row(nln[VL4])
         get:col(ncl[VL4])
         get:block(&("{|valor| IF(PCOUNT()>0,&dado.:=valor,&dado.)}"))
         get:name(qcpo[VL4])
         get:picture(nmas[VL4])
         get:colorspec(bloc[VL4])
         get:preblock(bope[VL4])
         get:postblock(bopo[VL4])
         VL8:= VL9:= VL10:= 0
         get:setfocus()
         VL1:= iif(get:typeout(), .T., .F.)
         if (get:preblock() != Nil)
            if (!eval(get:preblock(), get))
               if (LastKey() == K_UP)
                  VL4:= VL4 - iif(VL4 == 1, 0, 1)
                  loop
               else
                  VL4++
                  loop
               endif
            endif
         endif
         VL6:= ""
         VL4:= iif(VL4 > Len(nln), VL4 - 1, VL4)
         if (get:type() == "N" .AND. !VL1)
            for VL10:= 1 to Len(nmas[VL4])
               VL8:= VL8 + iif(SubStr(nmas[VL4], VL10, ;
                  1) == ",", 1, 0)
            next
            VL9:= Len(nmas[VL4]) - (VL8 + 6)
         endif
         while (!VL1)
            VL2:= InKey(0)
            do case
            case VL2 == 5
               if (VL4 == 1)
                  get:undo()
                  VL1:= .F.
               else
                  VL4:= VL4 - 1
                  VL1:= .T.
               endif
            case VL2 == 24
               if (get:postblock() != Nil)
                  VL1:= iif(eval(get:postblock(), get), .T., .F.)
               else
                  VL1:= .T.
               endif
            case VL2 == 27
               get:undo()
               get:killfocus()
               break(Nil)
            case VL2 == 18
               VL4:= 0
               VL1:= .T.
            case VL2 == 3
               VL4:= Len(nln) - 1
               VL1:= .T.
            case VL2 == 29
               VL1:= .T.
            case VL2 == 23
               VL1:= .T.
            case VL2 == 13
               VL1:= .T.
            case VL2 == 21
               get:undo()
            case VL2 == 22 .AND. get:type() != "N"
               VL5:= !VL5
            case VL2 == 1
               get:home()
            case VL2 == 6
               get:end()
            case VL2 == 4
               get:right()
            case VL2 == 19
               get:left()
            case VL2 == 2
               get:wordright()
            case VL2 == 26
               get:wordleft()
            case VL2 == 8
               if (get:type() == "N")
                  get:backspace()
                  get:colorspec(bloc[VL4])
                  VL6:= Left(VL6, Len(VL6) - 1)
                  gat1:= Val(VL6)
                  DevPos(nln[VL4], ncl[VL4])
                  DevOutPict(gat1, nmas[VL4])
                  SetPos(nln[VL4], Col() - 1)
               else
                  get:backspace()
               endif
            case VL2 == 7
               get:delete()
            case VL2 == 20
               get:delwordrig()
            case VL2 == 25
               get:delend()
            case VL2 >= 32 .AND. VL2 <= 127
               VL3:= Chr(VL2)
               if (get:type() == "N" .AND. (VL3 == "." .OR. ;
                     VL3 == ","))
                  get:todecpos()
                  VL6:= VL6 + VL3
               elseif (VL5 .AND. get:type() != "N")
                  get:insert(VL3)
               elseif (get:type() != "N")
                  get:overstrike(VL3)
               else
                  get:overstrike(VL3)
                  get:colorspec(bloc[VL4])
                  VL6:= VL6 + VL3
                  if (At(".", nmas[VL4]) > 0 .AND. ;
                        Left(nmas[VL4], 2) = "@E")
                     if (Len(VL6) == VL9 .AND. At(".", VL6) ;
                           = 0 .AND. At(",", VL6) = 0)
                        get:todecpos()
                     elseif (Len(VL6) < VL9 .AND. At(".", ;
                           VL6) = 0 .AND. At(",", VL6) = 0)
                        gat1:= Val(VL6)
                        DevPos(nln[VL4], ncl[VL4])
                        DevOutPict(gat1, nmas[VL4])
                        SetPos(nln[VL4], Col() - 1)
                     endif
                  else
                     gat1:= Val(VL6)
                     DevPos(nln[VL4], ncl[VL4])
                     DevOutPict(gat1, nmas[VL4])
                     SetPos(nln[VL4], Col() - 1)
                  endif
               endif
               VL1:= iif(get:typeout(), .T., .F.)
            endcase
         end
         if (VL2 == 5)
            loop
         endif
         if (get:changed())
            get:assign()
         endif
         if (VL4 = Len(nln))
            if (get:postblock() != Nil .AND. VL2 != 5 .AND. ;
                  VL2 != 24)
               if (!eval(get:postblock(), get))
                  loop
               endif
            endif
            get:killfocus()
            get:display()
            break(Nil)
         endif
         get:killfocus()
         if (get:postblock() != Nil .AND. VL2 != 5 .AND. VL2 ;
               != 24)
            if (!eval(gnet:postblock(), get))
               loop
            endif
         endif
         VL4:= VL4 - iif(get:baddate(), 1, 0)
         get:display()
         VL4++
      end
   end sequence
   return get:varget()
Anexos
teste.rar
(86.32 KiB) Baixado 208 vezes
Editado pela última vez por sygecom em 15 Nov 2011 15:23, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como Usar o SetFocus() do clipper5.2

Mensagem por Toledo »

Amigo, executei seu TESTE.EXE e não ocorreu erro nenhum!

Dei uma olhada por cima no seu código e acho que está faltando alguma coisa!
No seu código (linha 9 e 10) você cria duas matriz (array), ln e cl, que acho que deve ser linha e coluna dos GETs. Mas você não está preenchendo os elementos destas arrays, então os GETs vão ficar sempre na linha zero e coluna zero.

Então minha pergunta: não está faltando nada neste seu código????

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
gavel
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 16 Mar 2005 07:30

Como Usar o SetFocus() do clipper5.2

Mensagem por gavel »

Toledo, meu caro. É isso que estou em dúvida. Não domino ainda o uso de arrays, portanto não sei o que está faltando?
Porém na função
pd_gets(ln, cl, camp, b_v, masc, bl_c, b_pe, b_po)
eu envio o array ln, cl
e depois chamo ln[1], cl[1] que equivale a 21, 29
e o bendito get:SetFocus() volta para a linha 0, 0
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como Usar o SetFocus() do clipper5.2

Mensagem por Toledo »

Agora entendi, então faça o seguinte:

Altere a linha 42 do seu código acima por:

Código: Selecionar todos

get:= getnew(nln[VL4],ncl[VL4])
E delete as linhas 43 e 44.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
gavel
Usuário Nível 1
Usuário Nível 1
Mensagens: 39
Registrado em: 16 Mar 2005 07:30

Resolvido Como Usar o SetFocus() do clipper5.2

Mensagem por gavel »

Toledo, meu caro. Um forte abraço. Por isso você é um vencedor.
Posso te fazer outra consulta a respeito do SINTEGRA EM ( DELPHI ) ou Clipper ?
Na verdade eu tenho um modelo aqui, simplificado para Clipper.
Queria uma opinião de um mestre.

Abraço.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como Usar o SetFocus() do clipper5.2

Mensagem por Toledo »

gavel escreveu:Posso te fazer outra consulta a respeito do SINTEGRA EM ( DELPHI ) ou Clipper ?
Não tenho muita experiência com SINTEGRA, mas abra um novo tópico sobre o assunto.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder