Fórum Active Control - Erro do Delphi? Como Resolver? #324038
22/06/2006
0
Minha intenção é não deixar o usuário sair de um Tedit sem que tenha digitado alguma coisa, exceto se quiser fechar o form.
Então vamos lá:
- Inicie um novo projeto;
- Coloque dois TEdits (name: edit1 e edit2) no form;
- Coloque o TBitBtn (name: BotVoltar);
- No envento OnClick do BotVoltar, coloque Close;
- TabOrder do Edit1 = 0;
- TabOrder do Edit2 = 1;
- TabOrder do BotVoltar = 2;
- No evento OnExit do Edit1, coloque:
if (trim(Edit1.text) = ´´) and (ActiveControl <> BotVoltar) //se não digitou nada e não clicou no BotVoltar
begin
ShowMessage(´o campo não pode ficar em branco´)
Edit1.setFocus;
end;
Muito bem, agora execute o projeto, deixe o edit1 sem nada e tente sair dele com o tab ou clicando no edit2. Em principio a rotina funciona a contento, ou seja, vc não conseguirá sair do edit1 sem q este tenha algum texto nele ou queira fechar o form (clicando no BotVoltar).
Agora o erro:
Coloque o cursor no edit1, deixe o texto desse edit em branco. Agora só pressione o botão esquerdo do mouse (sem soltar) no BotVoltar. Em seguida, arraste o mouse para uma área qualquer do form onde não tenha nenhum componente e em seguida solte o botão do mouse.
Percebeu? Agora você consegue acessar o edit2 sem ter nenhum texto no edit e sem fechar o form.
Será que tem alguma forma para resolver isso?
Obrigado
Valdirdill
Curtir tópico
+ 0Posts
22/06/2006
Adriano Santos
Gostei + 0
22/06/2006
Rodc
Gostei + 0
22/06/2006
Adriano Santos
Pode crer, um SpeedButton sem a propriedade Flat ativa fica igualzinho.
Gostei + 0
23/06/2006
Marco Salles
Quias são as exceçoes ??? as exceçoes são os componentes que podem receber o foco mesmo que o edit esteja Vazio
E quais são as regras ... Os componentes que não podem receber o foco , quando o edit estiver vazio
Veja que seu If voce esta tratando as regras
Porque isto e qual a diferença ?? Se voce tiver um form com muitos componentes , voce terar um if com muitos and , para evitar que o foco seje deslocado..
Bem , outro ponto no seu codigo e a instrução ActiveControl <> BotVoltar
No momento da execução do evento OnExit Do Edit o controle ativo ainda não é O BotVoltar... Mesmo que voce click nele.
Não precisa nen fazer o experimento de soltar e arrastar o mouse conforme voce sugeriu.. Basta clicar diretamente no BotVoltar para ver
que o edit perde o foco
E qual a saida ??: Entre outras que aparecer e utilizar a propriedade [b:997a717753]Focused[/b:997a717753] dos controles ...
Mas isto tb não é 100¬ ...Porque existem situações de componentes que [b:997a717753]não recebem o foco [/b:997a717753]e também quando se tem[b:997a717753] tecla de atalho [/b:997a717753]envolvidas..
Para esta ultima situções , voce deve forçar que o componente edit envolvido perca o foco , usando a intrução [b:997a717753]selectNext[/b:997a717753], ou [b:997a717753]atribuindo o foco [/b:997a717753]ao conjunto de instruçoes dos componetes.. Tipo isto
[b:997a717753]BotVolatr.setfocus[/b:997a717753];
Deve-se ainda usar uma [b:997a717753]variavel de controle [/b:997a717753]que impeça que codigos não sejam ser executados nestas situações
[b:997a717753]Colocando em pratica[/b:997a717753]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)