Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como capturar el click en un componete TcxGrid Agrupado (https://www.clubdelphi.com/foros/showthread.php?t=76626)

NizamUlMUlk 29-05-2012 15:00:18

TcxPopupMenuInfos
 
Buen día, me pasa algo similar al problema que describiste.
El tema es que cuando uno hace click derecho sobre la grilla TcxGrid se dispara un popup construído por Developer Express (TcxGridPopupMenu) con opciones típicas como las de mostrar zona de Grupos, pies, alineación, mejorar el ancho de columnas, orden ascendente, descendente, selector de campos, etc.
Yo quiero que además de esos se muestre otros que le agrego como TcxPopupMenuInfo, por ejemplo un ítem de menú para expandir o contraer todo, que se active cuando se agrupa la información de la grilla por alguna columna.
En el TcxPopupMenuInfo le tildo gvhtExpandButton... Pero ese ítem de menú nunca aparece agregado a los estándares q trae el TcxGridPopupMenu. Cómo hacer q aparezca, que sea visible, y que realmente haga la tarea q debe hacer?.
Muchas gracias

Casimiro Notevi 29-05-2012 15:10:54

Bienvenido a clubdelphi, NizamUlMUlk, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

NizamUlMUlk 10-08-2013 01:50:37

Después de tanto tiempo veo este post... Nunca supe la respuesta...
 
Por lo que he leído, hay que trabajar como rinoceronte para hacer que funcione como uno espera.
Corríjanme si me equivoco...

Todo ocurre en el evento OnPopup del componente TcxGridPopupMenu. Allí el método ofrece una variable (AHitTest: TcxCustomGridHitTest) la cual hay que evaluar más o menos así:

if (AHitTest is TcxGridRecordCellHitTest) then //identifico un record
...
else if (AHitTest is TcxGridHeaderHitTest) then //identifico una cabecera de columna
...
else if (AHitTest is TcxGridGroupByBoxHitTest) then //identifico una columna de grupo
...
if ASenderMenu is TcxGridStdHeaderMenu then // identifico que el disparador es el built-in menu
..
//acá puedo agregarle ítems al menú por defecto de la forma:
TPopupMenu(ASenderMenu).Items.Add(NewItem('E&xpandir', TextToShortCut('Ctrl-X'), False,
True, Expandir, 0, 'pmCustomEntry'));
TPopupMenu(ASenderMenu).Items.Add(NewItem('E&xpandir', TextToShortCut('Ctrl-X'), False,
True, Contraer, 0, 'pmCustomEntry'));
..
donde los procedimientos Expandir y Contraer son
procedure TForm1.Expandir(Sender: TObject) ;
begin
<aGrid>.ActiveView.DataController.Groups.FullExpand;
end;

procedure Contraer(Sender: TObject);
begin
<aGrid>.ActiveView.DataController.Groups.FullCollapse;
end;

Entonces con AHitTest identifico en que zona se hizo el click, con lo cual puedo habilitar o deshabilitar popups.
ej:
menuExpandir.Enabled := (AHitTest is TcxGridGroupByBoxHitTest) and (not <aGrid>.ActiveView.Controller.FocusedRow.Expanded);
menuContraer.Enabled := (AHitTest is TcxGridGroupByBoxHitTest) and <aGrid>.ActiveView.Controller.FocusedRow.Expanded;

Pero, eso si, hay que tener popups independientes al menú built-in, porque éste solo se dispara en las cabeceras de columna.
Aunque se lo puede lanzar llamándolo desde el evento OnMouseDown del GridView.... haciendo que en su evento OnPopup se construya con los ítems que uno quiere, y habilitando/deshabilitando cada ítem de acuerdo a la info que recabe de AHitTest, y otros datos extra.... como en el ejemplo mostrado arriba

Entonces, en síntesis, no se puede hacer que sea automático, hay q laburar mucho... De hecho conviene hacer una clase que herede de TcxGridPopupMenu y dotarla de estos comportamientos para que se haga "automático" para los "descendientes"....
Q tul?

Casimiro Notevi 10-08-2013 01:59:52

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)


La franja horaria es GMT +2. Ahora son las 23:18:01.

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