Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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
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.
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.
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.
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.