Troca de tela automática

Boa noite. Alguém teria um exemplo de aplicação para que as telas desejadas fiquem trocando automaticamente, com um delay entre uma troca e outra? Se possível colocar um botão de desativar essas trocas para quando for mexer no viewer?

Bruno,

Não tenho aplicação exemplo mas não é difícil de fazer isso. Basta um Tag Contador, um Tag Interno e um script no Viewer. Tipo assim:

Sub TagContador1_OnPreset()
	set i = Parent.Item("TagInterno1")
	select case i.Value
	case 1
		Application.GetFrame("").OpenScreen("Tela1"), 0
	case 2
		Application.GetFrame("").OpenScreen("Tela2"), 0
	case 3
		Application.GetFrame("").OpenScreen("Tela3"), 0
		i.Value = 0
	end select
	i.Value = i.Value + 1
End Sub

Para desativar a rotina, basta atribuir o valor False à propriedade enabled do Tag Contador.

Você pode usar o evento OnInactive do Viewer para iniciar o Tag Contador. Mais detalhes no KB:

Bom dia. Vou tentar e posto aq. Obrigado

Boa tarde. Fiz a lógico porem sem sucesso.

Sub contTela_OnPreset()
''HABILITA TROCA DE TELAS AUTOMATICAS
set i = Parent.Item(“intTela”)
select case i.Value
case 1
Application.GetFrame("").OpenScreen(“TelaEventos”), 0
case 2
Application.GetFrame("").OpenScreen(“TelaGraficos”), 0
case 3
Application.GetFrame("").OpenScreen(“TelaSinotico1”), 0
i.Value = 0
end select
i.Value = i.Value + 1
End Sub
Quando executo comeca a contar o tempo e muda o tag interno para 1, porem continua a contar e não muda mais o tag interno, e nem muda a tela, mesmo mudando o tag interno para 1 e o tempo sendo presetado o qt determinei.

Talvez o mais simples seja usar apenas o tag contador.

screenchanger

Sub tagScreenChanger_OnPreset()
	Dim arr
	Dim i
	Dim objFrame
	
	' Frame onde as telas devem abrir.
	Set objFrame = Application.GetFrame("")
	
	' Array com telas a serem trocadas.
	arr = Array("TelaEventos", "TelaGraficos", "TelaSinotico1")

	' Retorna index da tela corrente aberta.
	i = GetCurrentScreenIndex( arr, objFrame.SplitLink )
	
	' Avanca para o proximo index
	i = i + 1
	
	' Caso seja a ultima tela, recomeca do inicio da array.
	If i > Ubound( arr ) Then
		i = LBound( arr )
	End If
	
	' Abre proxima tela no frame de interesse.
	objFrame.OpenScreen( arr( i ) ), 0
End Sub

Function GetCurrentScreenIndex( objArray, strScreen)
	Dim i
	For i = LBound( objArray ) To UBound( objArray )
		If objArray( i ) = strScreen Then
			GetCurrentScreenIndex = i
			Exit Function
		End If
	Next
End Function

Sub Foo()
End Sub
2 Likes

Bruno, não está dando nenhuma mensagem de erro?
O pathname das telas está correto?

Bom dia.
Nenhum erro, os nomes estao exatamente iguais conforme imagens.
image

image

Vou tentar dessa maneira e posto o resultado.
Obrigado.

Bruno,

Qual é o Preset do Tag Contador?

Se quiser pode me mandar a aplicação para o meu e-mail que eu dou uma olhada.

Bom dia, estou enviando a aplicação Ex que estou usando para fazer a troca de telas.
Obrigado.

Bruno, o problema é que você criou o script no servidor (pasta de dados). Os eventos que ocorrem no servidor não podem chamar comandos relacionados ao Viewer diretamente, como é o caso de abrir telas. Tem que criar tudo no objeto Viewer.

Tá aí um probleminha que enfrento. Crio na pasta servidor por que quando crio nos demais lugares, ex viewer, qd vou buscar no navegador do script não encontro as tags ou informações criadas. Já no servidor toda vez que busco está disponível. Como resolver isso? Desde já agradeço a atenção.

Bruno, o AppBrowser mostra os objetos da aplicação de acordo com o contexto. Ou seja, se você abrir o AppBrowser em um evento do servidor, o Viewer e as telas não irão aparecer.

Deu certo a aplicação de trocar telas, agora estou tentando fazer com elas abram no centro da tela, nao em tela cheia como esta abrindo.
Quanto a questão do appbrowser meu problema é assim:
Minha tag contador esta na tela x, estou escrevendo um script para quando o sistema ficar inativo (onInactive), habiliete a funcao enable da tag contador que esta na tela x, porem quando busco no app browser nao encontro a tag para adicionar la no script. Sei q estou fazendo algo errado, porem nao sei o que.

Bruno, também não é possível acessar os objetos de uma Tela a partir de outra.

De novo, o Tag Contador, bem como o Tag Interno e o script tem que ser criados no objeto Viewer.

Anota%C3%A7%C3%A3o%202020-06-19%20171721

Para não abrir em tela cheia, você deve especificar o frame de interesse conforme citei na minha resposta anterior.

' Frame onde as telas devem abrir.
Set objFrame = Application.GetFrame("NomeDoFrame")

Segue link para download de exemplo.

Entendi. Vou mudar o script.
Pessoal muito obrigado pela atenção de vcs. Estou começando agora com elipse e embora tenha feito o treinamento, tenho muitas dificuldade em enteder o software já que nunca tinha mexido, e sou acostumado com outros tipos de programa e linguagem. Obrigado mesmo

1 Like

Boa tarde.
So passando para avisar que deu certo os scripts de troca de tela, inclusive para que troque a tela apenas quando ficar um periodo de tempo inativo.
Obrigado pela atenção de todos.

1 Like

Boa tarde pessoal.

Surgiu uma duvida a respeito do mesmo assunto.

Qual opção me diz se foi ativo ou nao a inatividade por um periodo de tempo.

Ex: Eu estou ativando um contador quando fik por 10 minutos em inatividade, porem gostaria que quando voltasse em atividade automaticamente desativasse, e no caso, precisei criar um botão para ele desativar, pois nao encontrei a opção para desativar a funcao.

Eu fiz isso em aplicação:

Criei um script no Viewer que guardava em tags internas os valores dos ponteiros X e Y e comparava, se os valores fossem iguais, eu disparava o tag timmer, se o valor fosse diferente, eu zerava o tag timmer.

Coloquei o script pra rodar a cada 5s, o tag timmer coloquei pra 9min55s