Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Urgente! No encuentro sol. para mostrar memo en rxdbgrid. (https://www.clubdelphi.com/foros/showthread.php?t=8822)

setry2 02-04-2004 13:29:02

Urgente! No encuentro sol. para mostrar memo en rxdbgrid.
 
Buenos días,

Tengo un rxdbgrid enlazado con una qry que tiene un campo memo. Como sabéis, aparece el texto [Memo] en el grid al enlazarlo. He probado varias soluciones en el OnDrawColumnCell que he encontrado, pero no he podido visualizar el memo. Las soluciones son del tipo:

var
Grid : TStringGrid;
Texto : String;
Rectangulo : TRect;
begin
Rectangulo:=Rect;
Grid := TStringGrid(Sender);
if Field.IsBlob then
begin
Grid.Canvas.FillRect(Rect);
Texto := Field.AsString;
DrawText( Grid.Canvas.Handle,
PChar(Texto),
StrLen(PChar(Texto)),
Rectangulo,
DT_WORDBREAK);
end;

o

En este recomendaban quitar el field del campo del grid que es el memo.

var
rectangulo:trect;
begin
with Sender as TDBGrid do
begin
//micampo es campo memo
if column.Title.Caption='micampo' then
begin
rectangulo:=rect;
DrawText(Canvas.Handle,PChar(ibdataset.FieldByName('micampo').AsString),StrLen(PChar(ibdataset.Field ByName('micampo').AsString)),Rectangulo,DT_EDITCONTROL);
end;

He probado estas y otras más, pero no he conseguido que funcionen.

Si directamente en la qry corto el memo a 255 caracteres, entonces sí me muestra el contenido del memo, pero en los retornos de carro aparece un cuadrado. Hoy parece que estoy un poco negado porque no he podido ni quitar los retornos de carro directamente desde la qry (para que almenos me muestre 255 car. del memo limpios) ni al mostrar el dado en el grid.

Muchas gracias de antemano por vuestro tiempo.

Un saludo.

marto 02-04-2004 14:03:06

¿Por qué no te funciona el primer método?

Es el método que se porpone en Trucomanía y yo aun no he visto ahí ninguno publicado y que no funcione...

setry2 02-04-2004 15:55:08

Ajustes por ejecutar en OnDrawColumnCell.
 
Hola Marto,

Tienes razón. No 'me' funciona. A mí tampoco me ha fallado nunca trucomania, por estoy seguro de que hay algo que no estoy haciendo bien. Lo ha utilizado en el OnDrawDataCell y en OnDrawColumnCell con ajustes:

var
Grid : TStringGrid;
Texto : String;
Rectangulo : TRect;
begin
Rectangulo:=Rect;
Grid := TStringGrid(Sender);
if Column.Field.IsBlob then
begin
Grid.Canvas.FillRect(Rect);
Texto := Column.Field.AsString;
DrawText( Grid.Canvas.Handle,
PChar(Texto),
StrLen(PChar(Texto)),
Rectangulo,
DT_WORDBREAK);
end;
end;

El resultado en los dos eventos es el mismo, aparece la palabra (MEMO) en el campo del grid. ¿Puedes orientarme cual puede ser el problema?

Muchas gracias.

setry2 05-04-2004 13:13:50

Buenos dias,

Alguna sugerencia al problema?

Muchas gracias por todo.

Nadie 08-04-2004 18:22:17

No lei por completo lo que hiciste pero me parece mucho mas simple que en el select uses substr sobre la columna memo, onda select columna1, columna2, substr(columna3,0,150) as "columna3" from tabla con eso tranformas el memo en string

tutuk 09-04-2004 08:33:14

a mi me da el mismo error con el rxdbgrid pero lo reemplace por el dbgrid y si funciona, proba con el dbgrid.
chau suerte

__cadetill 09-04-2004 10:16:30

Pues acabo de probarlo tanto en un TRxDbGrid como en un TDbGrid y me ha funcionado correctamente

Código:

procedure TForm1.RxDBGrid1DrawColumnCell(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 Column.Field.IsBlob then  // <= esta forma también me ha funcionado
  if Column.Field.ClassType = TMemoField then
  begin

    Grid.Canvas.FillRect(Rect);
    Texto := Column.Field.AsString;
    DrawText( Grid.Canvas.Handle,
              PChar(Texto),
              StrLen(PChar(Texto)),
              Rectangulo,
              DT_WORDBREAK);
  end;
end;



La franja horaria es GMT +2. Ahora son las 09:36:46.

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