Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-10-2005
Johnny Q Johnny Q is offline
Miembro
 
Registrado: may 2005
Ubicación: Colombia
Posts: 172
Poder: 19
Johnny Q Va por buen camino
Lightbulb Truco para mayusculas en DBGrid

Un saludo a todos.

Como es bien sabido por todos el componente DBGrid no tiene una propiedad que transforme el texto ingresado a mayusculas. Pues bien, aunque depronto para muchos no sea algo novedoso, encontre en Internet un código que aplica para un TMemo pero que se puede adaptar para un DBGrid. El codigo original para el TMemo esta en:
www.hispanam.com/delphi/trucos/truco3.htm
y tiene el titulo de Truco 55 - Que el texto de un TMemo se escriba siempre en mayúsculas.

Para el DBGrid se puede tomar un fragmento del código e implementarlo en el evento OnKeyPress asi:

Código:
 procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
 begin
  if Key in ['a'..'z'] then
 	Key := UpCase(Key);
 end;
Espero que pueda ser de utilidad para alguien.
Responder Con Cita
  #2  
Antiguo 14-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo siguiente parece funcionar también en caso de que se escriba una "ñ", por ejemplo:

Código Delphi [-]
 var
   P: PChar;
 begin
   P := AnsiUpper(@Key);
   if Key in ['a'..'z'] then
     Key := Char(P);
 end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 14-10-2005
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
Hay algo que no me cuadra.

Si la condición es

Código Delphi [-]
if Key in ['a'..'z'] then

no se detectarán las ñ ni vocales acentuadas. Creo que sería mejor así:

Código Delphi [-]
// confiemos en que el orden de ascii nunca cambiará
if Key in ['a'..'z', 'ü', 'é', 'í'..'ñ'] then

Otra opción para lograr las mayúculas sería así:

Código Delphi [-]
type
  THackEdit = class(Grids.TInPlaceEdit);

  (*
    debe ir antes de la declaración del formulario o data module
    donde se coloque el DBGrid
  *)
  TDBGrid = class(DBGrids.TDBGrid)
  protected
    function  CreateEditor: TInplaceEdit; override;
  end;

  TForm1 = class(TForm)
    ...
  end;

implementation

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

// Saludos
Responder Con Cita
  #4  
Antiguo 15-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por roman
Si la condición es

Código Delphi [-]
  if Key in ['a'..'z'] then
no se detectarán las ñ ni vocales acentuadas.
No lo probé en un "DbGrid", pero en un "Memo", y sí que se detectan (y se cambian a mayúsculas) tanto las eñes como las vocales acentuadas.

Otra cosa es que la solución que propones arriba sea más curiosa, elegante, práctica, efectiva, en fin, eso no seré yo quien lo ponga en duda.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 15-10-2005 a las 16:55:27. Razón: Corrección del texto.
Responder Con Cita
  #5  
Antiguo 15-10-2005
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
Cita:
Empezado por dec
No lo probé en un "DbGrid", pero en un "Memo", y sí que se detectan (y se cambian a mayúsculas) tanto las eñes como las vocales acentuadas.
Tienes razón, lo que sucede es que me quedé con la idea del primer código expuesto y de ahí mi confusión al ver que la condición no abarcaba otros caracteres.

En tu código conviertes a mayúsculas antes de la condición. Lo que ahora me confunde es, ¿para qué entonces se usa el condicional? Al probarlo, veo que sin él se escriben caracteres raros. Pero al parecer entonces basta con:

Código Delphi [-]
Key := Char(CharUpper(PChar(Key)));

// Saludos
Responder Con Cita
  #6  
Antiguo 15-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por roman
(...) al parecer entonces basta con:

Código Delphi [-]
 Key := Char(CharUpper(PChar(Key)));
Bueno. En principio, por querer solucionar lo de las eñes y eso, traté de utilizar la función "AnsiUpperCase", pero esta no funcionaba, pues se está tratando con "Char" y no con "string". El código de más arriba fue la solución que supe encontrar. Sin embargo, veo que otra posibilidad es la que propones, la cual funciona estupendamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 16-10-2005
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
La verdad es que yo no conocía la función AnsiUpper pues la buscaba en la ayuda y no la encontraba porque no es de Delphi sino de Windows. Al ver que la usabas fue ya que la busqué en el SDK y ahí la documentación lleva a CharUpper.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 11:19:54.


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