Ver Mensaje Individual
  #5  
Antiguo 27-07-2003
HombreSigma HombreSigma is offline
Miembro
 
Registrado: jun 2003
Ubicación: World
Posts: 114
Reputación: 23
HombreSigma Va por buen camino
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,
__________________
SigmaMan
Responder Con Cita