Fórum KeyPress no DBGrid (Campo Monetário) #406483

12/08/2011

0

Boa tarde,

  ...seguinte pessoAll, to com uma questão aqui q ta quebrando, num form tenho um dbedit que vai ser preenchido com valores monetarios, então no evento onkeypress no dbedit coloquei este codigo:
  if not (Key in ['0'..'9',',',#0,#8,#13]) then
  begin
    Key := #0;
    Exit;
  end else
  begin
    if (Pos(',',TDBEdit(Sender).Text) > 0) and (Key = ',') then
    begin
      Key := #0;
      Exit;
    end;
  end;

  Bom até ai blz, mas em outro form vou manipular os registros em um dbgrid e tenho o mesmo campo monetário, tentei adaptar o codigo acima mas não funciona, parece que o q vc digita no dbgrid não vai direto para o field só depois q vc sai do campo.
  Tentei pesquisar na net e aqui no forum tbm, tentei alguns código mas não consegui implementar isso.
  Bom galera da uma força ai...
  Vlws
 


José Bonna

José Bonna

Responder

Posts

13/08/2011

Marco Salles

Mas este campo como esta definido ?? qual o seu tipo ??
Responder

Gostei + 0

15/08/2011

José Bonna

Bom dia, Marco...
então, o campo é um numeric(15,2), no fields do clientdataset defini o diplayformat assim #,##0.00.

Responder

Gostei + 0

08/09/2011

José Bonna

up...
Responder

Gostei + 0

16/09/2011

Carlos Bernardo

Seria isso? Digitar apenas valores floats, sem deixar repetir ',' no dbGrid
Declarar as units Dbgrid, Grids

Código:
procedure DigitaCurrencyGrid(Sender: TObject; var Key: Char);
var
  lib: boolean;
  Grid : TDbGrid;
  Texto : String;
begin
  Grid := Sender as TDbGrid;
  lib:= true;
  if (not(key in['0'..'9', #8])or (key in ['.']) or (key in [',']))then
    begin
      If key = '.' then
         key:=',';
      if (key = ',')  then
       with Grid.Controls[0] as TInPlaceEdit do
        begin
           Texto := Text;
           if (Pos(',',Texto )>0)  then
              lib := false
            else
              lib := true;
        end;
    end;
  if (not lib) or (key in ['-']) or (key in ['e','E']) then
  begin
    MessageBeep(0);
    key := #0;
  end;
end;


modo de uso no evento keypress do dbgrid:
digitacurrencyGrid(sender,Key);
desta maneira nenhuma das celulas poderá digitar valores diferentes de
valores numericos.

agora se for apenas uma celula q ira usar essa procedure entao no
keypress do dbgrid digite:
Código:
  If (TDbGrid(sender).SelectedField.FieldName ='MEUCAMPO') then
      digitacurrencyGrid(sender,Key);
Responder

Gostei + 0

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

Aceitar