Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   títulos de dbgrids de 2 filas (https://www.clubdelphi.com/foros/showthread.php?t=84014)

giocatore 28-08-2013 06:26:03

títulos de dbgrids de 2 filas
 
buenas noches, quisiera me ayuden con este problema que tengo:
quisiera poder poner títulos largos en las tablas usando dbgrid sin tener que ensanchar la columna, es decir quiero saber como hacer para poder ponerlos en 2 filas para que me entre el título completo, o caso contrario (pese a que encontré alguna solución, y no es muy fluida ya que el hint aveces aparece y aveces nó) ponerles hints a cada columna de la tabla.
para los hints usé el código de este hilo.

http://www.clubdelphi.com/foros/showthread.php?t=56876

hago notar que uso adotables, delphi xe2 y dbgrids.

Espero por favor puedan ayudarme.

GRacias!!!

ElDioni 28-08-2013 09:33:03

Hola,

puedes utilizar el componente SMDBGrid que es gratuito y funciona para todas las versiones de delphi. Si te decides por este componente verás que tiene una propiedad que se llama TitleHeight para conseguir lo que quieres hacer.

Saludos.

giocatore 29-08-2013 00:20:21

hola, gracias por la respuesta, hay alguna manera de hacerlo con dbgrid o sin usar un componente externo???
gracias!!

ecfisa 29-08-2013 06:08:20

Hola giocatore.
Cita:

Empezado por giocatore (Mensaje 466208)
hay alguna manera de hacerlo con dbgrid o sin usar un componente externo???

Si claro que la hay.

Por ejemplo:
Código Delphi [-]
...
type
  TDBGrid = class(DBGrids.TDBGrid)
  private
  protected
    procedure DrawCell(ACol, ARow: Integer; ARect: TRect; State: TGridDrawState); override;
  public
  end;

  TForm1 = class(TForm)
    Table1: TTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation 

procedure TDBGrid.DrawCell(ACol, ARow: Integer; ARect: TRect; State: TGridDrawState);
const
  ALGN : array[0..2] of Integer = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
  CurrTit : string;
  CurrCol : TColumn;
  uFormat : Integer;
begin
  TDBGrid(Self).RowHeights[0] := 2 * TDBGrid(Self).DefaultRowHeight;
  if (ARow = 0) and (ACol > 0) and (ColCount > 0) then
  begin
    CurrCol := Columns[ACol - Integer(dgIndicator in Options)];
    CurrTit := CurrCol.Title.Caption;
    Canvas.Font := CurrCol.Font;
    Canvas.FillRect(ARect);
    uFormat := ALGN[Integer(CurrCol.Title.Alignment)] + DT_WORDBREAK;
    DrawText(Canvas.Handle, PChar(CurrTit), -1, ARect, uFormat);
  end
  else
    Inherited;
end;

// Ejemplo: Un titulo y su alineación
procedure TForm1.FormCreate(Sender: TObject);
begin
  DBGrid1.Columns[0].Title.Caption :=
    'Titulo muy largo para que pueda verse' + #10 +
    'con mayor clariodad en dos renglones';
  DBGrid1.Columns[0].Title.Alignment := taCenter;
end;
...
Pero coincido con ElDioni, con que es mas simple y reusable utilizar un componente de tercero, o bién crearte uno incorporándole este código u otro similar.

Saludos :)

ElDioni 29-08-2013 08:53:25

ecfisa de mayor quiero ser como tu v:-)v.

Saludos.


La franja horaria es GMT +2. Ahora son las 12:29:40.

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