Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas tardes,
estoy trabajando en un proyecto en el que en una hoja va a estar llena de botones que permiten mostrar/ocultar gráficas. Cada botón muestra/oculta 1 gráfica máximo.
Mi duda es si hay alguna forma de limitar el número máximo de gráficas abierto, es decir, que en el momento que haya 2 gráficas abiertas, en el caso de pulsar para abrir una 3º gráfica ocultase las anteriores (una o las dos que haya abiertas).
Gracias
Hola Carlos:
Se me ocurre que sería posible controlar con una variable de cadena los objetos que se están visualizando al estilo "1;2;6;" y utilizar para la condición de visualización de todos los objetos, que su identificador esté incluido en esa cadena. Por ejemplo, si utilizamos la variable "Visible" para almacenar los objetos mostrados y el identificador de un objeto como un entero "6". La condición de visualización quedaría así:
=index(Visible,6)
Para poder manipular la variable de objetos visibles es necesario una macro que añada el nuevo objeto a la cadena y elimine alguno de ella si hay demasiados visualizados, por ejemplo el más antiguo, simulando una cola FIFO. Esta macro se llamaría desde cada botón que visualice un objeto utilizando la variable ObjetoActual a modo de parámetro ya que Qlik no permite llamadas a macros con parámetros desde las acciones de un botón.
sub VisualizaObjeto
strObjetoActual=ActiveDocument.Variables("ObjetoActual").GetContent.String
strVisible = ActiveDocument.Variables("Visible").GetContent.String
'Si el objeto actual ya es visible, no hacer nada
if instr(strVisible,strObjetoActual) then exit sub
'Contar los objetos visualizados en la cadena Visible
numeroObjetos = 0
for i=1 to len(strVisible)
if mid(strVisible,i,1)=SEPARADOR then
numeroObjetos = numeroObjetos +1
end if
next
if numeroObjetos >= MAXVISUALIZABLES then
'Quitar el primero, el más antiguo
strVisible = mid(strVisible,instr(strVisible,SEPARADOR)+1)
end if
'Añadir el nuevo objeto
strVisible = strVisible & StrObjetoActual & SEPARADOR
ActiveDocument.Variables("Visible").setcontent strVisible, true
end sub
Te adjunto un documento de ejemplo.
Espero que te sea útil.
Un saludo
Hola Carlos:
Dos opciones:
a) Contendor, es un objeto que agrupa varios objetos, puedes dejar activo uno o ponerlo en modo rejilla y los ves todos más pequeñitos
b) Minimizar de Forma automática, seleccionas esta opción en todos los objectos afectados y cuando selecciones uno miminizará el resto ... solo puedes tener uno activo
Saludos
Joaquín
Hola Joaquín,
El caso del contenedor no me ayuda porque no me limita que haya más gráficas abiertas, es decir, yo lo que quiero es que no me permita tener más de 2 gráficas abiertas y en el caso que quisiera abrir una 3º gráfica, minimizara 1 o los 2 gráficos que ya hay abiertos.
Y en el caso de minimizar de forma automática es buen recurso pero no me sirve solo tener uno activo, ya que tengo que tener máximo dos y es arbitrario ya que no siempre son los mismos.
Gracias
Hola Carlos:
Se me ocurre que sería posible controlar con una variable de cadena los objetos que se están visualizando al estilo "1;2;6;" y utilizar para la condición de visualización de todos los objetos, que su identificador esté incluido en esa cadena. Por ejemplo, si utilizamos la variable "Visible" para almacenar los objetos mostrados y el identificador de un objeto como un entero "6". La condición de visualización quedaría así:
=index(Visible,6)
Para poder manipular la variable de objetos visibles es necesario una macro que añada el nuevo objeto a la cadena y elimine alguno de ella si hay demasiados visualizados, por ejemplo el más antiguo, simulando una cola FIFO. Esta macro se llamaría desde cada botón que visualice un objeto utilizando la variable ObjetoActual a modo de parámetro ya que Qlik no permite llamadas a macros con parámetros desde las acciones de un botón.
sub VisualizaObjeto
strObjetoActual=ActiveDocument.Variables("ObjetoActual").GetContent.String
strVisible = ActiveDocument.Variables("Visible").GetContent.String
'Si el objeto actual ya es visible, no hacer nada
if instr(strVisible,strObjetoActual) then exit sub
'Contar los objetos visualizados en la cadena Visible
numeroObjetos = 0
for i=1 to len(strVisible)
if mid(strVisible,i,1)=SEPARADOR then
numeroObjetos = numeroObjetos +1
end if
next
if numeroObjetos >= MAXVISUALIZABLES then
'Quitar el primero, el más antiguo
strVisible = mid(strVisible,instr(strVisible,SEPARADOR)+1)
end if
'Añadir el nuevo objeto
strVisible = strVisible & StrObjetoActual & SEPARADOR
ActiveDocument.Variables("Visible").setcontent strVisible, true
end sub
Te adjunto un documento de ejemplo.
Espero que te sea útil.
Un saludo