Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Truco para mayusculas en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=26171)

Johnny Q 14-10-2005 19:25:41

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.

dec 14-10-2005 21:35:55

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;

roman 14-10-2005 22:21:33

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

dec 15-10-2005 16:53:41

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. :p

roman 15-10-2005 21:01:48

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

dec 15-10-2005 22:15:34

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. ;)

roman 16-10-2005 17:10:14

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


La franja horaria es GMT +2. Ahora son las 17:52:46.

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