Função para limpar campos Edit do formulario
Ola a todos
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;
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
Curtidas 0
Respostas
Marco Salles
08/08/2009
e o que que tem com a rotina ?????
GOSTEI 0
Acneto
08/08/2009
Olá Marco, na realidade formulei mau a pergunta
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
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
Osocram
08/08/2009
os campos numericos/decimal tem a propriedade DisplayFormat;
Vc pode usar isso.
Vc pode usar isso.
Olá Marco, na realidade formulei mau a pergunta
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
Acneto
08/08/2009
Ótimo,
Como obter esta propriedade não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
Como obter esta propriedade não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
GOSTEI 0
Acneto
08/08/2009
Ótimo,
Como obter esta propriedade??
Não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
Como obter esta propriedade??
Não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
GOSTEI 0
Osocram
08/08/2009
vc tem q fazer um cast.
-----------------------------------
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.
-----------------------------------
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.
Ótimo,
Como obter esta propriedade??
Não estou conseguindo, retona
undeclared identifier ´DisplayFormat´.
Obrigado
Neto
GOSTEI 0
Acneto
08/08/2009
Ótima dica, :lol:
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
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
Marco Salles
08/08/2009
TCustomEdit(Ctrl).Text := (cds.FieldByName(Vle.Cells[ 0 , i ]) as TFMTBCDField).DisplayFormat;
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
Acneto
08/08/2009
Olá Marco, se o size corresponde ao numero de decimais do field
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
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
Marco Salles
08/08/2009
resolve o problema e não tenho que redefinir o displayformat
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
Acneto
08/08/2009
Não compilou, retorna a seguinte mensagem:
Record, objetct or class type required
Record, objetct or class type required
GOSTEI 0
Marco Salles
08/08/2009
Falta parentesis
Escrevi na mão
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
Acneto
08/08/2009
faltou um parenteses..
agora tá legauuuuuuuuu!!
TCustomEdit(Ctrl).Text := ´0´ + decimalseparator + StringOfChar(´0´,cds.FieldByName(Vle.Cells[ 0 , i ]).Size);
Obrigado
Neto
agora tá legauuuuuuuuu!!
TCustomEdit(Ctrl).Text := ´0´ + decimalseparator + StringOfChar(´0´,cds.FieldByName(Vle.Cells[ 0 , i ]).Size);
Obrigado
Neto
GOSTEI 0