| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Mai 10, 2017 11:51 am Assunto: Erro função para validar componente vazio? |
|
|
O que ta errado nesta função que não consigo validar quando os campos estão todos preenchidos? Sempre diz que não estão preenchido.
| Código: | function ValidaCamposVazios(Form: TCustomForm; Tag: Integer): Boolean;
var
i: Integer;
Foco: Boolean;
begin
with Form do
begin
Result := False;
Foco := False;
for i := 0 to ComponentCount - 1 do
begin
// EDIT
if Components[i].ClassType = TEdit then
if (TEdit(Components[i]).Tag = Tag) and
(TEdit(Components[i]).Text = EmptyStr) then
begin
Result := true;
if Foco = False then
Begin
TEdit(Components[i]).SetFocus;
Foco := true;
End;
end;
// COMBO
if Components[i].ClassType = TComboBox then
if (TComboBox(Components[i]).Tag = Tag) and
(TComboBox(Components[i]).Text = EmptyStr) then
begin
Result := true;
if Foco = False then
Begin
TComboBox(Components[i]).SetFocus;
Foco := true;
End;
end;
end;
end;
end; |
Modo do uso
| Código: | if ValidaCamposVazios(Self, 1) then
Preenchido := False; |
Sempre cai no False da variavel, independente se esta ou não preenchido os campos com tag 1 _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Mai 10, 2017 12:02 pm Assunto: |
|
|
a função deve retornar true quando o campo está vazio ou preenchido?
pela função atual, está retornando true quando o campo está vazio
outra coisa que você pode fazer é trocar
por
| Citação: | | Form.ComponentCount |
|
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Mai 10, 2017 12:15 pm Assunto: |
|
|
O nome do seu parâmetro Tag está sendo confundido pelo compilador com a propriedade Tag do form na função ValidaCamposVazios.
Faça um teste alterando o nome do parâmetro da função para pTag:
| Código: | function ValidaCamposVazios(Form: TCustomForm; pTag: Integer): Boolean;
var
i: Integer;
Foco: Boolean;
begin
with Form do
begin
Result := False;
Foco := False;
for i := 0 to ComponentCount - 1 do
begin
// EDIT
if Components[i].ClassType = TEdit then
if (TEdit(Components[i]).Tag = pTag) and
(TEdit(Components[i]).Text = EmptyStr) then
begin
Result := true;
if Foco = False then
Begin
TEdit(Components[i]).SetFocus;
Foco := true;
End;
end;
// COMBO
if Components[i].ClassType = TComboBox then
if (TComboBox(Components[i]).Tag = pTag) and
(TComboBox(Components[i]).Text = EmptyStr) then
begin
Result := true;
if Foco = False then
Begin
TComboBox(Components[i]).SetFocus;
Foco := true;
End;
end;
end;
end;
end; |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Qua Mai 10, 2017 2:22 pm Assunto: |
|
|
Blz pessoal, fiz as mudanças, mais agora ta dando erro de focus mesmo preenchendo todos os campos
Cannot focus disable or invisible windows
Minha função esta assim agora
| Código: | function ValidaCamposVazios(const Form: TCustomForm; pTag: Integer;
out Mensagem: String): Boolean;
var
i: Integer;
Foco: Boolean;
begin
with Form do
begin
Result := False;
Foco := False;
for i := 0 to Pred(ComponentCount) do
begin
// EDIT
if Components[i].ClassType = TEdit then
begin
if (TEdit(Components[i]).Tag = pTag) and
(TEdit(Components[i]).Text = EmptyStr) then
begin
Result := true;
if not Foco then
begin
Mensagem := TEdit(Components[i]).Hint;
TEdit(Components[i]).SetFocus;
Foco := true;
end;
end;
end;
// COMBO
if Components[i].ClassType = TComboBox then
begin
if (TComboBox(Components[i]).Tag = pTag) and
(TComboBox(Components[i]).Text = EmptyStr) then
begin
Result := true;
if not Foco then
begin
Mensagem := TComboBox(Components[i]).Hint;
TComboBox(Components[i]).SetFocus;
Foco := true;
end;
end;
end;
if Result then
Mensagem := String(ShortString(Mensagem));
end;
end;
end; |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
| Voltar ao Topo |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Mai 10, 2017 2:40 pm Assunto: |
|
|
tenta fazer assim
| Código: | if (TComboBox(Components[i]).CanFocus) then
TComboBox(Components[i]).SetFocus; |
isso tanto para o ComboBox quanto para o Edit |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Mai 10, 2017 2:49 pm Assunto: |
|
|
Você está tentando jogar o foco para algum campo que está desabilitado ou invisível.
Acontece também com campos que estão em abas que não estão ativas em PageControl.
Acrescente a validação CanFocus que o leo_cj sugeriu antes de dar o foco ao componente. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
| Voltar ao Topo |
|
 |
souzacruz001 Aprendiz

Registrado: Quarta-Feira, 11 de Junho de 2014 Mensagens: 273
|
Enviada: Qua Mai 10, 2017 4:27 pm Assunto: |
|
|
Se me permite uma sugestão, deixe essa função como recursiva, pois poderá haver casos em que há componentes que são parentes dentro do componente que você passou por parâmetro, por exemplo:
Você passar um TForm por parâmetro, mas dentro deste TForm haver um TGroupBox, TPanel, TRadioGroup, etc. Se isso ocorrer, a sua validação será apenas dentros dos componentes que estão dentro do TForm e ele irá descartar os outros. |
|
| Voltar ao Topo |
|
 |
|