Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2007
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
dbgrid pero 2 renglones por registro

hola como estan?

ando buscando un componente del tipo dgrid (en lo posible free) que permita
poner 2 renglones por registro.

asi http://s1.subirimagenes.com/imagen-d...s-1678394.html

desde yas muchas gracias por su tiempo.
Responder Con Cita
  #2  
Antiguo 26-11-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,
si tienes ganas de trabajar, puedes simularlo tú mismo.
Para ello.
1.- pon las propiedades del DBGrid Font-size =25 por ejemplo. Con esto consigues que tus lineas sean tres veces más altas.
2.- A partir de aqui, puedes redibujar todos los campos. Para ello, en el evento drawncolumnCell del DBGrid pones algo parecido a esto, que te los dibuja de forma habitual:

Código Delphi [-]
 
(Sender as TDBGrid).Canvas.Font.Size:= 8;
(Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);

3.- Los campos que sean 'especiales' , tendrás que currartelo vía drawntext y funciones similares, jugando con el canvas del grid , el rect, ... De todo esto tienes información a patadas en el foro. Sólo tienes que buscar.

Espero que te sirva de ayuda.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por fjcg02 fecha: 26-11-2007 a las 22:38:29.
Responder Con Cita
  #3  
Antiguo 27-11-2007
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
gracias fjcg02 por responder.

mira probe lo que me dices pero con esto solo consigo que cada renglon sea como vos decis tres veces mas grande que lo normal poniento el fontsize del dbgrid en 25 y luego que la letra del renglon de cada linea sea de 8, osea tengo un renglon grande y la letra chica pero con esto no consigo tener dos renglones por registro.

Por favor insisteme si no te entendi bien u orientame un poco mas sobre que metodos, eventos o propiedades debe utilizar con esto que me dices asi pueda obtener dos renglones por registro.

de todas formas si alguien tiene idea de algun dbgrid que permita configurar para que cada registro ocupe dos renglones como se muestra en la figura estare muy agradecido.
Responder Con Cita
  #4  
Antiguo 27-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Esa imagen que pones tiene toda la pinta de ser un JFControls, un grid muy tuneable. Son componentes de pago.

Buscando por mis bibliotecas he encontrado una forma "fácil" de usar el método de fjcg02. Copia todo en una nueva unidad y ponle el nombre lpCanvas.pas:
Código Delphi [-]
unit lpCanvas;

interface
  uses Graphics,windows;

type TAlignText = (atTopLeft=0, atTopCenter, atTopRight,
                   atCenterLeft, atCenter, atCenterRight,
                   atBottomLeft, atBottomCenter, atBottomRight);

procedure PaintText(ACanvas: TCanvas; const ARect: TRect;
                       const Line:string; Align:TAlignText;
                       const FillBackground:Boolean = false);

implementation

uses sysutils;

const
 Offset = 2;

procedure PaintText(ACanvas: TCanvas; const ARect: TRect;
                       const Line:string; Align:TAlignText;
                       const FillBackground:Boolean = false);
var x,y,CenterX, CenterY:integer;
   Options :integer;
   S: array[0..255] of Char;
begin
  Options := ETO_CLIPPED;

  if FillBackground  then
    Options := options or ETO_OPAQUE;

  with ARect, Acanvas do
  begin
    CenterY := (Bottom - Top - TextHeight(Line)) div 2;
    CenterX := (Right - Left - TextWidth(line)) div 2;
    x:= Offset;
    y:= Offset;
    case Align of
     atTopLeft      :begin
                      x := left + Offset ;
                     end;
     atTopCenter    :begin
                      x := left + CenterX;
                     end;
     atTopRight     :begin
                      x := Right - Offset - TextWidth(Line);
                     end;
     atCenterLeft   :begin
                      x:= Left+ Offset;
                      y:= CenterY;
                     end;
     atCenter       :begin
                      x:= CenterX;
                      y:= CenterY;
                     end;
     atCenterRight  :begin
                      x:= Right - Textwidth(line) - Offset;
                      y:=  CenterY;
                     end;
     atBottomleft   :begin
                      y:=  Bottom - Textheight(Line) - Offset;
                     end;
     atBottomCenter :begin
                      x:= CenterX;
                      y:= Bottom - Offset - Textheight(Line);
                     end;
     atBottomRight  :begin
                      x:= Right - TextWidth(line) - Offset;
                      y:= Bottom - Textheight(Line)-Offset;
                     end;
    end;
    ExtTextOut(Handle, x, y, options,@ARect,  StrPCopy(S,Line),length(line),nil);
  end;
end;


end.

Forma de uso:
Código Delphi [-]
uses lpCanvas;

// Al dbGrid, le pones a false la propiedad DefaultDrawing
//En el evento OnDrawColumnCell del grid, escribes:
PaintText(Canvas, Rect,                      //parámetros del propio evento OnDrawColumnCell
             'Mi texto Linea1', atTopLeft,
             true); // aqui decimos que pinte el fondo

PaintText(Canvas, Rect,                      //parámetros del propio evento OnDrawColumnCell
             'Mi texto Linea 2', atBottomRight,  //segunda línea alineada a la derecha
             False); // Ahora no pintamos el fondo, porque se borraría la primera línea.

Como ves tienes 9 formas de alinear texto dentro de la celda, más que suficiente .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 27-11-2007 a las 20:06:15.
Responder Con Cita
  #5  
Antiguo 27-11-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
smessina,
te adjunto la rutina que pinta lo que tú pides.
Para ello, haz lo que te he comentado anteriormente. Pon un grid con font.size = 20, y copiale el código que te adjunto.
PAra el ejemplo que te pongo, necesitas una tabla que tenga los campos Nombre1, Nombre2, Concepto, FEcha, CantidadDebe y CantidadHaber. Yo he utilizado una bbdd de access para hacer la prueba.

Suerte y un saludo

<a href="http://img122.imageshack.us/my.php?image=pantallazofk3.jpg" /a>

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, Grids, DBGrids, ADODB;

type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOTable1idregistro: TAutoIncField;
    ADOTable1Nombre1: TWideStringField;
    ADOTable1Concepto: TWideStringField;
    ADOTable1Nombre2: TWideStringField;
    ADOTable1fecha: TDateTimeField;
    ADOTable1Cantidaddebe: TFloatField;
    ADOTable1CAntidadhaber: TFloatField;
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Types;

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var WRect: TRect;
begin
(Sender as TDBGrid).Canvas.Font.Size:= 8;
if DataCol =0  then
begin
  WRect.Left:= Rect.Left;
  WRect.Top := REct.Top + ((Rect.Bottom-Rect.Top) div 2);
  WRect.Bottom := Rect.Bottom;
  WRect.Right:= Rect.Right;
  DBGrid1.Canvas.Rectangle(WRect); // pinto un rectangulo para separar los dos nombres
  DBGRid1.Canvas.TextOut(Rect.LEft,Rect.Top+2,ADOTable1Nombre1.AsString);
  DBGRid1.Canvas.TextOut( Rect.left ,Wrect.Top+2 ,ADOTable1Nombre2.AsString);
end
else
begin
  WRect.Left:= Rect.Left;
  WRect.Top := REct.Top + ((Rect.Bottom-Rect.Top) div 2);
  WRect.Bottom := Rect.Bottom;
  WRect.Right:= Rect.Right;
  DBGrid1.Canvas.Rectangle(WRect); // pinto un rectangulo para separar los dos nombres
  DBGRid1.Canvas.TextOut(Rect.LEft,Rect.Top+2,ADOTable1Concepto.AsString);
  DBGRid1.Canvas.TextOut( Rect.left ,Wrect.Top+2 ,ADOTable1Fecha.AsString);
  DBGRid1.Canvas.TextOut( Rect.left+ ((Rect.Right - Rect.Left) div 3)+50 ,Wrect.Top+2 ,ADOTable1CAntidadDEbe.AsString);
  DBGRid1.Canvas.TextOut( Rect.left+ (2*(Rect.Right - Rect.Left) div 3) +50,Wrect.Top +2,ADOTable1CantidadHaber.AsString);
end;

end;

end.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -

Última edición por fjcg02 fecha: 27-11-2007 a las 23:09:30. Razón: cambiar imagen
Responder Con Cita
  #6  
Antiguo 28-11-2007
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
Muchas Gracias chicos, voy a pegarle una mirada y les cuento como me va.

de verdad gracias por su tiempo.
Responder Con Cita
  #7  
Antiguo 28-11-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Ah, se me olvidaba una cosa. Lo que queda mal es cuando vas a editar un campo. Creo que no será difícil evitarlo con una ventana de edición de datos.

Por cierto, para calcular los cuadrados he utilizado la variable WRect, pero como ves podrías borrarla y utilizar un simple entero. En el ejemplo que te he puesto, en la segunda columna falta currarse las rayitas, etc.

Por otro lado, lo que no es posible ( al menos yo no lo sé ) es poner el título a dos filas.

Suerte y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 28-11-2007
smessina smessina is offline
Miembro
 
Registrado: ene 2006
Posts: 51
Poder: 19
smessina Va por buen camino
muchas gracias fjcg02 y lepe

La verdad que te agradesco muchisimo fjcg02 el tiempo que dedicaste a responderme estuve probando y efectivamente para editarlo me pasaba lo que dices pero ya vamos a solucionarlo de alguna manera.

voy a seguir viendo y vamos usar lo que me dijiste.

muchas gracias
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
Escribir en dbgrid, pero no guardar drykea Varios 10 02-08-2007 16:28:19
Como controlar los renglones de un dbGRID. Gangster Conexión con bases de datos 3 17-01-2007 22:28:05
select de campos de mismo registro pero no nulos Citlalli SQL 3 14-06-2006 02:37:27
Se puede mostrar Memo en Dbgrid pero sin campor persistentes? Alfredo OOP 0 23-01-2006 18:38:14
Pintar Renglones en DBGRID Enan0 SQL 2 15-02-2005 20:39:05


La franja horaria es GMT +2. Ahora son las 20:59:03.


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