Mudar de campo
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.
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
Curtidas 0
Respostas
Vitor Alcantara
15/08/2007
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.
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
Carlosrm
15/08/2007
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
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
Anjinho Loiro
15/08/2007
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
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
Anjinho Loiro
15/08/2007
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?
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
Carlosrm
15/08/2007
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
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
Anjinho Loiro
15/08/2007
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
Aí está.
Tá difícil, né mesmo? rs rs
GOSTEI 0
Carlosrm
15/08/2007
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
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
Pro-luck
15/08/2007
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.
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
Pro-luck
15/08/2007
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.
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
Anjinho Loiro
15/08/2007
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
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