Fórum MaxLength em campo tipo Float do ClientDataSet #379317

11/06/2010

0

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

Responder

Posts

11/06/2010

Marco Salles

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...
Responder

Gostei + 0

12/06/2010

Marco Salles

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      
Responder

Gostei + 0

05/07/2010

Rafael Pimenta

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...
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar