Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-11-2004
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
problema en un DbGrid

hola Gente tengo un problema, con un campo Memo en un dbgrid. Me muestra la palabra MEMO en ves de mostrarme la informacion, y para solucionarlo no encontre otra manera q cambiar el tipo del campo a Texto y ponerlo de tamaño 255 en Access. Si tienen otra solucion mejor!!!
Volviendo a lo que habia hecho quiero solucionar el problema que tengo q me lo muestra todo seguido o sea tendria que poner el tamaño de la columna del dbgrid muy grande para que me muestre todo, yo quisiera saber si se puede hacer que se muestre en varias filas, mejor dicho como se fuera el componente Memo, pero en la columna del Dbgrid.
Desde ya muchas gracias.
Pancho
Responder Con Cita
  #2  
Antiguo 17-11-2004
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por fmonte
Me muestra la palabra MEMO en ves de mostrarme la informacion
No es muy complicado hacer que se sustituya el contenido del memo por el texto (MEMO) que ves ahora; Para ello puedes utilizar el evento OnDrawColumnCell del DBGrid; Se lee el memo y se repinta la celda con el texto; También puedes eliminar los saltos de línea si te molestan para mostrar todo el memo seguido.

Aquí tienes un pequeño ejemplo de cómo hacerlo.

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Str: string;
begin
  // es la columna de memo?
  if (Column.Index = 3) then begin
    // Comprobar quees un memo
    if Column.Field is TMemoField then begin
      // Acceso al memo (texto)
      Str := TBlobField(Column.Field).AsString;
      // Elimiar Saltos de carro y final de línea
      while Pos(#13, Str) > 0 do
        Str[Pos(#13, Str)] := ' ';
      while Pos(#10, Str) > 0 do
        Str[Pos(#10, Str)] := ' ';
      // Limpiar y dibujar el texto
      DbGrid1.Canvas.FillRect(Rect);
      DbGrid1.Canvas.TextOut(Rect.Left, Rect.Top, Str);
    end;
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 18-11-2004
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
Muchas Gracias, me sirvio para que se veo el memo, pero con respecto a eliminar los saltos de linea yo no queria, pero yo la informacion la tengo todo seguido, es decir sin salto de linea, pero yo quiero que si haya salto en linea porque no quiero que se vea todo junto pòrque es largo la informacion y se feo, o sea quiero como si yo pudiera ingresar en la celda un componente TMEMO y ahi mostrar la informacion asi se ve en varias lineas y es mas vistoso.
Muchas Gracias por su ayuda.
Pancho
Responder Con Cita
  #4  
Antiguo 18-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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; // fila de títulos

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

Última edición por roman fecha: 18-11-2004 a las 21:06:13.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:00:17.


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
Copyright 1996-2007 Club Delphi