5 Replies Latest reply: Oct 15, 2009 5:38 PM by Claudio Rinnert RSS

    Função para retornar o obejto selecionado

    fabio cabral

      ola, alguem sabe se é existe alguma função que retorne o objeto selecionado.
      gostaria de fazer com que um filtro so apareça quando um determinado grafico seja selecionado.

      estou com a versao 8.50

       

        • Função para retornar o obejto selecionado

          Olá,

          Não sei como verificar o objeto selecionado, mas podemos resolver seu problema através de duas macros e uma variável.

          Crie essa macros no módulo (CTRL+M)

          sub AtivaObjeto
          set f = ActiveDocument.GetVariable("vMostraCampo")
          f.SetContent "1", true
          end sub

           

          sub DesativaObjeto
          set f = ActiveDocument.GetVariable("vMostraCampo")
          f.SetContent "0", true
          end sub

          Crie a variável vMostraCampo.

          Acesse as propriedades da pasta e vá na aba Macro
          Selecione o objeto que ao ser selecionado deve exibir um determinado campo.
          Ao Lado da caixa tem dois combos, no Ao Ativar escolha a macro AtivaObjeto e no Ao Desativar escolha a macro DesativaObjeto.

          Agora acesse a propriedade do objeto que deverá ser ocultado e vá na aba Layout e na opção Mostrar Condicional e coloque a variável vMostraCampo.

          Espero ter lhe ajudado.

          Abraços.

          Tonial

           

           



            • Função para retornar o obejto selecionado
              guilhermeoliveira

              Tonial.

              Se ele fizer assim a principio funciona, mas quando a caixa com o filtro aparecer e ele for selecionar alguma coisa ela vai desaparecer, pois ele vai desativar o gráfico mudando o valor da variável.

              Fiz algumas alterações na macro que você passou.

              SUB AtivaObjeto
              SET f = ActiveDocument.GetVariable("vMostraCampo")
              SET C=ActiveDocument.GetSheetObject("CH84")
              IF C.IsActive THEN
              f.SetContent "1", TRUE
              ELSE
              IF C.IsMinimized THEN
              f.SetContent "0", TRUE
              END IF
              END IF
              END SUB

              com essa macro acesse as propriedades da pasta e vá na aba Macro

              Selecione o objeto que ao ser selecionado deve exibir um determinado campo.
              Ao Lado da caixa tem dois combos, no Ao Ativar escolha a macro AtivaObjeto e no Ao Desativar escolha a macro AtivaObjeto.

              Agora acesse a propriedade do objeto que deverá ser ocultado e vá na aba Layout e na opção Mostrar Condicional e coloque a variável vMostraCampo.

              Eu fiz essa macro pensando em um gráfico que esta minimizado, assim quando você clicar apenas 1 vez no gráfico o objeto com os filtros aparecerá mas o gráfico continuará minimizado, clique 2 vezes para maximizar o gráfico.

              Quando ele estiver maximizado você pode clicar em qualquer lugar que o objeto com os filtros não vai sumir.

              Quando o gráfico for minimizado e você clicar em outro lugar o objeto com os filtros ficará oculto.

              Se o gráfico for somente minimizado e você não clicar em nenhum lugar o objeto com os filtros ficará visível.

              Assim como o Tonial espero ter ajudado.

               

               

                • Função para retornar o obejto selecionado
                  Claudio Rinnert

                  Bom dia, jovens.

                  Penso que o que se deseja é tão simplesmente abrir um gráfico acompanhado de um list box ou seleção múltipla para filtros, e fechar esse objeto de filtro quando o gráfico for minimizado.

                  O inconveniente é que você só pode tratar os eventos de ativação e desativação de um objeto. Em outras palavras, se o usuário clicar no objeto minimizado uma única vez, ele será ativado, disparando a macro, mas seu status continuará IsMinimized. Se após isso ele der um duplo-clique no objeto já ativo, não ocorrerá nem o evento de ativação, nem o de desativação, não disparando a macro.

                  Penso que o melhor seja colocar sobre o gráfico minimizado um botão transparente associado a macro que restaurará o gráfico e mostrará o objeto de seleção. Da mesma forma, coloque outro botão transparente sobre o ícone de minimização do gráfico, e associe este a macro de desativação dos objetos.

                  O efeito será o desejado, e a apresentação (visual) dará ao usuário a sensação de estar operando a aplicação da forma tradicional do QlikView.

                  Exemplo:

                  SUB AtivaObjetos
                  ActiveDocument.GetSheetObject("CH01").Restore
                  SET f=ActiveDocument.GetSheetObject("LB01")
                  set prop = f.GetProperties
                  prop.Layout.Frame.Show.Always = true
                  f.SetProperties prop
                  END SUB

                  SUB DesativaObjetos
                  ActiveDocument.GetSheetObject("CH01").Minimize
                  SET f=ActiveDocument.GetSheetObject("LB01")
                  set prop = f.GetProperties
                  prop.Layout.Frame.Show.Always = false
                  prop.Layout.Frame.Show.Expression.v = "1=0"
                  f.SetProperties prop
                  END SUB

                  Bom trabalho, e um grande abraço a todos.

                    • Função para retornar o obejto selecionado
                      guilhermeoliveira

                      Bom dia Cláudio, tudo bem ?

                      A princípio eu havia pensado desta maneira (e já fiz em um cliente), mas e se existir outro gráfico minimizado e ele clicar diretamente no outro gráfico (Minimização Automática Ativada)?
                      O gráfico com o botão será minimizado mas o filtro continuará aparecendo e o botão ficará na mesma posição até que ele seja pressionado.

                      Eu testei as macros que você postou.

                      Por isso fiz da maneira acima, assim quando o outro gráfico for aberto ele minimizará o outro e executará a macro novamente ocultando o filtro.

                      O que fiz em um cliente foi criar um botão com a imagem do gráfico minimizado, quando ele clicava no botão exibia o gráfico com as variáveis para alteração de metas, quando o gráfico era exibido o botão continuava na tela mas agora aparecia escrito "Ocultar Gráfico de Metas" e quando ele clicava o gráfico e as variáveis ficavam ocultos.

                      Então tudo depende do ambiente, e nós não sabemos exatamente qual é este ambiente para passarmos a melhor solução.

                        • Função para retornar o obejto selecionado
                          Claudio Rinnert

                          Guilherme, o problema é que o usuário não tem a obrigação de usar a aplicação da forma que ela está preparada para funcionar. Ou seja, se deixares o controle de forma automática (minimização automática) não podes querer controlar objetos assessórios, como os de seleção específica prum gráfico, no exemplo do Cabral. O usuário sempre poderá causar (e podes ter certeza que causará..) situações indesejadas como a que eu citei, e que escapa totalmente do controle dos disparadores de macros.

                          Sempre que precisares dar uma mecânica complexa, como objetos aparecendo/sumindo simultaneamente, ou coisas assim, utilize botões para controlá-los.

                          Em outras palavras, se houverem outros objetos mutuamente exclusivos ao gráfico em questão, faça o mesmo (botões transparentes sobre os ícones) e não utilize a propriedade de minimização automática em nenhum (nenhum mesmo...) objeto da pasta. Controle "manualmente" a mecânica de abrir/fechar objetos. Fica mais "na mão". Caso contrário sempre haverá uma ou outra situação indesejada na operação da aplicação.

                          Lembre-se, não há eventos (ao menos na 8.50) disparadores de macros para objeto sendo minimizado, ou restaurado, ou maximizado, apenas para ativado e desativado, e estes eventos (ativação/desativação) dizem respeito ao "foco" no objeto, inclusive você pode ter mais de um objeto ativo simultaneamente (pressionando shift+clique do mouse).

                          Minimização automática é sempre interessante quando num conjunto de objetos apenas um deve estar aberto. Se houver situações de simultaneidade, ou vários objetos trabalhando como um só, na 8.50 é melhor controlar por botões.

                          Até pode ser interessante fazer um tipo de menu hierárquico pra controlar essa mecânica, mas aí é melhor analisar caso-a-caso. Para cada problema, uma solução. Generalidades funcionam bem com situações padrão. Fugiu do padrão, solução caso-a-caso.

                          Abraços.