Foros Club Delphi

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

Jose Roman 11-09-2014 00:25:44

UpperCase en DBGrid
 
Cordial saludo,

Resulta que necesito que un bsSkinDBGrid (componente de Business Skin Form adquirido hace mas de dos años) me muestre en mayusculas los campos, roman realizo eso pero he tratado de implementarlo para este componente, no se que estare realizando mal, asi que les transmito el codigo fuente y espero alguien me corrija ya que no realiza absolutamente nada.

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, bsSkinCtrls, bsSkinGrids, bsDBGrids,Vcl.Grids,Vcl.StdCtrls,
  Data.DB, FIBDatabase, pFIBDatabase, FIBDataSet, pFIBDataSet;

type
  TDBGrid = class(bsDBGrids.TbsSkinDBGrid)
  protected
    function CreateEditor: TbsSkinInplaceEdit; override;
  end;

  TForm1 = class(TForm)
    bsSkinDBGrid1: TbsSkinDBGrid;
    tbKardex: TpFIBDataSet;
    Database: TpFIBDatabase;
    Transaction: TpFIBTransaction;
    dsKardex: TDataSource;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  THackEdit = class(TCustomEdit);

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TDBGrid }

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

procedure TForm1.FormCreate(Sender: TObject);
begin
  Database.Connected := True;
  Transaction.StartTransaction;
  tbKardex.Open;
end;

end.

Gracias por su valiosos aportes.

Casimiro Notevi 11-09-2014 00:54:45

¿Dónde está la consulta select de donde lees los datos?

Jose Roman 11-09-2014 02:56:04

La tengo en tbKardex en su propiedad SelectSQL que es un FIBDataSet, ahi esta una tabla que tiene los campos Fecha,Entrada,Salida,Usuario,Detalle; el campo fecha en el SkinDBGrid esta en formato dd-mmm-yy, ese campo lo deseo en mayusculas ald igual que el campo detalle, por eso en el FormCreate abro la tabla.

ecfisa 11-09-2014 04:09:18

Hola Jose Roman.

De allí la pregunta de Casimiro ya que, en el caso de las cadenas de caracteres, te conviene traer los datos en mayúsculas diréctamente desde la consulta.

Por ejemplo:
Código SQL [-]
SELECT UPPER(DETALLE), ..., FECHA FROM TU_TABLA
El tema de las fechas es distinto... No tengo el componente TFIBDataSet, sin embargo creo que esto tendría que funcionarte:
Código Delphi [-]
...
implementation

const
  MNAME: array[1..12] of string = ('ENE','FEB','MAR','ABR',
    'MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC');
var
  AuxMonth: array[1..12] of string;

procedure TForm1.FormCreate(Sender: TObject);
begin
  move(SysUtils.ShortMonthNames, AuxMonth, SizeOf(SysUtils.ShortMonthNames));
  move(MNAME, SysUtils.ShortMonthNames, SizeOf(MNAME));

  TDateField(FibDataSet1.FieldByName('FECHA')).DisplayFormat:= 'dd/mmm/yy';
  FibDataSet1.Open;
end;

//...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  move(AuxMonth, SysUtils.ShortMonthNames, SizeOf(AuxMonth));
end;

Saludos :)

roman 11-09-2014 05:08:03

Pero estamos hablando de cosas distintas. Una cosa es armar la consulta SQL en mayúsculas y otra que al editar el DBGrid sólo se acepten mayúsculas; y esto último es lo que hacía el código al que se refiere Jose Roman, sólo que él utiliza un derivado de TDBGrid que desconozco.

// Saludos

ecfisa 11-09-2014 05:24:00

Si roman, esa me pareció la finalidad del código del primer mensaje. Sin embargo esta parte del texto no se condecía con él:
Cita:

Resulta que necesito que un bsSkinDBGrid (componente de Business Skin Form adquirido hace mas de dos años) me muestre en mayusculas los campos...
De modo que si era sólo mostrarlos en mayúsuculas bastaba hacerlo desde la consulta. Pero es claro que si necesita pasar a mayúsculas lo que va ingresando no le va a servir mi mensaje...

Saludos :)

Jose Roman 11-09-2014 14:32:37

Gracias a todos por su respuesta, creo que lo de ecfisa me puede servir, les comunicare mi avance, gracias de nuevo.

Jose Roman 11-09-2014 15:23:27

Les informo que funciono el codigo sugerido por ecfisa, solo unas modificaciones para aquellos que estamos trabajando con XE en adelante, en vez de SysUtils.ShortMonthNames deben utilizar FormatSettings.ShortMonthNames y la parte donde se busca el campo con la fecha debe declararse despues de abrir la tabla ya que genera un error al no encontrar el campo, entonces el codigo fuente queda asi:
Código Delphi [-]
const
  MNAME: array[1..12] of string = ('ENE','FEB','MAR','ABR',
    'MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC');
var
  AuxMonth: array[1..12] of string;

procedure TForm1.FormCreate(Sender: TObject);
begin
  move(FormatSettings.ShortMonthNames, AuxMonth, SizeOf(FormatSettings.ShortMonthNames));
  move(MNAME,FormatSettings.ShortMonthNames, SizeOf(MNAME));
  Database.Connected := True;
  Transaction.StartTransaction;
  tbKardex.Open;
  TDateField(tbKardex.FieldByName('ID_FEC')).DisplayFormat:= 'dd/mmm/yy';
end;

Jose Roman 11-09-2014 16:03:08

Cita:

Empezado por Jose Roman (Mensaje 481177)
Les informo que funciono el codigo sugerido por ecfisa, solo unas modificaciones para aquellos que estamos trabajando con XE en adelante, en vez de SysUtils.ShortMonthNames deben utilizar FormatSettings.ShortMonthNames y la parte donde se busca el campo con la fecha debe declararse despues de abrir la tabla ya que genera un error al no encontrar el campo, entonces el codigo fuente queda asi:
Código Delphi [-]
const
  MNAME: array[1..12] of string = ('ENE','FEB','MAR','ABR',
    'MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC');
var
  AuxMonth: array[1..12] of string;

procedure TForm1.FormCreate(Sender: TObject);
begin
  move(FormatSettings.ShortMonthNames, AuxMonth, SizeOf(FormatSettings.ShortMonthNames));
  move(MNAME,FormatSettings.ShortMonthNames, SizeOf(MNAME));
  Database.Connected := True;
  Transaction.StartTransaction;
  tbKardex.Open;
  TDateField(tbKardex.FieldByName('ID_FEC')).DisplayFormat:= 'dd/mmm/yy';
end;

Ahora me surgio la duda, ¿Y para mostrar AM o PM en lugar de am o pm?

Caminante 11-09-2014 17:31:58

Hola a todos.

Si la finalidad es solo visualizar los datos en mayusculas ¿no basta con el evento ongettext?

Saludos

ecfisa 11-09-2014 18:36:13

Hola Jose Roman.
Cita:

Empezado por Jose Roman (Mensaje 481179)
Ahora me surgio la duda, ¿Y para mostrar AM o PM en lugar de am o pm?

Estimo que bastaría agregarlo a la cadena de formato:
Código Delphi [-]
 TDateField(FibDataSet1.FieldByName('FECHA')).DisplayFormat:= 'dd/mmm/yy h:m:s AM/PM';
Saludos :)


La franja horaria es GMT +2. Ahora son las 05:50:48.

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