Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Retroceder Celdas en DbGrid

Estoy usando un dbGrid, el problema que tengo es que al salir de una celda, cuando el valor de dicha celda es incorrecto y quiero que el enfoque se devuelva a esta misma celda en vez de que pase a la siguiente, no me obedece el dbGrid ó bien no se con cual otra instrucción se podrá hacer para mandar un enfoque por celdas, lo hago en el evento "OnColExit" con esta instrucción:

gridFac.SelectedIndex:=<Numero de Celda>;
Gracias...!!!!

Última edición por AGAG4 fecha: 09-09-2004 a las 01:28:12. Razón: Corrección
Responder Con Cita
  #2  
Antiguo 08-09-2004
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
Puedes más bien usar el evento OnValidate del campo. Si en dicho evento usas abort o lanzas una excepción el foco no se moverá de celda.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Post oki

Muchas Gracias Sr. Roman.... Me funciono. le debo otra
Responder Con Cita
  #4  
Antiguo 09-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Post ????

Sr. Roman, ahora tengo este problema, quiero convertir el campo "Clave" a mayusculas y al quererlo hacer en el evento OnValidate me marca Error de desbordamiento de pila, hace llamadas recursivas si asigno valores al mismo campo en ese evento, por lo que no encuentro en donde hacer esa conversión, que me sugiere que haga????
Responder Con Cita
  #5  
Antiguo 09-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Para validaciones, comprobaciones y demás, yo te aconsejo usar el evento BeforePost del Dataset

Edito:
Eso sí, hasta que no se valida el registro, no se hacen comprovaciones, por lo que a lo mejor no te sirve la idea para lo que tu querías
Responder Con Cita
  #6  
Antiguo 09-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
????

Gracias por su respuesta, pero no es a lo que me refiero, lo que pasa es que en las celdas del DbGrid ó bien en las propiedades del Campo de un dataset, no tienen alguna propiedad para convertir de minusculas a mayusculas conforme se este escribiendo algo ó bien cuando se termine de escribir, quiero encontrar en don de puedo hacer eso para que antes de que la aplicación mande activar el evento OnValidate del campo ya vaya con el Dato en MAYUSCULAS, me explico????, de antemano Gracias.....
Responder Con Cita
  #7  
Antiguo 09-09-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
Sí, te explicas, pero sigo pensando que puedes usar el BeforePost e, incluso, el OnValidate de la siguiente manera:

Sabemos que cada vez que se produce un cambio en el contenido del Field, se dispara ese evento, no? Pues bien, hacemos que sólo se nos dispare 1 vez

Código Delphi [-]
procedure TForm1.FieldValidate(Sender: TField);
begin
  if Sender.AsString <> UpperCase(Sender.AsString) then
    Sender.AsString := UpperCase(Sender.AsString);
end;

Con esto, la primera vez que entre se hará el UpperCase del contenido del campo, lo que hará disparar de nuevo el evento. Pero la segunda vez que entra, al ser el contenido igual, ya no se modificará su contenido por lo que no volverá a disparar el evento y se desharán las llamadas recursivas creadas


Espero te sirva
Responder Con Cita
  #8  
Antiguo 09-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Creo que el evento adecuado para este tipo de manipulaciones es OnSetText del TField.

El OnValidate es adecuado para hacer validaciones, de manera que pueda producirse un error si el valor no es adecuado, pero no para hacer una Re-asignación del field.

Saludos.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 09-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
???

También servirá cuando surja un Error ó cuando quiera que no cambie de celdas el dbGrid ????
Como por ejemplo cuando el Articulo no exista, hacer que no avance de celda, así como se hace en el OnValidate al mandar un "Abort", será la misma instrucción para el evento que usted me dice????
Responder Con Cita
  #10  
Antiguo 09-09-2004
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
De acuerdo con jachguate. El evento más adecuado es OnSetText que está precisamente para eso, para hacer conversiones del dato que se guardará en la tabla.

Claro que lo ideal es que el DBGrid tuviera la propiedad CharCase al igual que los Edits de manera que el texto aparezca en mayúsculas al momento de irlo escribiendo.

Pero podemos lograrlo con un par de trucos sucios:

Código Delphi [-]
interface

type
  (* Declarar esto antes de la declaración del formulario *)
  TDBGrid = class(DBGrids.TDBGrid)
  protected
    function CreateEditor: TInplaceEdit; override;
  end;

  TForm1 = class(TForm)
    ...
  end;

  THackEdit = class(TCustomEdit);

implementation

function TDBGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  THackEdit(Result).CharCase := ecUpperCase;
end;

// Saludos

Última edición por roman fecha: 15-06-2005 a las 19:00:17.
Responder Con Cita
  #11  
Antiguo 09-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola Agag.

Claro que el OnSetText no te servira para esto. Pero.... estas mezclando la lógica. Un asunto es mantener todo en mayúsculas, y otro muy diferente validar que un artículo (o cualquier otro dato relacionado) dado exista en la base de datos.

Para ello si has de valerte del OnValidate.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 10-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
okii

Muchas Gracias a los dos por sus respuestas.... Lo voy a probar.

Última edición por AGAG4 fecha: 10-09-2004 a las 16:50:42. Razón: Corrección
Responder Con Cita
  #13  
Antiguo 10-09-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
oki

Gracias Sr. Roman, Sr. Cadeti, me funcionaron sus "trucos", y Gracias Sr. Jachguate por sus comentarios del OnValidate.... Les debo otra.

Última edición por AGAG4 fecha: 10-09-2004 a las 16:59:48.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


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


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