Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Columnas del DBGrid

Bien, supongo que esto tambien se aplicaría a un simple Grid.

Si bien puedo ordenar los datos mostrados en un DBGrid al hacer clic sobre el nombre de la columna, Uds. sabrán que en la mayoría de estos componentes (como en el Explorardor de Archivos, en el WinZip, etc) se muestra con una pequeña flecha el sentido de orden [Des/Ascendente]. La pregunta es:

¿Cómo se puede mostrar esta flecha o gráffico similar en el título de la columna de un DBGrid en que el usuario hace el clic?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #2  
Antiguo 13-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
en mi web tienes una demo del RxDBGrid (DbGrid de las RX) que muestra precisamente eso
Responder Con Cita
  #3  
Antiguo 13-08-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Cita:
Posteado originalmente por cadetill
en mi web tienes una demo del RxDBGrid (DbGrid de las RX) que muestra precisamente eso
Gracias CADE... siempre tan atento.
De todas formas, lo interesante sería tratar de hacer SIN librerías externas. Eso es lo que busco. Tal vez alguien sepa cómo hacerlo; de hecho alguine una vez me ha comentado que con alguna metodología del Canvas era posible, pero no logro desculalrlo.
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #4  
Antiguo 20-11-2004
le4br le4br is offline
Miembro
 
Registrado: nov 2004
Posts: 17
Poder: 0
le4br Va por buen camino
Cita:
Empezado por hgiacobone
...Tal vez alguien sepa cómo hacerlo; de hecho alguine una vez me ha comentado que con alguna metodología del Canvas era posible, pero no logro desculalrlo.
hgiacobone, ya sabes como hacer para mostrar una imagem en el titulo de la columna?

Mi gustaria saber como mostrar una pequeña flecha en el título de la columna de un DBGrid para indicar el sentido de orden (Des/Asc), pero SIN librerías externas, tambien.
Responder Con Cita
  #5  
Antiguo 23-11-2004
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
No... nadie me ha ayudado.
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #6  
Antiguo 25-11-2004
le4br le4br is offline
Miembro
 
Registrado: nov 2004
Posts: 17
Poder: 0
le4br Va por buen camino
Solucion encontrada!

Hola amigos,

Yo no desisto nunca y como en Delphi nadia es impossible, aqui hay una solucion que ordena los datos de la tabla, atraves del metodo Sort, y agrega una imagem bmp, en el titulo de la columna del DBGrid, que indicaran la ordem de los registros (ASC / DESC).

El codigo es de Luiz Fernando Severnini y adaptado por mim.

- Vamos utilizar um TImageList (Win32 Component Palette). Doble clique en el ImageList1 para añadir las imagens bmp (Puedes crear las imagens en Paint del Windows o obtener en la carpeta de imagens en el diretorio Borland Shared). Seta arriba indica la ordem DESC y seta abajo ASC.

Ahora devemos añadir la declaracion TDBGrid = class(DBGrids.TDBGrid) en la linea seguinte al type:

Código:
type
    TDBGrid = class(DBGrids.TDBGrid);
    TForm1 = class(TForm)
  	.
  	.
  	.
Declaramos Indice como variable global

Código:
var
    Form1: TForm1;
  	.
  	.
  	.
   // Adquiri la columna clicada, para mostrar la imagem.
    Indice: Integer;

En el evento OnTitleClick do DBGrid:

Código:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
  begin
  // Ordena los datos ASC o DESC
  if DBGrid1.DataSource.DataSet is TCustomADODataSet then
  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  if (Pos(Column.FieldName, Sort) = 1) and (Pos(' ASC', Sort)= 0) then
  begin
  // Sort specifies the sort order of the recordset.
  Sort := Column.FieldName + ' ASC'; 
  end
  else
  begin
  Sort := Column.FieldName + ' DESC';
  end;
 Indice := Column.Index; { Returns the item’s position in the Items array of TCollection. Atribue la columna clicada a variable global}
  end;
Ahora en el evento OnDrawColumnCell del DBGrid1:

Código:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
    Bmp : TBitMap;  //  variable del tipo TBitMap que recibi la figura de lo ImageList1
  
    // Funcion local al evento OnDrawColumnCell, para obtener la anchura de las columnas:
   function GetColsWidth: Integer;
    var
  	I : Integer;
    begin
  	Result := 0;
  	for I := 0 to Column.Index do
  	begin
  	  Result := Result + TDBGrid(Sender).Columns.Items[i].Width;
  	end;
  	Result := Result + 10 + (Column.Index);
   end;
  
  begin
    // Hacemos el acesso a los membros protegidos de la classe TDBGrid
    with TDBGrid(Sender) do
    begin
  	// Determina la columna clicada...
  	if Column.Index = Indice then
  	begin
  	  // ...Creamos la variable Bmp
  	  Bmp := TBitMap.Create;
  
  	  with Bmp do   // Configuracion de color transparente
  	  begin
  		TransparentColor := clWhite;
  		Transparent := True;
  		TransparentMode := tmAuto
  	  end;
  
  	  try
  // Determina la imagem mostrada de acuerdo com la ordem de los registros
    if DBGrid1.DataSource.DataSet is TCustomADODataSet then
    with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
  	 if (Pos(Column.FieldName, Sort) = 1) and (Pos(' ASC', Sort)= 0) then
  		  ImageList1.GetBitmap(0, Bmp)  // Seta abajo
  		else
  		  ImageList1.GetBitmap(1, Bmp); // Seta arriba
  
  		  // Determina se la altura del titulo es suficiente para recibir la imagem
  		if RowHeights[0] < Bmp.Height+4 then
  		RowHeights[0] := Bmp.Height+4;
  
  		// Muestra la imagem el titulo de acuerdo com la posição
  		Canvas.Draw((GetColsWidth-Bmp.Width),(RowHeights[0] - Bmp.Height) div 2, Bmp);
  	  finally  
  	 Bmp.Free;  // Liberamos la variable Bmp de la memoria
  	  end;
  	end
  
  	else
  
  	  // Si no es la columna clicada, entonces nadia acontece...
     DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
  end;
Que tal?
Gracias a todos y perdon por el español.

Saludos!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 00:46:16.


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