Código: Selecionar todos
funct DbNav( L_,;
C_,;
_BOT_DEFAULT_,;
_ATIVO_,;
_ARRBOTOES_,;
HINT,;
_COR_ATIVA_,;
_COR_INATIVA_,;
COR_BOX,;
_FUNC_USER_,;
_ICO_BOTAO_,;
_SOMBRA_)
*****************************************************************************************************
* Funcao DbNav( <linha>, <coluna>,;
* [<botao default>],;
* [<ativo>],;
* [<lista de botoes>],;
* [<hint>],;
* [<cores ativas>],;
* [<cores inativas>],;
* [<cor da caixa>],;
* [<funçao do usuário>]
* [<icone do botao>],;
* [<sombra>]
*
* linha e coluna - linha e coluna da barra
* botao default - botao inicial da barra ( default 5 )
* ativo - barra ativa (navegar) ou nao (s¢ mostrar)
* lista de botoes - lista com os numeros dos botoes ativos ( 1 at‚ 9 ) ( defaut '0123456789')
* 9 botoes que retornam: ( 1 a 9 )
* 1 - Primeiro registro ( go top interno )
* 2 - Registro anterior ( skip -1 interno )
* 3 - Proximo registro ( skip interno )
* 4 - Ultimo registro ( go botton interno )
* 5 - Incluir registro ( append blank interno )
* 6 - Excluir registro ( delete interno )
* 7 - Alterar registro ( read interno )
* 8 - Localizar registro ( seek interno )
* 9 - Sair
* hint - ajuda r pida ( n§ da linha ) ( default 23 )
* cores ativas - cores dos botoes ativos ( default 'W+/W,GR+/N' )
* cores inativas - cores dos botoes inativos ( default 'N+/W,W+/N' )
* cor da caixa - cor da caixa dos botoes ( default 'N+/B' )
* fun‡ao do usu rio - Mensagem criado pelo usu rio para o botÆo 8
* icone do botao - "icone" a ser mostrado no botÆo ( default = "" )
* sombra - mostrar sombra ou nÆo ( default = .f. )
*
* Retorno - Tecla pressionada
*
********************************************************************************
*** Vari veis locais
local _cont_,; // Contadora
_arr_bot_ := {},; // Cria a matriz de botao vazia
_arr_mss_ := {},; // Cria a matriz de hint's vazia
ci:= c_,; // Pega a coluna inicial
LINHA_BOT,; // Linha dos botoes
COR_NAV := setcolor(),; // Salva as cores
CURSOR_NAV := setcursor(),; // Salva o cursor
LINHA_SCR,; // Para guardar a janela
BOT_ATIV := {},; // Cria a matriz de botoes ativos vazia
CCC := 0 // Mais um contador
static _botao_ // Quando voltar estar como deixou
*** Matriz de botoes
aadd( _arr_bot_, ' ® ' ) //1
aadd( _arr_bot_, ' ' ) //2
aadd( _arr_bot_, ' ' ) //3
aadd( _arr_bot_, ' ¯ ' ) //4
aadd( _arr_bot_, ' + ' ) //5
aadd( _arr_bot_, ' - ' ) //6
aadd( _arr_bot_, ' ' ) //7
if empty( _ICO_BOTAO_ )
aadd( _arr_bot_, ' ' ) //8
else
aadd( _arr_bot_, ' ' + _ICO_BOTAO_ + ' ' )
endif
aadd( _arr_bot_, ' x ' ) //9
if empty( _FUNC_USER_ )
_FUNC_USER_ := ' Botao 8 '
endif
*** Matriz de hints
aadd( _arr_mss_, ' Primeiro registro ' )
aadd( _arr_mss_, ' Registro anterior ' )
aadd( _arr_mss_, ' Proximo registro ' )
aadd( _arr_mss_, ' Ultimo registro ' )
aadd( _arr_mss_, ' Incluir registro ' )
aadd( _arr_mss_, ' Excluir registro ' )
aadd( _arr_mss_, ' Alterar registro ' )
aadd( _arr_mss_, _FUNC_USER_ )
aadd( _arr_mss_, ' Sair ' )
*** Verifica os parametros passados
if !empty( _bot_default_ )
_botao_ := _bot_default_
endif
if empty( _COR_ATIVA_ ) // se nao passou cores
_COR_ATIVA_ := 'W+/W,GR+/N' // pega default
endif
if empty( _COR_INATIVA_ ) // se nao passou cores
_COR_INATIVA_ := 'N+/W,W+/N' // pega default
endif
if empty( HINT ) // se nao passou o hint
HINT := 23 // poe na linha 23
endif
*** Cor do box
if empty( COR_BOX )
COR_BOX := 'B+/B'
endif
if empty( _SOMBRA_ )
_SOMBRA_ := .F.
endif
keyboard chr( 0 )
LINHA_SCR := savescreen( HINT, 00, HINT, 79 ) // salva a linha do hint
set message to HINT center // local do hint
*** Se nao tem lista de botoes...
if empty( _ARRBOTOES_ )
_ARRBOTOES_ := '123456789' // poe todos
endif
if ci - 2 < 1 // Coluna para os botoes
ci := 2
endif
setcolor( COR_BOX )
@ l_-1, ci-2 to l_+1, ci+36 DOUBLE // Moldura da caixa
if _SOMBRA_
sombra( l_-1, ci-2, l_+1, ci+36 )
endif
setcolor( _COR_ATIVA_ )
setcursor( 0 ) // Sem cursor
for _CONT_ := 1 to 9 // La‡o dos botoes
if ( _ativo_ == .T. ) .and. ;
( alltrim( str( _CONT_ ) ) $ _ARRBOTOES_ ) // verifica se ‚ botÆo ativo
*** ‚ botao ativo e est na lista
setcolor( _COR_ATIVA_ ) // Cor do botao ativo
@ l_, ci promp _arr_bot_[_cont_];
message _arr_mss_[_cont_] // Desenha o botao ativo
aadd( BOT_ATIV, _cont_ ) // Pega o numero correto do botao ativo
else
setcolor( _COR_INATIVA_ ) // Cor inativa
@ l_, ci say _arr_bot_[_cont_] // Desenha botao inativo
endif
ci := ci + 4 // Proxima posi‡ao do botao
next
if _ativo_ // menu ativo
menu to _botao_ // Ilumina os botoes ativos
endif
if _ativo_ // A barra ‚ ativa
if lastkey() == 27
_botao_ := len( BOT_ATIV )
endif
ccc := BOT_ATIV[_botao_] // Pega o botao correto
LINHA_BOT := savescreen( l_, 00, l_, 79 ) // Salva a linha dos botoes
c_++
do case
case ccc == 1
*** Inicio do arquivo
@ l_, c_ say ' ' color COR_BOX
@ l_, c_ say _arr_bot_[ccc] color 'W+/N' // Botao pressionado
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
go top // Vai para o topo
case ccc == 2
*** Registro anterior
@ l_, c_+04 say ' ' color COR_BOX
@ l_, c_+04 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
skip -1 // Volta 1
case ccc == 3
*** Pr¢ximo registro
@ l_, c_+08 say ' '
@ l_, c_+08 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
skip // Avan‡a 1
if eof()
skip -1
endif
case ccc == 4
*** Ultimo registro
@ l_, c_+12 say ' '
@ l_, c_+12 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
go bott // Fim do arquivo
if eof()
skip -1
endif
case ccc == 5
*** Novo registro
@ l_, c_+16 say ' '
@ l_, c_+16 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
append blank // Cria novo registro
read
case ccc == 6
*** Deletou o registro
@ l_, c_+20 say ' '
@ l_, c_+20 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
delete // Marcou para apagar
case ccc == 7
*** Edita o registro
@ l_, c_+24 say ' '
@ l_, c_+24 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
setcursor( CURSOR_NAV )
read // Faz a atualiza‡ao dos reads pendentes
setcursor( 0 ) // Sem cursor
case ccc == 8
*** Fun‡Æo do usu rio
@ l_, c_+28 say ' '
@ l_, c_+28 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
clear gets
case ccc == 9
*** Sinaliza para sair e limpa os gets
@ l_, c_+32 say ' '
@ l_, c_+32 say _arr_bot_[ccc] color 'W+/N'
inkey( .07 )
restscreen( l_, 00, l_, 79, LINHA_BOT )
clear gets // Limpa os gets pendentes
endcase
endif
*** Restaura o ambiente
setcolor( COR_NAV )
setcursor( CURSOR_NAV )
set message to
restscreen( HINT, 00, HINT, 79, LINHA_SCR )
*** Limpa as matrizes
_arr_bot_ := {}
_arr_mss_ := {}
BOT_ATIV := {}
para utiliza-la veja este exemplo (é só um exemplo...)
Código: Selecionar todos
Local TelaCnfRm := SaveScreen( 0, 0, 24, 79 )
sele CNFRMBAN
quadro('06','03','20','76',' Configuracao de remessas bancarias ','W+/B')
do while .t.
reglock(.t.)
@ 07, 04 CLEAR TO 17, 75
TelaRemessa()
**********************************************************************************************
RESPOSTA := DbNav( 19,38,9,.T.,'12345679',,,,'N/B' ) // CHAMA AQUI O DBNAV
// LINHA 19, COLUNA 38
// BOTÃO ATIVO 9 (Sair)
// .T. PARA ATIVAR
// LISTA DOS BOTÕES A SEREM UTILIZADOS (DE 1 A 9)
**********************************************************************************************
do case
case RESPOSTA == 9 // Acenou para sair
unlock
exit // Sai aqui
case RESPOSTA == 5
read
case RESPOSTA == 6
if MsgAlert("Tem certeza que deseja excluir este banco?", "Atencao", {" Nao "," Sim "}) = 1
recall
endif
otherwise
clear gets
endcase
unlock
enddo
RestScreen( 0, 0, 24, 79, TelaCnfRm )
retu( "" )