Quizás sea mejor controlar sólo los casos de error, en lugar de intentar validar los casos aceptables:
Código Delphi
[-]
procedure TfrmProductoAdd.EditCveKeyPress(Sender: TObject; var Key: Char);
var l :integer;
begin
l := Length(EditCve.Text);
if (Key<>Char(8)) and (Key<>Char(13) and (l >14)then
Key:=Char(0);
if (Key=Char(13)) then
begin
if (l <12) or (l>14) then ShowMessage('Atención la longitud no está en el rango 12-14, longitud actual:'+ inttostr(l);
Key:=Char(0);
EditDes.SetFocus;
end;
end;
Si tienes un "or l =12"
siempre entrará aunque el usuario quiera añadir más números.
Saludos