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