Fórum Função para limpar campos Edit do formulario #373286
08/08/2009
0
Uso delphi 7 + dbexpress + firebird 1.5
No formulario uso componentes Edit.
Tenho uma rotina para limpar os campos do formulario e outra para escrever os dados nos Edit´s.
Gostaria que as rotina verificassem o tipo de dado que será escrito nos Edit´s, para isso testo da forma abaixo:
[color=red:342a6f6926]case FieldByName(Vle.Cells[ 0 , i ]).DataType of[/color:342a6f6926]
mas só identifico os campos do tipo inteiro e string.
Eu gostaria de obter o numero de decimais previsto para o campo e limpar o camponente escrevendo a quantidade de zeros prevista para o campo/componente.
veja a rotina abaixo:
procedure LimparCampo(formulario: Tform;Vle:TValueListEditor;
Cds: TClientDataSet);
var
i, idx : integer;
Ctrl : TObject;
s : string;
begin
try
with cds do
for i := 0 To formulario.ComponentCount-1 do
begin
Ctrl := RetornarComponente(formulario,Vle.Cells[ 1 , i ]);
if Ctrl Is TEdit Then
begin
case FieldByName(Vle.Cells[ 0 , i ]).DataType of
ftString:
TCustomEdit(Ctrl).Text := ´´;
ftInteger:
TCustomEdit(Ctrl).Text := ´0´;
ftFloat:
TCustomEdit(Ctrl).Text := ´0,00´;
ftCurrency:
TCustomEdit(Ctrl).Text := ´0,00´;
ftDate:
begin
if formulario.components[i] is TCustomEdit then
TCustomEdit(formulario.Components[i]).Clear
end;
ftDateTime:
begin
if formulario.components[i] is TCustomEdit then
TCustomEdit(formulario.Components[i]).Clear
end;
end;
end
end;
except
on e:exception do
begin
TErros.GetMensagem(E);
end;
end;
end;
Acneto
Curtir tópico
+ 0Posts
09/08/2009
Marco Salles
Gostei + 0
10/08/2009
Acneto
Gostaria de obter o tipo do field e o numero de casa decimais de um campo da tabela no clientdataset, para com esta informação eu inicializar o campo (componente Edit) com a mascara certa.
Exemplo:
Integer inicializo com 0
Numerico/Decimail inicializo com o numero de casas decimais corretas
se o campo tem 4 decimais inicializo com 4 se 2 decimais com duas, etc..
Abraço
Neto
Gostei + 0
10/08/2009
Osocram
Vc pode usar isso.
Gostei + 0
10/08/2009
Acneto
Como obter esta propriedade não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
Gostei + 0
10/08/2009
Acneto
Como obter esta propriedade??
Não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
Gostei + 0
10/08/2009
Osocram
-----------------------------------
Explicando na teoria:
o dataSet vai ter Collection de TFields;
Os TFields tem apenas as propries que é generico para todos os Fields.
A propriedade que vc quer acessar DisplayFormat se vc perceber não aparece no Object Inspector se vc selecionar um Field do tipo string;
Isso quer dizer.. ele so existe nos capos numericos...
------------------------------------
Primeiramente veja qual é o tipo dos fields numerico que vc usa...
TFmdbcdFields, TFloatFields.... e assim vai
dae vc faz um cast TFloatFields(SeuCampo).DisplayFormat;
Ou procure uma classe base de todos os campos numericos, que eu acredito que exista um.
Gostei + 0
10/08/2009
Acneto
dei uma pesquisada a mais e ficou como abaixo:
case FieldByName(Vle.Cells[ 0 , i ]).DataType of
ftString:
TCustomEdit(Ctrl).Text := ´´;
ftFMTBcd:
TCustomEdit(Ctrl).Text := (cds.FieldByName(Vle.Cells[ 0 , i ]) as TFMTBCDField).DisplayFormat;
ftInteger:
TCustomEdit(Ctrl).Text := ´0´;
end;
Muito obrigado a todos
Neto
Gostei + 0
10/08/2009
Marco Salles
hummmmmmm
Vc esta definidindo algo para o DisplayFormat do tfield ?????
O que por exemplo ????
Tenho lá minhas dúvidas ????
Uma mudança no Field do Projeto , vc tem que modificar o seu DisplayFormat ????
Pq não o Size ????
Gostei + 0
10/08/2009
Acneto
resolve o problema e não tenho que redefinir o displayformat
como ficaria a instrução que atualmente está como abaixo.
[color=red:7e53e0da8a]TCustomEdit(Ctrl).Text := (cds.FieldByName(Vle.Cells[ 0 , i ]) as TFMTBCDField).DisplayFormat; [/color:7e53e0da8a]
Obrigado
Neto
Gostei + 0
10/08/2009
Marco Salles
hummmmmm
case FieldByName(Vle.Cells[ 0 , i ]).DataType of ftString: TCustomEdit(Ctrl).Text := ´´; ftFMTBcd: TCustomEdit(Ctrl).Text :=´0´+decimalseparator+StringOfChar(´0´,cds.FieldByName(Vle.Cells[ 0 , i ].Size); ftInteger: TCustomEdit(Ctrl).Text := ´0´; end;
Gostei + 0
10/08/2009
Acneto
Record, objetct or class type required
Gostei + 0
10/08/2009
Marco Salles
Escrevi na mão
case FieldByName(Vle.Cells[ 0 , i ]).DataType of ftString: TCustomEdit(Ctrl).Text := ´´; ftFMTBcd: TCustomEdit(Ctrl).Text :=´0´+decimalseparator+StringOfChar(´0´,cds.FieldByName(Vle.Cells[ 0 , i ].Size)); ftInteger: TCustomEdit(Ctrl).Text := ´0´; end;
Gostei + 0
10/08/2009
Acneto
agora tá legauuuuuuuuu!!
TCustomEdit(Ctrl).Text := ´0´ + decimalseparator + StringOfChar(´0´,cds.FieldByName(Vle.Cells[ 0 , i ]).Size);
Obrigado
Neto
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)