GARANTIR DESCONTO

Fórum Mudar de campo #344564

15/08/2007

0

Meus amiguinhos,

Como faço para o cursor automaticamente mudar de campo, qdo o tamanho do campo corrente for completamente preenchido.
É +/- assim: campo UF são dois caracteres, qdo eu terminar de colocar BA ele automaticamente muda para o campo seguinte.

Obrigada e xauziiiiiiinho.
Bjs.


Anjinho Loiro

Anjinho Loiro

Responder

Posts

16/08/2007

Vitor Alcantara

Se for num DbEdit você pode tentar isso no evento OnChange do mesmo:

if Length(TDbEdit(Sender).Text) = TDbEdit(Sender).Field.Size then
SelectNext(ActiveControl,True,True);

Se for num Edit você pode tentar isso no OnChange do mesmo:
if Length(TEdit(Sender).Text ) = TamanhoDoCampo then
SelectNext(ActiveControl,true,true);

Acho que isso deva de dar certo.


Responder

Gostei + 0

16/08/2007

Carlosrm

olá, anjinho loiro,

Como sugestão adicional, uma vez que o campo citado é o referente à UF, sabemos que cada Estado tem uma sigla diferente e única. Se usar como critério para saída co componente apenas a condição de preencher o campo, se o usuário digitar inadvertidamente ´BS´ para a sigla da UF da Bahia, o foco mudaria para o próximo campo (se houver algum outro componente tabulável no mesmo form) e a sua tabela ficaria com essa inconsistência BS para Bahia...).

Claro que você poderia fazer algum tipo de validação antes de o componente perder o foco.

Acho mais simples vc usar um componente (db)combobox, tendo na propriedade items todas as siglas de UF do Brasil. Caso nessa tabela seja possível cadastrar estrangeiros, adicione mais um item (por exemplo, ´ZZ´), para poder aceitar quem nasceu (ou mora) em outro país...

De qualquer modo, se o código faz o que você quer, então ele está correto. Quanto à outras maneiras mais curtas, rápidas, elegantes e/ou eficientes, isso depende da experiência, habilidade e estilo de cada programador.

Boa sorte!

carlosrm


Responder

Gostei + 0

16/08/2007

Anjinho Loiro

Olá meu anjo,

Concordo com vc e o erro foi meu. O que acontece é que tenho 2 dúvidas e me perdi na hora de citar um exemplo.
O exemplo do estado (UF) é para o DBLookupCombobox. Quando eu uso a letra P por exemplo a caixa mostra Pará e ao pressionar P novamente nada acontece eu gostaria que ele mostrasse outro Estado com P, no caso Paraná e depois Pernambuco e se fosse o caso, começar tudo de novo. Essa é a minha primeira dúvida e a segunda é realmente fazer com que o cursor mude de campo qdo o campo chegar ao seu tamanho máximo.
Passeando pelo fórum vi que isso não é uma dúvida só minha. rs rs rs

Se vc puder me ajudar ficarei eternamente grata.
Bjs.

[quote=´carlosrm´]olá, anjinho loiro,

Como sugestão adicional, uma vez que o campo citado é o referente à UF, sabemos que cada Estado tem uma sigla diferente e única. Se usar como critério para saída co componente apenas a condição de preencher o campo, se o usuário digitar inadvertidamente ´BS´ para a sigla da UF da Bahia, o foco mudaria para o próximo campo (se houver algum outro componente tabulável no mesmo form) e a sua tabela ficaria com essa inconsistência BS para Bahia...).

Claro que você poderia fazer algum tipo de validação antes de o componente perder o foco.

Acho mais simples vc usar um componente (db)combobox, tendo na propriedade items todas as siglas de UF do Brasil. Caso nessa tabela seja possível cadastrar estrangeiros, adicione mais um item (por exemplo, ´ZZ´), para poder aceitar quem nasceu (ou mora) em outro país...

De qualquer modo, se o código faz o que você quer, então ele está correto. Quanto à outras maneiras mais curtas, rápidas, elegantes e/ou eficientes, isso depende da experiência, habilidade e estilo de cada programador.

Boa sorte!

carlosrm



Responder

Gostei + 0

16/08/2007

Anjinho Loiro

Meu Xuxuzinho,

Não está dando certo. Compila normal, mas quando tento entrar no form parece uma mensagem dizendo que o foco está invisivel.

O q psso fazer agora?


Responder

Gostei + 0

17/08/2007

Carlosrm

anjinho loiro,

No (db)combobox não há problemas em digitar a primeira letra e encontrar (se houver) um item começando com aquela letra. O que é necessário é dar um pequeno intervalo de tempo entre uma tecla pressionada e outra. Mas se demorar demais, o componente ´entende´ que é para começar tudo de novo, eu acho. Em todos os casos, se você pressionar as setas de direção (neste caso, para baixo), o foco passará para o próximo item da lista.
Faz tempo que não uso eses códigos. Talvez valha a pena testar alterar algumas priopriedades do componente (True para False e vice versa).

´Foco está invisível´? (Se não resolver, reproduza a mensagem em inglês ou uma cópia da imagem da tela no momento de apresentação da mensagem)

Verifique se a propriedade TabStop do seu componente está em True. E, sendo um DBLookupCombobox, as duas tabelas referenciadas em DataSource e ListSource precisam estar ativas no momento em que utilizar o componente.

Abaços, carlosrm


Responder

Gostei + 0

17/08/2007

Anjinho Loiro

Project POLICred.exe raised exception class EInvalidOperation with message ´Cannot focus a disabled or invisible windows´. Process stopped. Use Step or Run to continue.

Aí está.

Tá difícil, né mesmo? rs rs


Responder

Gostei + 0

20/08/2007

Carlosrm

Anjinho loiro,

O componente para receber o foco precisa estar com três (3) propriedades (pelo menos) em True: TabStop, Enabled, Visible.

No caso do DBLookupCombobox, ele ´trabalha´ com duas (2) tabelas simultaneamente: numa tabela (referenciada na propriedade DataSource), ele pega um valor que também existe numa segunda tabela (referenciada na propriedade ListSource). Nesta segunda tabela, na mesma linha (registro, tupla...) é obtido o conteúdo do campo que será exibido na caixa do DBLookup...
Por isso, o componente só funcionará se ambas as tabelas estiverem abertas (tabela.open ou tabela.active := true). è possivel que você tenha ´fechado´ uma ou as duas tabelas, em algum comando SQL anterior
Talvez você tenha que, ao abrir o formulário (Show, Activate...) abrir também as tabelas. E fazer o inverso, ao fechar o formulário.

É o que me lembro, no momento.
Se quiser tirar isso a limpo, substitua o trabalho do DBLookupCombobox por poucas linhazinhas de código. Se der erro, será mais fácil identificar em qual linha exatamente e fica mais fácil contornar o problema...

Por último, para o componente DBLookup..., o relacionamento entre essas duas tabelas tem que estar funcionando como Mestre/Detalhe.

Se não ajudou, me desculpe...

carlosrm


Responder

Gostei + 0

28/08/2007

Pro-luck

Olha Anjinho,

Tentei as dicas do Fórum, mas ñ sei pq deram errado qdo eu tentava a dica para DBEdit, para Edits dava certo, então eu usei Edits e no evento OnExit ele lançava o valor no campo da tabela assim:

If Length(NomeDoEdit.Text) = 2 then
begin
NomeDoProximoEdit.SetFocus;
end;

Lembrando que o MaxLength do Edit, deverá estar marcando 2.

Pra mim fuincionou, pelo menos já vou colocar o sistema lá esta semana... Espero ter ajudado.

Bjs.


Responder

Gostei + 0

28/08/2007

Pro-luck

Perdão, o código acima, eu usei no OnChange do Edit. Já no OnExite eu usei este:

If Length(NomeDoEdit.Text) = 2 then
begin
Query.Edit;
QueryNomeDoCampo.Text := NomeDoEdit.Text;
Query.Post;
end;

Qualquer coisa me manda um e-mail.


Responder

Gostei + 0

04/09/2007

Anjinho Loiro

SOBE

Valeu amorzinho,

Tentei aqui e deu certo, mas ñ tem como fazer isso diretamente no DBEdit?

Meus amores, se alguém pude me ajudar ainda estou aceitando sugestões.

Bom dia pra todos.

Xerimmmmmmm


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar