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 19-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
Dbgrid ajustar tamaño de Columna

Hola no se si pido algo ilogico, se puede ajustar el tamaño de la columna en un dbgrid como la opcion del Excel de ajuste de texto Wrap (o sea ver la oracion completa no importando el tamaño de la columna?) que si le doy a la columna un Width de 200 en ese espacio complete la frase como si tuviera margenes .

Ejemplo: "Este formulario
contiene 200
caracteres"

Gracias.
Responder Con Cita
  #2  
Antiguo 19-01-2016
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
mira esto a ver si te sirve:

http://www.clubdelphi.com/foros/show...justar+columna
Responder Con Cita
  #3  
Antiguo 19-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid Tamaño Columna

Hola primero gracias por la respuesta. Pero en realidad no quiero que el ancho de la columna lo determine el tamaño del campo, sino que funcione come el wrap del excel. es decir si yo le doy un ancho de 200 y tengo 10 palabras que se ajusta la oracion en tantos renglones entren en ese ancho fijo.
Gracias.
Responder Con Cita
  #4  
Antiguo 19-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No se entiende, ¿lo que quieres es cambiar el tamaño del texto?
Responder Con Cita
  #5  
Antiguo 20-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid

Hola, lo que quiero hacer es como el wrap del excel, en una columna por ejemplo de 100 caracteres introducir 500 caracteres entonces se modifica el alto de la celda pero siempre respetando el tamaño de la columna y siempre se ve el total del campo a mostrar.
Gracias.
Responder Con Cita
  #6  
Antiguo 20-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé cómo es el "wrap del excel", pero creo entender que quieres ajustar el alto de la fila.
Responder Con Cita
  #7  
Antiguo 20-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid

Si es asi, tengo varias columnar a mostras en un dbgrid en un form, entonces me vendria bien usar el wrap, quiere decir que segun la cantidad de caracteres del campo a mostrar se modifica el el alto de la celda y en sintesis en toda la fila.

estoy investigando este link pero no me sale todavia.

http://forum.lazarus.freepascal.org/...?topic=21305.0
Responder Con Cita
  #8  
Antiguo 20-01-2016
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.269
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
Se puede hacer, pero tiene un inconveniente.
La única forma de ajustar el tamaño de la columna al texto que se contiene es recorrer todos los registros para obtener el texto más largo.
A partir del texto y utilizando la fuente del grid, en la clase TCanvas hay un método que te da el ancho.

Ese es el ancho que deberías dar a la columna, para que todos los textos se mostraran completos (siendo el mínimo).

El problema es la parte subrayada. Estás haciendo un trabajo innecesario por el volumen de datos y que el algunos casos puede ser muy costoso. y "gastando" también tiempo en el recorrido.

En algún caso particular en que tuvieras muy pocos registros, se podría justificar, pero creo que no es una buena práctica.

Creo que esto es lo que pides, pero fíjate que tal y como te he comentado, en el interior del procedimiento realiza un recorrido del TODO el dataset asociado.
__________________
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
  #9  
Antiguo 20-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Otra forma podría ser retornar en la misma consulta el valor de cadena más largo

Es mucho más rápido que recorrer el dataset, incluso si tiene disable controls
Responder Con Cita
  #10  
Antiguo 20-01-2016
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.269
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 AgustinOrtu Ver Mensaje
Es mucho más rápido que recorrer el dataset, incluso si tiene disable controls
Correcto.

Cita:
Empezado por AgustinOrtu Ver Mensaje
Otra forma podría ser retornar en la misma consulta el valor de cadena más largo
La pregunta es, si podrás hacer eso en todas las Bases de datos.
Por ejemplo, yo trabajo con IB habitualmente y no se me ocurre forma...
__________________
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
  #11  
Antiguo 20-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola German,

Hasta donde se, la funcion Len es parte del estandar SQL

Me llamaria la atencion que algun proveedor no la soporte. En Firebird 2 tiene soporte

Y en el peor de los casos se puede buscar (o implementar ) una funcion UDF como este enlace
Responder Con Cita
  #12  
Antiguo 20-01-2016
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.269
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




Seguramente se podrá implementar, no digo que no...
Por otro lado los UDF's en versiones antiguas de IB dan problemas de estabilidad.
__________________
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
  #13  
Antiguo 20-01-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
La verdad nunca use Interbase, pero que "sorpresita", para mi es como decir que no este implementado el LIKE, no se
Responder Con Cita
  #14  
Antiguo 20-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid wrap

Hola lo que busco es el wrap no el autosize, lo encontre pero a mi no me funciona, les paso el ejemplo y el link, pero me entra en un loop infinito, es decir al fijar el ancho de columna el campo agranda el alto de la fila para que entre todo ahi. Probe toda la mañana veo en el loop que me lo hace pero no corta. En sistensis seria el mutiline de una fila de dbgrid.






Código Delphi [-]
type
  THackDBGrid = class (TDBGrid)
  public
    property RowHeights;
  end;

procedure TFormx.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

var
  HackGrid: THackDBGrid;
  Ind: Integer;
  lRec: TRect;
  Str: AnsiString;
  DS: TDataSet;
  uForm, uCurr: Cardinal;
  NH, valor: Integer;
begin
    DS  := (Sender As TDBGrid).DataSource. DataSet;
    Ind := DS.RecNo;
    Str := DS.FieldByName (Column.FieldName).DisplayText;
    lRec := Rect;
    lRec.Left := lRec. Left + 1;
    lRec.Right:= lRec. Right - 1;
    (Sender As TDBGrid).Canvas. FillRect (lRec);
    NH := lRec. Bottom - lRec.Top;
    //Set an alignment to the text in the cell
    case Column. Alignment of
      taLeftJustify: uForm := DT_SINGLELINE or DT_LEFT;
      taRightJustify: uForm:= DT_SINGLELINE or DT_RIGHT;
      taCenter: uForm:= DT_SINGLELINE or DT_CENTER;
    end;
    //Set an advanced alignment to the text in the cell (Tag value of the field is used)
    valor := DS.FieldByName(Column.FieldName).DataSize;


    if valor > 50 then
     begin
       uForm := DT_WORDBREAK or DT_CALCRECT;
       NH := DrawText ((Sender As TDBGrid).Canvas. Handle, PAnsiChar (Str),-1, lRec,     uCurr)    + 2;
       uForm := DT_WORDBREAK;
       lRec.Bottom := lRec.Top + NH;
       HackGrid:= THackDBGrid (DBGrid3);
       HackGrid.RowHeights[Ind]:= NH;

      uCurr:= uForm;
      DrawText ((Sender As TDBGrid).Canvas. Handle, PAnsiChar (Str),-1, lRec, uCurr);

     end;

el link original esta aqui.

http://www.delphipages.com/forum/sho...d.php?t=216440

o

http://www.progtown.com/topic106385-...ne-dbgrid.html
Responder Con Cita
  #15  
Antiguo 20-01-2016
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.

A partir de la versión 2.0 de Firebrid, la función que devuelve el largo de una cadena es CHAR_LENGTH(), CHARACTER_LENGTH(); entiendo que en Interbase es la misma.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 20-01-2016
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.269
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
No se cómo será en las versiones nuevas, en las antiguas no está disponible ninguna de las 2.
__________________
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
  #17  
Antiguo 20-01-2016
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
Entonces seguramente sea propia de Firebird e Interbase no la haya implementado...

Pero podría hacerse un procedimiento almacenado para realizar esa tarea: Buscar valores con longitud 5 en una consulta

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 20-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid wrap

Lo que tendria que lograr es como se muestra en la imagen del link (ultima imagen) donde dice
cell word wrap-

http://www.scalabium.com/smdbgrid.htmcceell word-wrap.
cell word-wrap
Imágenes Adjuntas
Tipo de Archivo: jpg wrap1.jpg (19,5 KB, 3 visitas)
Responder Con Cita
  #19  
Antiguo 20-01-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sí, ya lo habíamos entendido.
Responder Con Cita
  #20  
Antiguo 21-01-2016
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 17
shoulder Va por buen camino
dbgrid

Hola ya lo solucione con este componente, funciona bien.

http://www.scalabium.com/
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
Como fijar el tamaño de una columna de un DBGrid en runtime darkamerico OOP 2 31-01-2013 15:08:55
Ajustar ancho de columna en DBGRID Viky Varios 2 15-07-2010 18:39:48
Tamaño de Columna en un dbgrid m.ruiz Varios 4 19-04-2007 10:07:16
Ajustar tamaño Barcode hepdad Impresión 2 05-04-2006 15:29:41
Ajustar Tamaño de Columnas en DBGrid. Essato Varios 1 26-06-2005 00:34:18


La franja horaria es GMT +2. Ahora son las 03:21:22.


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