Código: Selecionar todos
//
// Janela com botoes de opcao
// Alternativa a funcao ALERT()
//
// Funcao:
// Janela_Opcao(cTitulo, aMensagem, aOpcoes)
//
// Parametros:
// cTitulo String
// aMensagem Array de String (cada item, uma linha)
// aOpcoes Botoes (prompt)
//
//
#include "box.ch"
#command COR TELA => SETCOLOR("W+/B*")
#command COR SAIDA => SETCOLOR("W/N")
FUNCTION Main()
SETMODE(25,80)
COR TELA
CLS
ReguaH(0)
// -------------------------------------------------------------------------
cTela := SAVESCREEN(0,0,MAXROW(),MAXCOL())
cTitulo := "Tipo de Usuario"
aMensagem := {"Novo usuario:", ;
"Qual o tipo de usuario?"}
aOpcoes := {"Administrador","Operador","Suporte*"}
nRetorno := Janela_Opcao(cTitulo, aMensagem, aOpcoes)
@ MaxRow(), 02 SAY nRetorno
inkey(0)
RESTSCREEN(0,0,MAXROW(),MAXCOL(),cTela)
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
cTela := SAVESCREEN(0,0,MAXROW(),MAXCOL())
// Tamanho do Titulo maior que a maior linha do array de mensagem ...
cTitulo := "Sobre a Empresa Desenvolvedora do Sistema BLA BLA BLA"
aMensagem := {"Empresa Desenvolvedora do Sistema", ;
"Versao 1.0", ;
"Registrado para:", ;
"Empresa Cliente Ltda", ;
"12.123.123/0001-99", ;
"Status: Ativo"}
nRetorno := Janela_Opcao(cTitulo, aMensagem,)
@ MaxRow(), 02 SAY nRetorno
inkey(0)
RESTSCREEN(0,0,MAXROW(),MAXCOL(),cTela)
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
cTela := SAVESCREEN(0,0,MAXROW(),MAXCOL())
cTitulo := "Copia de Seguranca"
aMensagem := {"Deseja criar a copia de seguranca, compactando a base de dados agora?"}
aOpcoes := {"Sim","Nao"}
nRetorno := Janela_Opcao(cTitulo, aMensagem, aOpcoes)
@ MaxRow(), 02 SAY nRetorno
inkey(0)
RESTSCREEN(0,0,MAXROW(),MAXCOL(),cTela)
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
cTela := SAVESCREEN(0,0,MAXROW(),MAXCOL())
cTitulo := "Sair do Sistema"
aMensagem := {"Deseja realmente sair do Sistema?"}
aOpcoes := {"Sim","Nao"}
nRetorno := Janela_Opcao(cTitulo, aMensagem, aOpcoes)
@ MaxRow(), 02 SAY nRetorno
inkey(0)
RESTSCREEN(0,0,MAXROW(),MAXCOL(),cTela)
// -------------------------------------------------------------------------
RETURN Nil
FUNCTION ReguaH(nLinha)
@ nLinha , 0 SAY REPLICATE("1234567890",8)
@ nLinha+1, 0 SAY REPLICATE(SPACE(9)+"|",8)
RETURN Nil
FUNCTION Janela_Opcao(cTitulo, aMensagem, aOpcoes)
LOCAL cCor := SETCOLOR()
LOCAL cTela, nTopo, nEsquerda, nBase, nDireita, nBarra, nEscolha
LOCAL nTamRow, nTamCol, nTamMsg, nTamItem, nTamTodasAsOpcoes
LOCAL x, w, y
aOpcoes := iif( aOpcoes == Nil, {"OK"}, aOpcoes)
nTamRow := MAXROW()
nTamCol := MAXCOL()
nTamMsg := LEN(aMensagem)
nTamItem := 0
nTamTodasAsOpcoes := 0
FOR x := 1 TO nTamMsg
nTamItem := iif(LEN(aMensagem[x]) >= nTamItem, LEN(aMensagem[x]), nTamItem)
NEXT
FOR w := 1 TO LEN(aOpcoes)
nTamTodasAsOpcoes += LEN(aOpcoes[w]) +4
NEXT
// espacos entre os botoes
nTamTodasAsOpcoes += (LEN(aOpcoes)-1)
// Ajusta o tamanho à maior linha ...
nTamItem := iif(nTamItem >= nTamTodasAsOpcoes, nTamItem, nTamTodasAsOpcoes)
// coordenadas para a janela ...
nTopo := ((nTamRow - nTamMsg)/2) -1
nEsquerda := ((nTamCol - nTamItem)/2) -1
nBase := nTopo + nTamMsg +3
nDireita := nEsquerda + nTamItem +1
nBarra := (nDireita - nEsquerda) +1
// Se o tamanho do Titulo for maior que a maior linha do array de mensagem ...
// Ajusta o Titulo para apresentar o necessario com reticencias ("...")
cTitulo := iif(nBarra <= LEN(cTitulo),SUBSTR(cTitulo,1,nBarra-5) + "...",cTitulo)
// Salva a tela ...
cTela := SAVESCREEN(nTopo, nEsquerda, nBase, nDireita)
// Desenha a janela ...
@ nTopo, nEsquerda, nBase, nDireita BOX SPACE(9) COLOR "W+/N*"
// Desenha a barra de titulo ...
@ nTopo, nEsquerda SAY SPACE(nBarra) COLOR "W+/B"
@ nTopo, nEsquerda+1 SAY cTitulo COLOR "W+/B"
// Imprime as linhas do array na janela ...
FOR x := 1 TO nTamMsg
@ nTopo + x, nEsquerda +1 SAY aMensagem[x] COLOR "W+/N*"
NEXT
// Posiciona na ultima linha dentro da janela ...
@ nBase -1, (nEsquerda + (nDireita - nTamTodasAsOpcoes))/2 SAY "" COLOR "W+/N*"
// ajusta as cores do prompt (menu) ...
SETCOLOR("W+/N*,GR+/R*")
FOR y := 1 TO LEN(aOpcoes)
@ nBase -1, COL() +1 PROMPT CHR(16) + CHR(32) + aOpcoes[y] + CHR(32) + CHR(17)
NEXT
MENU TO nEscolha
// restaura a tela e retorna a cor original ...
RESTSCREEN(nTopo, nEsquerda, nBase, nDireita, cTela)
SETCOLOR(cCor)
// retorna o valor do botao selecionado ...
RETURN nEscolha
Mauricio Portela



