Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   OnKeyPress dentro de DBGrid cell (https://www.clubdelphi.com/foros/showthread.php?t=76059)

Gaim2205 06-10-2011 14:34:41

OnKeyPress dentro de DBGrid cell
 
Buen día amigos,

despues de mucho tiempo alejado del mundillo delphi, vuelvo a empezar. Y esperando siempre el buen consejo de los expertos del foro tengo una pequena duda.

Como hago para que una celda de un dbgrid acepte solo numeros? algo parecidoa como si lo hiciera en un Edit
Código:

if not (Key in ['0'..'9']) then      Key := #0;
saludos!

beginner01 06-10-2011 15:38:57

Cita:

Empezado por Gaim2205 (Mensaje 414741)
Buen día amigos,

despues de mucho tiempo alejado del mundillo delphi, vuelvo a empezar. Y esperando siempre el buen consejo de los expertos del foro tengo una pequena duda.

Como hago para que una celda de un dbgrid acepte solo numeros? algo parecidoa como si lo hiciera en un Edit
Código:

if not (Key in ['0'..'9']) then      Key := #0;
saludos!

Saludos.

Si te refieres a una columna en especifico puedes probar con esto.

Código Delphi [-]
 if (not (key in ['0'..'9'])) and ((sender as TDBGrid).Col = 4)  then
 key := #0;

Cambia col = 4 por la columna a la que deseas aplicar.

Para que sea una celda en especifico se le debe agregar una condición mas.

Código Delphi [-]
 and ((sender as TDBGrid).Row = 1)

Gaim2205 06-10-2011 16:28:31

Gracias por la respuesta, aunque debo especificar un poco mas, hay algo que no sabia y es que donde estoy trabajando ahora tengo que usar unos componentes propios, su reemplazo de DBGrid no tiene la propiedad Col, por tanto no puedo usarla. Hay alguna forma alternativa? tal vez los mas expertos sabran como modificar el comportamiento del componente para agregar esa funcionalidad?

Si a alguien le interesa la programacion de componentes, tengo el codigo fuente, asi que podriamos agregar esa funcionalidad juntos.

José Luis Garcí 06-10-2011 17:14:48

Si no recuerdo mal puedes usar
Código Delphi [-]
TStrinGrid(Dbgrid1).Col=4

ecfisa 06-10-2011 18:41:10

Hola.

Con un TDBGrid otra posibilidad es:
Código Delphi [-]
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if (TDBGrid(Sender).SelectedField.FieldName = 'Nombre_del_Campo') and
     not(Key in [#8,#9,#13,'0'..'9']) then
  begin
    MessageBeep(MB_ICONERROR);
    Key:=#0;
  end;
end;

Saludos.

ecfisa 07-10-2011 14:52:05

Hola Gaim2205.

Cita:

Como hago para que una celda de un dbgrid acepte solo numeros?
Leyendo bién tu primer post (cosa que parece que no hice antes), veo que entendí cualquier cosa :o. El código anterior verifica columna no celda.

Probá de esta forma:
Código Delphi [-]

type
  TDBGridEx = class(TDBGrid);

procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  with TDBGridEx((Sender as TDBGrid)) do
    if(Col = ACol) and (Row= ARow) and not(Key in [#8,#9,#13,'0'..'9']) then
    begin
      MessageBeep(MB_ICONERROR);
      Key:= #0;
    end;
end;
...
ACol y ARow son variables de tipo Integer que almacenan columna y fila de la celda que sólo deberá aceptar números.

Un saludo.


La franja horaria es GMT +2. Ahora son las 14:50:34.

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