Array
(
)

Diferente de SetFocus

Silvio
   - 11 set 2004

Bom pessoal eu tenho uma Função Global que tem a finalidade de veirificar se o campo foi preenchido ou não. só que para funcionar perfeitamente no final quando ela me retorna a Mensagem ´Preencha este Campo´ então o cursor passa para o campo seguinte, o que não poderia fazer para que funione qual comando devo utilizar para que o cursor fique no campo até que seja preenchido. se eu utilizar o Comando o Nomecampo.setfocus; ai não funcionaria minha função global

Desde já agradeço a todos
:wink:


Fórum Vini
   - 11 set 2004

Olá,
eu não entendi bem o seu problema, mas se for para usar o SetFocus em uma função global, pode usar esse código:
#Código

(Screen.ActiveForm.FindComponent(´NomeCampo´) as TWinControl).SetFocus;


Espero ter ajudado,
Vinicius;


Silvio
   - 11 set 2004

Bom Vinicius é quase isso eu vou colocar a função aqui, ela e pequena:

Function CampoObrigatorio(Campo: String) : String;
begin
If Campo = ´´ Then
Begin
Messagedlg(´Atenção!!! Campo de Preenchimento Obrigatorio´, terror, [mbok],0);
<AQUI Q TÁ O X DA QUESTÃO>?
end;

end;

em todos os Campos do Meu Formulario no evento onexit eu chamo a função
....
CampoObrigatorio(RazaoSocial.Text) ou
CampoObrigatorio(CNPJ.Text)......
se caso a condição for verdadeira ele aparece a mensagem e deve ficar com o cursor no Campo e não mudar para o seguinte.

Valeu Novamente


Fórum Vini
   - 11 set 2004

Agora entendi, você pode fazer assim:
#Código

Function CampoObrigatorio(Campo: TEdit) : Boolean;
begin
Result:= True;
If Campo.Text = ´´ Then
begin
Messagedlg(´Atenção!!! Campo de Preenchimento Obrigatorio´, terror, [mbok],0);
Campo.SetFocus;
Result:= False;
end;
end;

E usá-la assim:
#Código
CampoObrigatorio(RazaoSocial)

Lembrando que a função retorna um Booleano, caso você precise de saber se o campo está válido ou não.

Espero ter ajudado,
Vinicius;


Sandra
   - 11 set 2004

Silvio,

Uma outra idéia. :idea:
Reformule o código da sua função para:
#Código

Function CampoObrigatorio(Campo: String) : String; 
var
Ctrl: TWinControl;
begin
If Campo = ´´ Then
Begin
Messagedlg(´Atenção!!! Campo de Preenchimento Obrigatorio´, terror, [mbok],0);
Ctrl := ActiveControl;
ActiveControl := nil;
PostMessage(TWinControl(Ctrl).Handle, WM_SETFOCUS, 0, 0);
TWinControl(Ctrl).SetFocus;
end;
end;

Explicando:
1-Criar uma variável para guardar o último componente que tinha o foco;
2-Faça com que sua aplicação não reconheça qual componente estará com o foco;
3-Depois, recuperar onde o foco se encontrava.

Para ver o artigo completo, procure por Cuidados ao usar o OnExit (Parte I) e Cuidados ao usar o OnExit (Parte II) na seção de Dicas do [url=http://www.elivaldo.com.br]Sebastião Elivaldo Ribeiro[/url].


Boa sorte! :wink:


Nerdex
   - 06 mai 2005

Olá Sandra e todo mundo... Olha nas minhas aplicações sempre efetuava as verificações no mometo que o usuário vai postar... mas nos casos de valores de CPF, CNPJ, Insc. Estadual e E-Mail achei interessante esta metodologia por vc demonstrada... mesmo pq realizo testes de validação à estes Edits.

Minha dúvida é o seguinte: tenho um botão com a finalidade de cancelar a inserção ou edição no cadastro, sendo assim como poderei ´desativar´ o reconhecimento ao evento OnExit caso o usuário não queira mais realizar o cadastro... e campos em branco, naturalmente, ficaram existindo. Sabe-se que se eu for clicar em algum botão ou outro objeto, o evento OnExit será desnecessariamete gerado neste caso... pelo Edit ´

Eu tentei cancelar o foco... mas não tem lógica alguma, pois o OnExit do Edit é executado antes do OnClick do botão Cancelar...

#Código

procedure TForm1.ButCancelaClick(Sender: TObject);
begin
ActiveControl := nil;
QryBanco.Cancel;
...
end;


Enfim... como vc providenciou um cancelamento de cadastro embasado nesta metodologia da dica do Elivaldo?


Andremuller
   - 06 mai 2005

No on exit antes de fazer a verificação do preenchimento faz o seguinte teste

#Código

if not ButtonCancel.Focuse then (...)



então quando o usuário estiver saindo do edit para cancelar o registro ele não vai verificar o preenchimento


Nerdex
   - 06 mai 2005


Citação:
No on exit antes de fazer a verificação do preenchimento faz o seguinte teste

#Código

if not ButtonCancel.Focuse then (...)


então quando o usuário estiver saindo do edit para cancelar o registro ele não vai verificar o preenchimento

Valeu André... ficou perfeito: só corrigindo (.Focused)