KB-43080: Criando os botões Voltar e Avançar no Elipse E3 para navegar entre telas.

Descrição:

Como posso criar os botões Voltar e Avançar no Elipse E3, a fim de que funcionem de modo análogo aos botões dos navegadores de internet?

Solução:

A partir da versão 5.5 do Elipse E3, foram criados no objeto Divisor (FrameSet) os métodos NavigateBack, NavigateForward e NavigateHistReset; ao mesmo tempo, foram criadas também as propriedades NavigateHistCount, NavigateCanGoBack e NavigateCanGoForward. Sendo assim, é possível implementar o conceito de navegação entre telas, através do histórico de telas abertas num Divisor.

Versões anteriores à 5.5

Primeiramente, vamos analisar como funcionam os botões de navegação (Avançar e Voltar) em um navegador e como eles se aplicam ao Elipse E3. Ao visitar diferentes sites, o navegador armazena o histórico de navegação desses sites. Então, ao clicar no botão Voltar, ele volta para o registro mais recente desse histórico; como resultado, clicando novamente em Voltar, ele volta ainda mais um registro.

Toda vez que o botão Voltar for clicado, ele em contrapartida habilitará automaticamente o botão Avançar. Quando você troca de site, digitando o endereço na parte superior ou clicando em algum link, o botão Avançar é portanto desabilitado, o que lhe permite apenas voltar para endereços anteriores.

Como implementar os botões Avançar e Voltar no E3?

  1. Com tags auxiliares, no objeto Viewer, que participarão da lógica.
  2. Com botões Abrir Tela
  3. Com botões Avançar e Voltar
A ideia principal é armazenar o histórico das telas em uma matriz, ou seja, os seus índices serão os nomes das telas abertas. Os botões Avançar e Voltar acessam esses índices, fazendo o devido incremento/decremento, e portanto abrem a tela respectiva ao índice escolhido. Os botões que abrem a tela diretamente farão a atualização dos tags auxiliares:
  • Tag Aux1 – Carrega o número de telas no histórico
  • Tag Aux2 – Carrega o índice atual da tela aberta
  • Tag Matriz – Carrega o histórico das telas abertas
  • Tag VoltarEnable – Booleano que habilita/desabilita o botão Voltar
  • Tag AvancarEnable – Booleano que habilita/desabilita o botão Avançar
No entanto, esta lógica de navegação faz sentido apenas em aplicações com uma tela de navegação fixa na aplicação. No objeto Viewer, há um script no evento OnStartRunning que inicializa a matriz, armazenando a primeira tela aberta no índice 0, ou seja, a tela principal.
Dim Matriz(1)
Matriz(0) ="NomeTela"
Item("Matriz").Value = Matriz

Iniciando a aplicação

Ao iniciar a aplicação, os botões Avançar e Voltar estão desabilitados, uma vez que ainda não existe um histórico de telas abertas.

O botão Avançar tem a seguinte lógica:

if Application.Item("Aux2").Value < Application.Item("Aux1").Value then
  Matriz = Application.Item("Matriz").Value
  n2 = cint(Application.Item("Aux2").Value+1)
  Application.Item("Aux2").Value = n2
  Application.GetFrame("Nome_do_Divisor ").OpenScreen(Matriz(n2)), 0
  Application.Item("VoltarEnable").Value = True
else
  Enabled = False
end if
Em primeiro lugar, é feito um teste para descobrir se o índice Aux2 (o índice atual) é igual o Aux1 (número de telas no histórico). Se for igual, o botão Avançar é desabilitado; se for menor, incrementa-se o índice de Aux2, e a tela desse índice incrementado é aberta; será habilitado então o botão Voltar.
Por outro lado, o botão Voltar tem a seguinte lógica:
if Application.Item("Aux1").Value = 0 then
  Enabled = False
elseif Application.Item("Aux2").Value = 0 then
  Enabled = False
else
  Matriz = Application.Item("Matriz").Value
  n2 = cint(Application.Item("Aux2").Value-1)
  Application.Item("Aux2").Value = n2
  Application.GetFrame("Nome_do_Divisor ").OpenScreen(Matriz(n2)), 0
  Application.Item("AvancarEnable").Value = True
end if
Primeiramente, é feito um teste para descobrir se o índice Aux1 é 0 (ou seja, se não existem registros no histórico); logo após, será feito um outro teste para descobrir se o índice Aux2 é 0 (ou seja, já se chegou no registro mais antigo do histórico). Caso ao menos uma destas condições esteja satisfeita, o botão Voltar é então desabilitado. Caso contrário, decrementa-se o índice da tela atual (Aux2), e abre-se a tela relativa a esse índice; o botão Avançar é então habilitado.
A fim de iniciar o histórico das telas, é necessário clicar nos botões que abrem as telas diretamente; seu script é:
Sub CommandButton5_Click()
n = Application.Item("Aux2").Value
n2 = Cint(n+1)
Matriz = Application.Item("Matriz").Value
Redim Preserve Matriz(n2)
Matriz(n2) = NomeTela
Application.Item("Aux1").Value = Application.Item("Aux2").Value+1
Application.Item("Matriz").Value = Matriz
Application.Item("Aux2").Value = Application.Item("Aux1").Value
Application.GetFrame("Nome_do_Divisor").OpenScreen(NomeTela), 0           
Application.Item("VoltarEnable").Value = True
Application.Item("AvancarEnable").Value = False
End Sub

Portanto, este script incrementa o índice atual da tela aberta; ao índice adicionado, insere-se então o nome da tela que será aberta nesse momento. Quando uma tela nova é inserida no histórico, o valor que Aux1 deve assumir será o índice da tela aberta no momento, mais 1.

Logo então, crie um evento OnValueChanged nos tags Aux1 e Aux2, e insira em Aux1 o seguinte script:

Parent.Item("AvancarEnable").Value = False    

Esse script faz com que o botão Avançar seja desabilitado toda vez que o valor do Aux1 mudar.

Afinal, no evento OnValueChanged do tag Aux2, insira:

if Value=0 then
  Parent.Item("VoltarEnable").Value = False
  elseif Value = Parent.Item("Aux1").Value then
  Parent.Item("AvancarEnable").Value = False
end if

Se o valor de Aux2 for 0, ou seja, se ele chegou ao último índice do histórico, o botão Voltar é desabilitado. Similarmente e o valor de Aux2 foi igual ao de Aux1, é desabilitado o botão Avançar.

Logo após, associe a propriedade Enable dos botões Avançar e Voltar aos tags VoltarEnable e AvancarEnable, respectivamente.

 

Exemplo:

Primeiramente, abra quatro telas diretamente com o botão Abrir Tela. No histórico, aparecerão cinco telas (as quatro que foram abertas, mais a tela inicial). Neste caso, o botão Avançar fica desabilitado, pois ao abrir uma tela, Aux2 fica igual a Aux1 depois de incrementado.

Logo então, aperte duas vezes o botão Voltar. Neste caso, o índice Aux2 será 3, enquanto o índice Aux1 permanecerá 5. Neste caso, o botão Avançar estará desabilitado.

Depois acesse a tela com índice 3, e abra outra tela diretamente pelo botão. O índice Aux1 será 4 (e não mais 5), bem como o índice Aux2. Neste índice (4), será colocado o nome da tela a ser aberta; o botão Avançar será desabilitado.

Isto significa que ao abrir uma tela diretamente, após o botão Voltar ter sido utilizado, o histórico de telas com índice superior ao atual é removido (no exemplo, foram removidas as telas de índice 4 e 5, e uma nova tela foi inserida neste índice); isso faz com que o botão Avançar seja desabilitado, o que segue o modelo dos navegadores de internet.

Observação: Anexo a este artigo, há uma aplicação exemplo.

Anexos:

Exemplo.zip

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Comentários em “KB-43080: Criando os botões Voltar e Avançar no Elipse E3 para navegar entre telas.

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *