Limitar campos e máscaras no Thinlet

5 respostas
danieldestro

Alguém conhece alguma forma (extensão) de limitar o número de caracteres e também de aplicar máscaras nos campos texto do Thinlet? Pelo que sei, o toolkit não faz isso.

Se alguém conhecer alguma solução, avise, por favor.

5 Respostas

T

Uma vez que tive de fazer isso, tive de escrever umas “actions” especiais. Não é perfeito (experimente fazer um “paste” nesse campo para ver que meleca vai acontecer). Acho que você entendeu a idéia.

Não escrevi nada com máscaras que eu não tive tempo.

<textfield name="DP05_PARA_DD" text="01" property="type=N" columns="2" halign="left" alignment="right" font="Courier" action="limit(this, DP05_PARA_VALOR, DP05_PARA_MM)" /> 
  <label text="/" /> 
  <textfield name="DP05_PARA_MM" text="11" property="type=N" columns="2" halign="left" alignment="right" font="Courier" action="limit(this, DP05_PARA_DD, DP05_PARA_AAAA)" /> 
  <label text="/" /> 
  <textfield name="DP05_PARA_AAAA" text="2005" property="type=N" columns="4" halign="left" alignment="right" font="Courier" action="limit(this, DP05_PARA_MM, DP05_NDOC)" />

onde "limit" é a seguinte função:

/**
     * Ação "limit" 
     * Note que alguns campos têm 8 dígitos,
     * como o de datas, outros têm 12, como de agência/conta, outros têm 19,
     * como o de código de depositante. Então a limitação será feita usando
     * "columns".
     * 
     * @param field
     *            O campo (passe "this")
     * @param prevField
     *            O campo anterior (passe o nome; por exemplo, "DP06_DE")
     * @param nextField
     *            O próximo campo (passe o nome; por exemplo, "DP06_DE_DEP")
     */
    public void limit(final Object field, final Object prevField,
            final Object nextField) {
        final int columns = getInteger(field, "columns");
        if (columns &gt 0) {
            final String text = getString(field, TEXT);
            if (text.length() == columns && nextField != null) {
                requestFocusAndSelect(nextField);
            } else if (text.length() == 0 && prevField != null) {
                requestFocusAndSelect(prevField);
            }
        }
    }
    /**
     * Efetua um "requestFocus" em um campo e o seleciona completamente.
     * 
     * @param field
     *            O campo a ser focado e selecionado.
     */
    private void requestFocusAndSelect(final Object field) {
        requestFocus(field);
        final String text = getString(field, TEXT);
        if (text != null && text.length() &gt 0) {
            setInteger(field, "start", 0);
            setInteger(field, "end", text.length());
        }
    }
mister_m

Se eu entendi direito, thingol, bastaria modificar seu código para verificar se o tamanho do textfield é maior que o columns, truncá-lo para o tamanho do columns e emitir um bip nessa situação antes de pular para o próximo campo.

Além disso, para deixar a solução um pouco mais limpa, a classe base para as views poderia varrer os elementos e acrescentar essa action automaticamente a todos os textfields.

danieldestro

Eu preferiria algo do tipo:

T

Volta e meia alguém modifica o código-fonte do Thinlet para suprir essas carências. (Se você olhar o site do Thinlet há algumas contribuições).
É realmente uma pena que o Thinlet seja simples demais :frowning:

mutano

Thingol, eu procurei no site do Thinlet (http://thinlet.sourceforge.net/home.html) e não vi muitas contribuições neste sentido, apenas aplicações exemplo (Showcase)… são nestes exemplos que encontro as contribuições ou tem outro site que posso dar uma olhada?

Estou com o mesmo problema em relação às máscaras para resolver, mas tudo fica parecendo meio que uma gambiarra…

Criado 5 de fevereiro de 2007
Ultima resposta 2 de abr. de 2007
Respostas 5
Participantes 4