KeyPress no DBGrid (Campo Monetário)
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:
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
...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
Curtidas 0
Respostas
Marco Salles
12/08/2011
Mas este campo como esta definido ?? qual o seu tipo ??
GOSTEI 0
José Bonna
12/08/2011
Bom dia, Marco...
então, o campo é um numeric(15,2), no fields do clientdataset defini o diplayformat assim #,##0.00.
então, o campo é um numeric(15,2), no fields do clientdataset defini o diplayformat assim #,##0.00.
GOSTEI 0
José Bonna
12/08/2011
up...
GOSTEI 0
Carlos Bernardo
12/08/2011
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);
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);
GOSTEI 0