Hola de nuevo, te explico como lo hice yo, me llevo mucho tiempo y puede que sea la mejor solución pero a mí me funciona perfectamente. Para empezar puse un Edit y en el Keypress puse los carácteres que se podrían introducir en el Edit, y si no son estos que se introduzca el #0 es decir el carácter null(nada). Hice una función que se llama Activacomas, para activar las comas o desactivarlas (no se pueden escribir dos comas dentro del mismo Edit, ni en el primer carácter).
Código:
procedure TfrmCanvi.edPagatKeyPress(Sender: TObject; var Key: Char);
var a: integer;
Begin
If Activacomes=False then
If Not (Key IN ['0'..'9',#8]) then
key :=#0 ;
If Activacomes=True then
Begin
If Not (Key IN ['0'..'9',#8,',']) then
key := #0;
If (Key=',') and (edPagat.Text='') then
If Not (Key IN ['0'..'9',#8]) then
key :=#0 ;
end;
end;
La función activacomes es la siguiente:
Código:
function TfrmCanvi.Activacomes: Boolean;
var
I, cont: Integer;
car, copia: String;
begin
cont:=0;
copia:=edPagat.Text;
For i:=1 to Length(copia) do
Begin
car:=copy(copia,i,1);
if car=',' then
cont:=cont+1;
end;
If Length(EdPagat.Text)>=5 then
cont:=1;
if cont>0 then
result:=False
else
result:=True;
end;
Claro ahora tu complicación está además en el tema del punto, pero supongo que lo podrás hacer igual que la coma. Bueno ya lo probarás y me dirás si te sirvió y si no ya inventaremos otra cosa.

¡Suerte!.
Un saludo: Alfredo.