Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 18-11-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
Cita:
Empezado por fmonte
ahi mostrar la informacion asi se ve en varias lineas y es mas vistoso.
Bueno pero, ¿te has fijado cuántas líneas caben en una fila de un DBGrid?

Para poder mostrar varias líneas tendrías que comenzar alterando la altura de las filas, pero las propiedades DefaultRowHeight y RowHeights del DBGrid están protegidas. Puedes usar el truco desprotección:

Código Delphi [-]
type
  THackGrid = class(TDBGrid);

...

THackGrid(DBGrid1).DefaultRowHeight := 100;
THackGrid(DBGrid1).RowHeight[0] := 17; // fila de títulos

pero la componente tiende a volver a sus dimensiones normales cuando mueves columnas o cambias el ancho de alguna de ellas (y quizá en otras situaciones).

Esto lo puedes solventar usando mejor un derivado de TDBGrid en el que redefinas los métodos ColumnMoved y ColWidthsChanged:

Código Delphi [-]
procedure TMiDBGrid.ColumnMoved(FromIndex, ToIndex: Integer);
begin
  inherited;

  DefaultRowHeight := 100;
  RowHeights[0] := 17;
end;

procedure TMiDBGrid.ColWidthsChanged;
begin
  inherited;

  DefaultRowHeight := 100;
  RowHeights[0] := 17;
end;

Haciendo esto puedes entonces usar el evento OnDrawColumnCell como te indica Neftali pero usando una función de escritura que me parece no viene en el objeto Canvas:

Código Delphi [-]
procedure TForm1.MiDBGrid1DrawColumnCell(
  Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  MemoText: String;
  MemoRect: TRect;

begin
  if Column.FieldName = 'Code' then
  begin
    (Sender as TDBGrid).Canvas.FillRect(Rect);
    MemoText := Column.Field.AsString;
    MemoRect := Rect;
    InflateRect(MemoRect, -2, -2);
    Windows.DrawText(
      (Sender as TDBGrid).Canvas.Handle,
      PChar(MemoText),
      -1,
      MemoRect,
      DT_WORDBREAK
    );
  end
  else
    (Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Pero aún así te quedan varios problemas.
  • No puedes editar el texto directamente
  • En los registros con texto muy largo, puede no caber en la fila y no hay manera sencilla de colocar barras de desplazamiento.

A final de cuentas quizá lo más adecuado sea buscar alguna componente que maneje todas estas situaciones. También puedes optar por un TDBCtrlGrid que sí te permitirá mostrar mútiples registros con un TDBMemo en cada uno.

// Saludos

Última edición por roman fecha: 18-11-2004 a las 21:06:13.
Responder Con Cita
 



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 15:26:26.


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