Gracias por las anotaciones, ambas sirvieron.
He aquí el componente TDBGridplus que permite visualizar (aunque no modificar, pero este codigo es mucho más facil de agregar) campos memo, por si a alguien de foro le interesa.
unit DBGridPlus;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, DB;
type
TDBGridPlus = class(TDBGrid)
private
protected
procedure DrawColumnCell
(const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);override;
public
{ Public declarations }
property InplaceEditor;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
uses DBTables;
constructor TDBGridPlus.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TDBGridPlus.Destroy;
begin
inherited Destroy;
end;
procedure TDBGridPlus.DrawColumnCell(const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
P:array [0..50] of char;
BS:tBlobStream;
S:String;
begin
if Column.Field is TMemoField then begin
with Self.Canvas do begin
BS:=tBlobStream.Create(TMemoField(Column.Field), bmRead);
FillChar(P,SizeOf(P),#0); {termina la cadena nula}
BS.Read(P, 50); {Lee 50 caracteres del memo dentro del blobStream}
BS.Free;
S:=StrPas(P);
while Pos(#13, S) > 0 do {remueve caracteres retornos de carro y nueva linea}
S[Pos(#13, S)]:=' '; {Retorno de carro}
while Pos(#10, S) > 0 do
S[Pos(#10, S)]:=' '; {Nueva linea}
FillRect(Rect); {Limpia la celda}
TextOut(Rect.Left, Rect.Top, S); {Llena celda con dato memo}
end;
end;
inherited DrawColumnCell(Rect, DataCol, Column, State);
end;
end.
Gracias a mis asesores estrellas y al sitio de donde saque el código para ver el memo. Todos aportaron un poco, asi que eso se llama trabajar en en equipo,
