MaxLength em campo tipo Float do ClientDataSet

Delphi

11/06/2010

Bom dia Galera, estou com o seguinte problema, tenho ClientDataSet > DataSource > DBGrid.

No meu ClientDataSet possue um campo do tipo float, estou dando manutenção neste campo através do DBGrid.
Este campo deve aceitar no máximo 3 caracteres(MaxLength de 3 (999)).
Existe alguma propriedade no DBGrid ou ClientDataSet para configurar o mesmo?

Obs.: O MaxValue do campo deixa que eu digite quantos caracteres quizer, ele só consiste a quatidade de caracteres na sáida do campo, oque eu quero é que não deixe o usuário digitar mais de 3 caracteres.

Agradeçoo a ajuda!

Abraçooo

Rafael Pimenta

Rafael Pimenta

Curtidas 0

Respostas

Marco Salles

Marco Salles

11/06/2010

Bom dia Galera, estou com o seguinte problema, tenho ClientDataSet > DataSource > DBGrid.

No meu ClientDataSet possue um campo do tipo float, estou dando manutenção neste campo através do DBGrid.
Este campo deve aceitar no máximo 3 caracteres(MaxLength de 3 (999)).
Existe alguma propriedade no DBGrid ou ClientDataSet para configurar o mesmo?

Obs.: O MaxValue do campo deixa que eu digite quantos caracteres quizer, ele só consiste a quatidade de caracteres na sáida do campo, oque eu quero é que não deixe o usuário digitar mais de 3 caracteres.

Agradeçoo a ajuda!

Abraçooo

Rafael , este é o preço que sepaga ao utilizar o RAD do Delphi. Vc tem que jogar as Regras  de quem criou e definiu essas classes digamos assim . Usar DataControls é prático mas se precisamos de algo mais esbarramos com as caracteristicas internas dos controles. Mas a maioria dos problemas existem soluções . Umas menos piores do que as outras ( Digamos assim , pq a solução mais propicia apesar de dar um efeito indesejável é esta mesma que vc esta usando MaxValue ). Porém existe solução utilizando Classes Hack   A Property >  property EditMask foi publicada no Tipo TStringField mas no TFloatField os engenheiros da Borland ( Hj embarcadeiro) não Definiu .. Ficando oculta na Classe Base ( TFloat .. de Onde todas Herdam)   Ora Vamos acessar e definir essa Propriedade   Então ...   No seu Formulário defina Algo aparentemente inutil ( Servira apenas para Visualizar , Enxergar Violando diga-se de passagem o mecanismo de Proteção de Classe e isto opõem a boa tecnica de Programação Orientada a Objeto )  
TMyClassHack = class(TField)
  property EditMask;
end;
  No evento OnShow do Seu Formulario Faça  
procedure TForm3.FormShow(Sender: TObject);
begin
 TMyClassHack(clientDataSet1.FieldByName('SeuCampoSeiLa')).EditMask:='999;0;_'
end;
  Tai , Mecanismo de OO quebrado e problema resolvido...
GOSTEI 0
Marco Salles

Marco Salles

11/06/2010

Eu respondi a duvida á noite e cometi um erro . Um erro não Um ERRÃO A Property >  property EditMask foi publicada no Tipo TStringField mas no TFloatField os engenheiros da Borland ( Hj embarcadeiro) não Definiu .. Ficando oculta na Classe Base ( TFloat .. de Onde todas Herdam)   Mas ai que esta o Erro..   Ela não esta Protegida na Classe Base (TFloat .. de Onde todas Herdam) , mas sim ela esta Definida com a visibilidade Publica , so não esta Publicada na Classe TFloatField   Portanto é so acessar diretamente esta Propriedade ( Não precisa da Classe HACK )   Faça direto  
procedure TForm3.FormShow(Sender: TObject);
begin
clientDataSet1.FieldByName('SeuCampoSeiLa')).EditMask:='999;0;_'
end;
  Simples assim      
GOSTEI 0
Rafael Pimenta

Rafael Pimenta

11/06/2010

Desculpe a demora, respondendo ao Salles, eu acadei de acertar minha tela para utilizar sua sugestão e deu certo como esperado.
Obrigado pela ajuda e fica ae a dica do Salles para os engenheiros da embarcadeiro...
GOSTEI 0
POSTAR