Ir para o conteúdo

 Voltar a Linguagem Lua
Tela cheia

Campos de Texto em Lua (exemplo)

9 de Julho de 2008, 2:02 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 453 vezes

Olá,

 Luis (ou qualquer pessoa que já tenha inserido campo de texto em Lua), você poderia postar um exemplo de entrada de texto em Lua aqui no fórum?

 obrigado

Giuliano

 

Autor: Giuliano Bertoti


1616 comentários

  • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
    15 de Julho de 2008, 15:03

     

    Olá Giuliano, eu acabei de montar um exemplo.O meu exemplo é bem simples de se fazer, vc só precisa pegar todos os eventos que sejam de teclas pressionadas fazendo "if evt.class == key and evt.type == press", guardar essa tecla em um vetor e depois mostrar o vetor (tomando cuidado com o espaçamento entre as letras).

     abaixo o código funcionando

     contagem=0
    local IGNORE = false
    function handler (evt)
        -- Verifica se são eventos do teclado
        if IGNORE then
            return
        end
            if evt.class == 'key' and evt.type == 'press'
            then
                canvas:attrFont ("Times",10,"Bold")        --Seta fonte
                canvas:attrClip (0,0,40,20)
                canvas:attrColor('white')                --Seta fundo
                canvas:drawRect('fill',0,0,canvas:attrSize())
                canvas:attrColor('red')                --Seta fonte
                canvas:drawText(evt.key,contagem,0)
                contagem=contagem+1
                canvas:flush()
            end
    end
    event.register(handler)

     

  • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
    15 de Julho de 2008, 15:47

     

    opa, desculpa....exemplo errado.

     

    o certo abaixo

    contagem=1
    frase={}
    canvas:attrFont ("Times",10,"Bold")        --Seta fonte
    canvas:attrClip (0,0,200,10)
    local IGNORE = false
    function handler (evt)
        -- Verifica se são eventos do teclado
        if IGNORE then
            return
        end
            if evt.class == 'key' and evt.type == 'press'
            then
                canvas:attrColor('white')                --Seta fundo
                canvas:drawRect('fill',0,0,canvas:attrSize())
                canvas:attrColor('red')                --Seta cor
                frase[contagem]=evt.key
                tamanho_frase=0
                for i=1,contagem do
                x,y=canvas:measureText(frase[i])
                canvas:drawText(frase[i],tamanho_frase,0)
                tamanho_frase=tamanho_frase+x
                end
                contagem=contagem+1
                canvas:flush()
            end
    end
    event.register(handler)

    • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
      15 de Julho de 2008, 16:29

       

      Tente desacoplar o campo de texto do handler de eventos que fica mais fácil de reusar.

      Não pensei muito a respeito .. .até para não cortar a sua criatividade ...

      Talvez uma API como essa abaixo seja mais interessante:

      TextField(x, y, len)

      - Como anuncia nesse caso o tamanho da fonte usada no text field? Usa o que está em attrFont na chamada? (acho ainda ruim)

      Ou

      TextField(x,y, w, h, len)

      Poderia usar uma table para registrar as funções que recebem eventos de tecla do tratador, ou seja, a cada chamada a TextField, é feita uma entrada numa tabela para que a função de redraw saiba desenhar o campo de texto.

      Idéias melhor virão ainda aqui na trilha ... 

      • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
        15 de Julho de 2008, 16:56

         

        Ah, a minha aplicação foi só um exemplo para dar uma idéia par ao Giguliano.

        Sua idéia é bem legal....eu não entendi direito sobre que a cada chamada a textfield uma entrada numa tabela para que a função saiba redesenhar o campo de texto...

        Seria algo como...a cada chamada de textfield como parametro tambem existe a variável onde a palavra escrita vai ser guardada? Ou um vetor de palavras pré definido do método?

         

        Vamos fazer?

        =)

        • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
          16 de Julho de 2008, 15:57

           

           
          Então Carlos...criei um método seguindo sua idéia...
          function TextBox (x,y,dx,face,size,style,color_letter,color_background,evt,frase_atual)

          x é a coordenada x na tela
          y é a coordenada y na tela
          dx é o tamanho do espaço que vc quer o campo de texto
          face é a font, style o estilo e size o tamanho..
          cor de letra e cor de background..
          O evento que vai ser analisado é o evt...
          frase_atual é o vetor que possui a frase que foi construida até agora para poder desenhar a frase.

          - Se o valor do evento for uma letra diferente de Nill, seta pra cima,baixo,esqueda e enter ele adiciona a letra no vetor...retorna o vetor frase_atual
          - Se o valor do evento for Nill ou seta pra cima,baixo ou esquerda, nada faz e retorna o vetor frase_atual
          - Se o valor do evento for uma seta para a direita, adiciona espaço a frase, retorna o vetor frase_atual
          - Se o valor do evento for enter, retorna false...dizendo que é fim de entrada.

          Uma implementação do método abaixo...não está muito bem comentado, mas creio que dê para entender o funcionamento.(ele está meio grande, não existe um meio de postar o código no fórum de forma mais limpa?)  local frase_atual1 = {}
          local frase_atual2 = {}
          recipiente=0
          recipiente2=0
          canvas:attrClip (0,0,300,50)
          local IGNORE = false

          -- Método TextBox recebe como parametros respectivamente
          --Coordenada horizontal do textbox
          --Coordenada vertical do textbox
          --tamanho do textbox
          --Face,Size e Style...respectivamente dizem respeito a fonte usada no textbox
          --Color_letter e coloe_background...respectivamente dizem respeito a cor da letra do textbox e a do fundo
          --evt é o evento a ser analizado
          --frase atual, é onde o evento caso válido vai ser guardado.

          function TextBox (x,y,dx,face,size,style,color_letter,color_background,evt,frase_atual)
          if evt.key == Nill then
                  return frase_atual
              end
          if evt.key == 'CURSOR_UP' then
                          return frase_atual
                      elseif evt.key == 'CURSOR_DOWN' then
                          return frase_atual
                      elseif evt.key == 'CURSOR_LEFT' then
                          return frase_atual
                      end
              
                  if evt.class == 'key' and evt.type == 'press'
                  then
                      if evt.key == 'ENTER'
                          then
                              return false
                          end
                      canvas:attrFont (face,size,style)        --Seta fonte
                      canvas:attrColor(color_background)                --Seta fundo
                      canvas:drawRect('fill',x,y,dx,size)
                      canvas:attrColor(color_letter)                    --Seta cor
                      tamanho_frase=0
                      i=1
                      while frase_atual[i] ~= NILL do
                          x,l=canvas:measureText(frase_atual[i])
                          canvas:drawText(frase_atual[i],tamanho_frase,y)
                          tamanho_frase=tamanho_frase+x
                          i=i+1
                      end
                          if evt.key == 'CURSOR_RIGHT' then
                              frase_atual[i]=" "
                          else
                              frase_atual[i]=evt.key
                      end
                     
                      canvas:drawText(frase_atual[i],tamanho_frase,y)
                      canvas:flush()
                  end
                  return frase_atual
          end

          function handler (evt)
              --Se o recipiente não for falso então nao acabou de escrever no textbox1
              if (recipiente ~= false) then
              recipiente =TextBox(0,0,300,"Times",10,"Bold","blue","white",evt,frase_atual1)
                  --Se nao acabou de escrever no textbox1, então salva o conteudo do recepiente.
                  if(recipiente ~=false) then
                  frase_atual1=recipiente
                  end
                  else
              recipiente2 = TextBox(0,20,300,"Times",30,"Bold","red","green",evt,frase_atual2)
                  if(recipiente2 ~=false) then
                  frase_atual2=recipiente2
                  end

              end
              if(recipiente2 == false) then
              event.post('out', {class='ncl', type='presentation', transition='stops'})
              end
          end
          event.register(handler)

          • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
            23 de Julho de 2008, 15:59

             

            Newton,

            Estou tentando ler seu fonte mas estou perdendo muito tempo em quebrar todas as linhas.

            Cola de novo o fonte com quebra de linha? Se não o fizer, prometo eu mesmo quebrar as linhas. Peço a você porque deve me fazer ganhar muito tempo.

            Carlos

            • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
              23 de Julho de 2008, 16:20

               

              Desculpe carlos, aqui está tudo com linhas quebradas...estranho...

               

              Resolvi colocar meu código em um repositório online, assim fica mais fácil..

               http://pastebin.com/m15bd5195

               

               

               

              • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                26 de Julho de 2008, 14:31

                 

                Newton,

                Já vi e entendi seu código. Tenho algumas sugestões de mudanças mas queria consolidá-las melhor.

                Enfim, queria um pouco mais de tempo (pelo menos uma semana) para dar tempo de fazer alguns exemplos de aplicações e sugerir qualquer coisa com mais base prática.

                Fechado?

                Carlos

  • 196b1755b4662bf95c1e7e20aeef3620?only path=false&size=50&d=404Newton Ichihara(usuário não autenticado)
    28 de Agosto de 2008, 17:03

     

    Se eu vi bem...dentro o emulador do ginga, no caminho /usr/local/lib/lua/5.1/gui

     

    tem uma gui para fazer textbox...oO

Concurso ITU-T de Aplicações para IPTV 2012

13 de Agosto de 2012, 19:38, por Desconhecido

Gostaríamos de lembrar aos possíveis interessados que o prazo de registro para participação no Concurso ITU-T de Aplicações para IPTV 2012 (IPTV Application Challenge) se encerra nesta semana, dia 15 de agosto de 2012. Já o prazo para a submissão de aplicações se encerra no dia 07 de setembro de 2012.



NCL Eclipse 1.6 disponível

10 de Janeiro de 2012, 21:19, por Desconhecido

Caros membros da Comunidade Ginga,



Concursos de Aplicações Ginga-NCL

22 de Setembro de 2011, 3:22, por Desconhecido

    Gostaríamos de relembra-los de que há dois concursos de aplicações Ginga-NCL com inscrições ainda abertas. O convite é aberto a toda a comunidade de desenvolvedores de aplicações para o Middleware Ginga-NCL, em nível internacional. São os seguintes concursos:



Novas versões: Ginga e Ginga-NCL Virtual Set-top Box (v.0.12.3)

1 de Agosto de 2011, 20:58, por Desconhecido



Algumas Boas Notícias da Comunidade Ginga

28 de Julho de 2011, 21:31, por Desconhecido

Autor: Roberto Azevedo