Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Problema DBGrid y MEMO

Hola a todos, se me plantea el siguiente problema:
Tengo un DBGrid y en uno de los campos es un tipo MEMO. Como sabreis este campo muestra (WIDEMEMO) en lugar de mostrar la informacion.
Pues bien, googleando un poco he encontrado lo siguiente:

void __fastcall TfrmPrincipal:BGrid3DrawColumnCell(TObject *Sender, const TRect &Rect,
int DataCol, TColumn *Column, TGridDrawState State)
{
// Con esto mostramos la descripción del MEMO en el dbgrid
if (Column->Field->FieldName == "Descripción") {
DBGrid3->Canvas->FillRect(Rect);
DBGrid3->Canvas->TextRect(Rect, Rect.Left, Rect.Top, Column->Field->Value);
}
}

el cual muestra perfectamente el contenido del campo MEMO. El problema viene cuando se hace clic q se sobreescribe encima de la informacion (WIDEMEMO). TAmbien desactivo la opcion de editar.

Se os ocurre alguna forma de evitar esto?? Muchas gracias y un saludo!
Responder Con Cita
  #2  
Antiguo 21-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje


Saludos.
tengo problemas con el explorer 9 y me ha tocado coger el portatil para continuar en el explorer 8 :S
Responder Con Cita
  #3  
Antiguo 21-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Borré mi mensaje anteriór por que ví que agregaste el problema, pero fuiste más rápido...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 21-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mizzard.

Si utilizas el DBGrid sólo para mostrar datos, desde el Object Inspector pone en la propiedad Options , dgEditing = False

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 21-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola mizzard.

Si utilizas el DBGrid sólo para mostrar datos, desde el Object Inspector pone en la propiedad Options , dgEditing = False

Saludos.
Como comente tengo esa opcion ya puesta, pero aun asi cuando hago clic aparece lo q comento

PD: En Explorer 9 no puedo escribir nada
Responder Con Cita
  #6  
Antiguo 22-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Que extraño... Lo único que se me ocurre es que actives la opción dgRowSelect de ese modo dgEditing es ignorada.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 22-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Que extraño... Lo único que se me ocurre es que actives la opción dgRowSelect de ese modo dgEditing es ignorada.

Saludos.

Tambien lo he probado :S.... y alguna opcion para que cuando haga clic con el raton q no haga nada?? como detectar el evento y q no haga nada...

No se me ocurre nada...
Responder Con Cita
  #8  
Antiguo 22-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mizzard.

Lamentablemente para el TDBGrid no funciona ReleaseCapture, pero todavía hay algo que podés hacer para que no aparezca [WIDEMEMO] y es aprovechar el evento OnGetText del campo Descripcion.

Primero que nada, ya no necesitaras del evento OnDrawColumnCell, así que desactivalo.

Si tenés creado el campo persistente sólo tenés que hacer doble click sobre el evento OnGetText del mismo y agregar dos líneas si no, lo podés asignar manualmente por ejemplo en el evento OnCreate del form como en el código siguiente:
Código:
void __fastcall TForm1::DescripcionGetText(TField *Sender,
      AnsiString &Text, bool DisplayText)
{
  TStringField *Fd = static_cast<TStringField*>(Sender);
  Text = Fd->AsString;
}

/* (No es necesario si está asignado desde el campo persistente) */
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 DataSet->FieldByName("Descripcion")->OnGetText = DescripcionGetText;
}
Lo que no comprendo es que no te funcione dgEditing, me parece extrañísimo ya que tanto en Delphi como en Builder me funciona correctamente.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 22-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Me olvidaba... para no dejar cabos sueltos:
Código:
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  DataSet->FieldByName("Descripcion")->OnGetText = NULL;
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 25-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Hola, perdona por la tardanza, que he estado liado en otras cosas :S.

Comentar que aunque este desactivada la opcion de editar en el grid, sí que se puede hacer clic por lo que con lo q te comento q hago aparece el (WIDEMEMO).

Intente llevar a cabo tu solucion, pero la verdad es q me perdia, intuyo que tenia que utilizar otro componente (TADODataset?), lo que pasa es q nunca lo he usado y no paraba de salirme errores de compilacion :S. Yo utilizo ADOQuerys con DataSources a partir de un TADOConnection.

Al final se me ocurrio una "chapuza" que medio lo subsana (aunq no del todo) que es deshabilitar el grid con el evento onMouseEnter y habilitar la con el evento onMouseLeave :P

Sé que no es una buena solucion, pero como se trata de algo puramente estetico no quiero darle demasiada importancia.

No obstante quiero mostrarte mi gratitud y agradecerte si me pudieras explicar un poco con mas detalle o con ejemplos la propuesta de solucion que me has dixo

Muchas gracias y un saludo!
Responder Con Cita
  #11  
Antiguo 25-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mizzard.


Voy a tratar de explicarte la forma más simple, mediante los campos persistentes.

Sobre el componente ADOQuery haces click con el botón derecho del mouse y de la ventana emergente elegís Fields Editor.
Te abre una ventana donde nuevamente haces click con botón derecho y elegis Add All Fields. Acabas de crear todos los campos persistentes.
En esa misma ventana, seleccionas tu campo MEMO (creo que es Descripcion), luego te vas al Object Inspector y haces click sobre la pestaña Events y doble click sobre el evento OnGetText, Builder te creará de forma automática algo similar a:
Código:
void __fastcall TForm1::ADOQuery1DescripcionGetText(TField *Sender, 
  AnsiString &Text, bool DisplayText)
{

}
Dentro de la función agregas las siguientes líneas:
Código:
  TStringField *Fd = static_cast<TStringField*>(Sender);
  Text = Fd->AsString;
Y eso es todo.

Si hay algo en lo que no me haya explicado bién, no dudes en volver a preguntar.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 25-11-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Claro como el agua y perfectamente funcional.

Otro problema que tengo relacionado con el campo MEMO lo he iniciado en este post:
http://www.clubdelphi.com/foros/showthread.php?t=76753

En donde tengo que mostrar el campo memo en un informe usando Rave Reports. Tenia la esperanza que al hacer lo que me has indicado, se viera bien en Rave... pero va a ser q no

Si le puedes echar un ojo a ver q se te ocurre estare muy agradecido. Muchas gracias por toda la ayuda recibida tanto en este post como en los anteriores.

Un abrazo!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
(MEMO) En DBGrid FunBit OOP 4 17-01-2009 21:37:02
Editar memo en DBGrid Angel Vicente OOP 2 13-06-2008 15:38:10
problema con campo memo en un dbgrid dcamp Conexión con bases de datos 3 24-10-2005 14:51:49
Dbgrid & Memo jymy788 Varios 5 10-02-2005 18:39:38
memo en dbgrid JoseQ Conexión con bases de datos 5 22-07-2004 10:58:10


La franja horaria es GMT +2. Ahora son las 04:44:50.


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