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?
- Com tags auxiliares, no objeto Viewer, que participarão da lógica.
- Com botões Abrir Tela
- Com botões Avançar e Voltar
- 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
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
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
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.
muito bom artiga enrriquecido de conecimentos e macetes que abre a mente e trz progreesso no conecimento obrigado..