Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Visualización de campos MEMO en un Grid (https://www.clubdelphi.com/foros/showthread.php?t=3096)

Cabanyaler 21-08-2003 11:35:26

Visualización de campos MEMO en un Grid
 
Hola compañeros.
En lugar de estar en el chiringuito con una cerveza y unas aceitunas, estamos en el despacho con el aire acondicionado programando... y es que siempre han existido clases, y contra más clases... más sabes, y contra más sabes... más trabajas y más responsabilidad, y no directamente proporcional al... parné. Pero en fin, dentro de unos días estaré por Formentera y esta vez prometo perder el teléfono movil. :p

Al royo.

Necesitaba visualizar datos de un memo en un dbgrid. Historicamente siempre lo tenía pendiente, pues bien, he encontrado un truco en trucomania y mejor o peor lo he adecuado (ya que ese truco no funcionaba como estaba publicado) y con este algoritmo se visualiza perfectamente.

Para todos aquellos que lo necesiten, aquí lo tienen.
Faltará adecuarlo y seguramente perfeccionarlo, pero esto ya es algo.
Suerte a todos y gracias.


// De como visualizar y sólo visualizar un campo memo en un grid

procedure TFBuscaProveedores.DBGridSQLBusquedaDrawColumnCell(
Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
Grid : TStringGrid;
Texto : String;
Rectangulo : TRect;
begin
Rectangulo:=Rect;
Grid := TStringGrid(Sender);
if DataCol = 14 then // Aquí esta la pega de tener que poner esta
begin // constante "14" indicativa de la columna del grid
Grid.Canvas.FillRect(Rect); // q representa el memo
Texto := DBGridSQLBusqueda.Fields[14].Value;
DrawText( Grid.Canvas.Handle,
PChar(Texto),
StrLen(PChar(Texto)),
Rectangulo,
DT_WORDBREAK);
end;
end;

__cadetill 21-08-2003 12:03:09

Hola

Dos comentarios a tu codigo

1.- Si en la linea

Código:

if DataCol = 14 then
Pones
Código:

if Column.Field.DataType = ftMemo then
No tendras que preocuparte de que columna es el Memo

2.- Esto se ha discutido varias veces

Código:

Grid := TStringGrid(Sender);
Este "casteo" no es correcto ya que no es una herencia lineal

TCustomGrid --> TStringGrid --> TDbGrid

sino que es

TCustomGrid --> TCustomDrawGrid --> TDrawGrid --> TStringGrid
TCustomGrid --> TDbGrid

Aunque el truco funcione, se tiene que estar seguro de lo que se esta haciendo (para mas info mira algunos hilos que hay en los foros)

Cabanyaler 26-08-2003 13:53:10

Efectivamente esa era una de las posibles mejoras....


La franja horaria es GMT +2. Ahora son las 00:50:59.

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