Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 05-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 19
rgstuamigo Va por buen camino
Arrow

Bueno... voy a tratar de ayudarte un poco:
Para hacer lo que pretendes hay que utilizar un Componente PopupMenu al que le vamos a cargar los item en tiempo de ejecucion.

Bueno... manos a la Obra
Para cargar los item al PopupMenu en Tiempo de Ejecucion es necesario que el DataSet(ZQuery o ZTable al que está conecatado el DBGrid) esté Abierto o Activo, Por ello vamos a utilizar el evento AfterOpen (Despues de Abrir ) de ese dataset y poner el siguiente Código:
Código Delphi [-]
procedure TForm1.ZTable1AfterOpen(DataSet: TDataSet);
var i:Integer;
aux_item:TMenuItem;
begin
  for  i:=0  to DataSet.Fields.Count-1  do
  begin
    aux_item:=TMenuItem.Create(PopupMenu1);// creo un item por cada Iteracion
    aux_item.Caption:=DataSet.Fields[i].DisplayLabel; // pongo como caption el nombre de la columna o campo correspondiente
    aux_item.Checked:=True;// hago que éste chequeado
    aux_item.AutoCheck:=True;// hago que el chequeado sea automatico
    aux_item.Tag:=i;// le pongo como tag la posicion de la columna correspondiente ( es un buen truco para saber a que columna va a afectar)
   PopupMenu1.Items.Add(aux_item);// lo adiciono al PopupMenu
  end;
end;
Para Conseguir ocultar o visualizar la columna Específica del DBGrid tenemos que crearnos un procedimiento(En realidad un manejador de Evento para cada evento OnClick de cada Item del PopupMenu), en nuestro caso es sufiente crearnos un solo procedure de la siguiente forma >
Código Delphi [-]
...
...
  private
    { Private declarations }
    Procedure AlHacerClick(Sender: TObject);// <---------Mi Manejador de evento
...
...
implementation

{$R *.dfm}
...
...
procedure TForm1.AlHacerClick(Sender: TObject);
begin
   with (Sender as TMenuItem)do
   begin
      DBGrid1.Columns[Tag].Visible:=Checked;// Hago Visible o No visible la columna Específica segun el Checked del Item Clickeado
   end;
end;
Ahora nos toca Asignar el evento OnClick a cada Item, lo que podemos hacer es agregar una linea de código al evento AfterOpen (Que anteriormente hemos utilizado)del dataset al que está enganchado el DBGrid quedando dicho evento finalmente de la siguiente forma:
Código Delphi [-]
procedure TForm1.ZTable1AfterOpen(DataSet: TDataSet);
var i:Integer;
aux_item:TMenuItem;
begin
  for  i:=0  to DataSet.Fields.Count-1  do
  begin
    aux_item:=TMenuItem.Create(PopupMenu1);// creo un item por cada Iteracion
    aux_item.Caption:=DataSet.Fields[i].DisplayLabel; // pongo como caption el nombre de la columna o campo correspondiente
    aux_item.Checked:=True;// hago que éste chequeado
    aux_item.AutoCheck:=True;// hago que el chequeado sea automatico
    aux_item.Tag:=i;// le pongo como tag la posicion de la columna correspondiente ( es un buen truco para saber a que columna va a afectar )
   PopupMenu1.Items.Add(aux_item);// lo adiciono al PopupMenu

{La linea siguiente ha sido aumentada}
    aux_item.OnClick:=AlHacerClick;//Asigno el evento OnClick a cada Item del PopupMenu
  end;
end;

Para Mostrar el PoPupMenu cuando el usuario haga Doble Click en la columna del DBGrid , pues para serte franco yo mejor usaría para eso el Evento OnTitleClick ( Al hacer un Clik en el Titulo) del DBGrid, ya que tendriamos que complicarno un poco el controlar que el usuario dé dos click y no uno , por eso sugiero usar el evento OnTitleClick anteriomente mencionado para no complicarnos demasiado.
Bueno..., para mostrar el PopupMenu al hacer click en cualquier columna ( click en cualquier título de columna) podemos poner el siguiente código en el evento OnTitleClick del DBGrid:
Código Delphi [-]
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
 PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);//Muestro Los Item del PopupMenu en la posicion del Mouse
end;
Y eso es todo amigo....
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 05-01-2011 a las 22:07:01.
Responder Con Cita
 


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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Seleccionar multiples columnas en TDbGrid Leandro Ferrara OOP 1 01-11-2008 23:02:29
sumar columnas en un dbgrid y mostrar mas campos VNyes Firebird e Interbase 5 01-06-2007 19:32:10
Seleccionar columnas en TMemo ixMike OOP 8 11-09-2006 18:53:31
¿como seleccionar columnas, StringGrid? TURING Varios 3 25-11-2005 21:15:54
Seleccionar una linea de un dbgrid y mostrar todos los datos... hook Varios 1 15-04-2005 13:38:49


La franja horaria es GMT +2. Ahora son las 09:36:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi