Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Y ¿por qué manejas dos componentes TrDBEdit e el mismo procedimiento? ¿Cuál es la relación entre Edit y Sender?

Es que, de verdad, no se entiende lo que quieres hacer. Hablas de validar la entrada en un Edit pero en el procedimiento con el que quieres hacer la validación se involucra otro Edit.

Trata de ser más explícito y detallado.

LineComment Saludos
No es que maneje otro edit, es que trato de enviar el TRDBEdit donde se entra el texto como parametro al procedure y asi quede general para todos los componentes TRDBEdit.
Responder Con Cita
  #2  
Antiguo 09-05-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Entonces, tu procedimiento debe tener sólo dos parámetros:

Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char; Edit:TrDBEdit);
begin
...
end;

y lo invocas pasando el Sender AS TrDBEdit:

Código Delphi [-]
procedure TFormulario.DBPorcentajeKeyPress(Sender: TObject; var Key: Char);
begin
  ValidarPorcentajeKeyPressEdit(Key, Sender as TrDBEdit);
end;

y modifica tu procedimiento acordemente.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Entonces, tu procedimiento debe tener sólo dos parámetros:

Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char; Edit:TrDBEdit);
begin
...
end;

y lo invocas pasando el Sender AS TrDBEdit:

Código Delphi [-]
procedure TFormulario.DBPorcentajeKeyPress(Sender: TObject; var Key: Char);
begin
  ValidarPorcentajeKeyPressEdit(Key, Sender as TrDBEdit);
end;

y modifica tu procedimiento acordemente.

LineComment Saludos
Lo aplique de esa manera, modifique el procedimiento y aun asi sigue sin realizar el cambio de punto a coma.
Responder Con Cita
  #4  
Antiguo 09-05-2017
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pon el código final del procedimiento.

LineComment Saludos
Responder Con Cita
  #5  
Antiguo 09-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Pon el código final del procedimiento.

LineComment Saludos
Aqui está.

Código Delphi [-]
procedure ValidarPorcentajeKeyPressEdit(Caracter: Char;Edit:TrDBEdit);
var
  pos: Cardinal;
begin
  i:=0;
  if ( StrScan('0123456789.,'+chr(7)+chr(8)+#13, Caracter) = nil ) then  Caracter := #0;
  // cambia el punto decimal por coma
  if (Caracter = '.') or (Caracter = ',') then Caracter := ',';
  //controlar entrada una sola coma
  for i := 1 to length(Edit.Text) do
    if ( copy((Edit.Text), i , 1) = ',' ) and not ( StrScan(',', Caracter) = nil ) then  Caracter := #0;

  with Edit as TrDBEdit do
  begin
    pos := System.Pos(',', Text);
    if not LongBool(Pos) then Dec(Pos);
      ReadOnly := not (Caracter in ['0'..'9',#13, ',', #8]) or
        (Pos <> $FFFFFFFF) and (Caracter = ',') or
        ((Caracter <> #8) and (Caracter <> #13) and (Pos < (SelStart - 1)));
  end;
end;

//EJECUCIÓN DESDE EL KEYPRESS DEL COMPONENTE TRDBEDIT
procedure TForm.DBPorcentajeKeyPress(Sender: TObject; var Key: Char);
begin
  ValidarPorcentajeKeyPressEdit(Key,Sender AS TrDBEdit);
end;
Responder Con Cita
  #6  
Antiguo 10-05-2017
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola Soa Pelaez,

Sólo quieres controlar si al pulsar un (.) se cambie por una (,) y delimitar el número de decimales que puedes introducir, pues yo utilizo esto.

Código Delphi [-]
procedure ValidOnKeyPress(var Key: Char; MaxDecimals: Integer; Text: String);

  const
    WVK_POINT       = '.';
    WVK_COMMA       = ',';
    WVK_NULL        = #0;
    WVK_BACKDELETE  = #8;


  function CountDecimals: Byte;
  var
    nPos: Integer;
  begin
    Result := 0;
    nPos := Pos(',', Text);
    if (nPos <> 0) or (nPos <> Length(Text)) then
      Result := (Length(Text) - nPos);
  end;

begin
  if (Key = WVK_POINT) then
    Key := WVK_COMMA;

  if not (Key in ['0'..'9', WVK_BACKDELETE, WVK_COMMA]) then
    Key := WVK_NULL;

  if (Key = WVK_COMMA) and (Pos(WVK_COMMA, Text) > 0) then
    Key := WVK_NULL;

  if (CountDecimals = MaxDecimals) and (not (Key = WVK_BACKDELETE)) then
    Key := WVK_NULL;
end;
Y la llamada lo hacemos asi.
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  ValidOnKeyPress(Key, 2, Edit1.Text);
end;
O
Código Delphi [-]
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  ValidOnKeyPress(Key, 2, DBEdit1.Text);
end;
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #7  
Antiguo 10-05-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Hola Soa Pelaez,

Sólo quieres controlar si al pulsar un (.) se cambie por una (,) y delimitar el número de decimales que puedes introducir, pues yo utilizo esto.

Código Delphi [-]
procedure ValidOnKeyPress(var Key: Char; MaxDecimals: Integer; Text: String);

  const
    WVK_POINT       = '.';
    WVK_COMMA       = ',';
    WVK_NULL        = #0;
    WVK_BACKDELETE  = #8;


  function CountDecimals: Byte;
  var
    nPos: Integer;
  begin
    Result := 0;
    nPos := Pos(',', Text);
    if (nPos <> 0) or (nPos <> Length(Text)) then
      Result := (Length(Text) - nPos);
  end;

begin
  if (Key = WVK_POINT) then
    Key := WVK_COMMA;

  if not (Key in ['0'..'9', WVK_BACKDELETE, WVK_COMMA]) then
    Key := WVK_NULL;

  if (Key = WVK_COMMA) and (Pos(WVK_COMMA, Text) > 0) then
    Key := WVK_NULL;

  if (CountDecimals = MaxDecimals) and (not (Key = WVK_BACKDELETE)) then
    Key := WVK_NULL;
end;
Y la llamada lo hacemos asi.
Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  ValidOnKeyPress(Key, 2, Edit1.Text);
end;
O
Código Delphi [-]
procedure TForm1.DBEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  ValidOnKeyPress(Key, 2, DBEdit1.Text);
end;
Un saludo.
Primero muchas gracias por tu aporte.
Pero sigue con la misma falla que tiene mi código porque lo ensaye y al compilarlo e ingresar un punto en el edit no me lo modifica por la coma y a su vez con tu código si escribo muchas comas lo deja hacer.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Uso del keypress en un edit snake25237 OOP 1 23-02-2011 15:30:43
evento keypress ronson Varios 40 04-01-2011 04:18:23
validar decimales con "coma" lucasarts_18 PHP 3 26-12-2008 01:41:50
teclas F# en keypress sargento elias OOP 3 08-10-2008 08:23:43
Llamar a evento Keypress edgusano .NET 1 30-11-2005 22:02:29


La franja horaria es GMT +2. Ahora son las 22:58:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi