PDA

Ver la Versión Completa : Formato de separador decimal


MaMu
27-06-2007, 20:43:30
Resulta que yo tengo un formulario en donde cargo el importe y cargo la cantidad, y multiplicando ambos obtengo el Subtotal de dicho concepto. Pero me pasa, que limite el TEdit a que solo puedan ingresar numeros reales, para evitar todo margen de error por parte del usuario. Pero tengo un problema, yo cargo este resultado en el campo de una tabla cuyo formato es Currency, y dependiendo el tipo de configuración de cada computadora en donde ejecute el programa, me toma como separador de decimales de la moneda, un punto "." o una coma ",". Lo cual, yo por medio de este procedimiento, restrinjo el TEdit de la siguiente manera:


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var sNumAnterior:string;
begin
sNumAnterior := (sender as TEdit).Text;
if (key <> #3) and (key <> #22) then // #3 = Copiar (Ctrl + C)
begin // #22 = Pegar (Ctrl + V)
if key in ['-','.'] then
begin
if (pos(key,(sender as TEdit).Text) > 0) and
(pos(key,(sender as TEdit).SelText) = 0)
then key:=#0;
case key of
'-': if ((sender as TEdit).SelStart > 0) then key:=#0;
'.': if ((sender as TEdit).SelStart = 0) or
(((sender as TEdit).SelStart = 1) and
((sender as TEdit).Text[1] = '-'))
then key:=#0;
end;
end
else if not (key in ['0'..'9',#8]) then key:=#0;
end;
if key = #22 then
try
key := #0;
(sender as TEdit).PasteFromClipBoard;
StrToFloat((sender as TEdit).Text);
except
(sender as TEdit).Text := sNumAnterior;
(sender as TEdit).SelStart := Length((sender as TEdit).Text);
end;
end;



Pero me pasa que, en una computadora, si utilizo el punto "." me anda bien, pero en otra, tengo que usar la coma ",", ya que sino, no me permite agregar el registro, dependiendo de si en Edit2.Text utilice punto "." o coma "," como separador decimal:


QCaja.Insert;
try
if ComboBox1.Text='EGRESO'
then QCaja.FieldByName('conceptoDEBE').AsString:=ComboBox2.Text
else QCaja.FieldByName('conceptoHABER').AsString:=ComboBox2.Text;
QCaja.FieldByName('movimiento').AsString:=ComboBox1.Text;
QCaja.FieldByName('cantidad').AsInteger:=StrToInt(SpinEdit2.Text);
QCaja.FieldByName('importe').AsCurrency:=StrToCurr(Edit2.Text)*StrToInt(SpinEdit2.Text);
QCaja.FieldByName('fecha').AsDateTime:=DateTimePicker1.DateTime;
QCaja.Post;
except
QCaja.Cancel;
end;


Tengo alguna forma de detectar que separador decimal tengo que usar segun la configuración actual de la computadora en que ejecute la aplicación??

Saludos

jhonny
27-06-2007, 23:14:42
Mira, haz la siguiente prueba...

ShowMessage(DecimalSeparator);

Eso te mostrara el separador decimal de dicha aplicación.

Y si quieres ver el separador de miles, es...
ShowMessage(ThousandSeparator);

Esas dos variables puedes cambiarlas para que trabajen en tu aplicación como tu quieras, asi por ejemplo:


DecimalSeparator := '.';
ThousandSeparator := ',';

Espero te sirva.

jhonny
27-06-2007, 23:26:11
Si me permites "pachotear" en cierta forma tu codigo, al final esta sería una versión funcional, que solo adapta lo anteriormente dicho por mi, pero a tu propio codigo ;):

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var sNumAnterior:string;
begin
sNumAnterior := (sender as TEdit).Text;
if (key <> #3) and (key <> #22) then // #3 = Copiar (Ctrl + C)
begin // #22 = Pegar (Ctrl + V)
if key in ['-',DecimalSeparator] then
begin
if (pos(key,(sender as TEdit).Text) > 0) and
(pos(key,(sender as TEdit).SelText) = 0)
then key:=#0;
if key ='-' then
begin
if ((sender as TEdit).SelStart > 0) then key:=#0;
end
else
begin
if key = DecimalSeparator then
begin
if ((sender as TEdit).SelStart = 0) or
(((sender as TEdit).SelStart = 1) and
((sender as TEdit).Text[1] = '-'))
then key:=#0;
end;
end;
end
else if not (key in ['0'..'9',#8]) then key:=#0;
end;
if key = #22 then
try
key := #0;
(sender as TEdit).PasteFromClipBoard;
StrToFloat((sender as TEdit).Text);
except
(sender as TEdit).Text := sNumAnterior;
(sender as TEdit).SelStart := Length((sender as TEdit).Text);
end;
end;


Espero que esto te ayude.

MaMu
28-06-2007, 03:51:40
SOLUCIONADO

Un fenómeno jhonny y gracias por el "pachoteo", ya adapté todo y funciona de mil maravillas. AHora tengo una pregunta que no tiene nada que ver, pero que componente visual me recomendas para hacer una grafica estadistica de entradas y salidas de una caja (mensual y anual).

Saludos

jhonny
28-06-2007, 14:47:14
SOLUCIONADO

Un fenómeno jhonny y gracias por el "pachoteo", ya adapté todo y funciona de mil maravillas. AHora tengo una pregunta que no tiene nada que ver, pero que componente visual me recomendas para hacer una grafica estadistica de entradas y salidas de una caja (mensual y anual).

Saludos

Seguramente estaremos hablando del TChart o el TDBChart (Según tu necesidad) ;)