Fórum Mudar de campo #344564
15/08/2007
0
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
Curtir tópico
+ 0Posts
16/08/2007
Vitor Alcantara
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.
Gostei + 0
16/08/2007
Carlosrm
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
Gostei + 0
16/08/2007
Anjinho Loiro
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
Gostei + 0
16/08/2007
Anjinho Loiro
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?
Gostei + 0
17/08/2007
Carlosrm
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
Gostei + 0
17/08/2007
Anjinho Loiro
Aí está.
Tá difícil, né mesmo? rs rs
Gostei + 0
20/08/2007
Carlosrm
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
Gostei + 0
28/08/2007
Pro-luck
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.
Gostei + 0
28/08/2007
Pro-luck
If Length(NomeDoEdit.Text) = 2 then
begin
Query.Edit;
QueryNomeDoCampo.Text := NomeDoEdit.Text;
Query.Post;
end;
Qualquer coisa me manda um e-mail.
Gostei + 0
04/09/2007
Anjinho Loiro
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
Gostei + 0