Clipper On Line • Ver Tópico - funcao janela - SimNao

funcao janela - SimNao

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

funcao janela - SimNao

Mensagempor mauricioportela » 25 Jan 2022 01:02

Funcao (modo texto) tipo janela - SimNao

Recebe 2 argumentos e retona valor logico.

// -----------------------------------------------------------------------------
// Mauricio P Pires <mauricioppires at gmail dot com>
// Funcao....: SimNao( aTxt, cTit )
// Argumentos: aTxt - array de linhas de texto para compor o informe na tela.
//             cTit - String - Titulo da janela SimNao.
// Retorno...: Valor logico: TRUE (.T.) ou FALSE (.F.)
// Data......: 2022-01-25
// -----------------------------------------------------------------------------

#include "inkey.ch"

#define COR_FUNDO   "B/W"
#define COR_JANELA  "N/W+*"
#define COR_TITULO  "W+/B"

#define TRUE        .T.
#define FALSE       .F.

function main()
    local aTexto1, aTexto2, cTitulo1, cTitulo2, lRet1, lRet2

    SETMODE( 25, 80)
    setcolor( COR_FUNDO )
    cls

    cTitulo1 := "Compactacao dos dados"
    aTexto1 := {"Confirma a compactacao dos dados?", ;
                "Atencao! Este procedimento eh irreverssivel!", ;
                "Executar somente se tiver certeza!"}

    // excede o tamanho - retorna FALSE
    // cTitulo2 := "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum"
    cTitulo2 := "Lorem Ipsum"

    // o segundo item deste array,
    // foi colocado intencionalmente maior que 80 caracteres ( ou MaxCol() )
    // para testar o corte da linha e acrescentar reticencias
    aTexto2 := {" 1. Deseja finalizar o sistema agora?", ;
                " 2. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 3. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 4. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 5. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 6. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 7. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 8. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                " 9. Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum", ;
                "10. Escolha Sim ou Nao"}

    cTitulo3 := "Finalizar o Sistema"
    aTexto3 := {"Deseja finalizar o sistema agora?" }

    lRet1 := SimNao( aTexto1, cTitulo1 )
    lRet2 := SimNao( aTexto2, cTitulo2 )
    lRet3 := SimNao( aTexto3, cTitulo3 )

    ? if( lRet1, "Compactar os dados!", "Nao compactar!")
    ? if( lRet2, "Respondendo Sim", "Respondendo Nao")
    ? if( lRet3, "Finalizar o sistema", "Permanecer no sistema")

return Nil

function SimNao( aTexto, cTitulo )
    local nTopo, nEsquerda, nBaixo, nDireita
    local nMaiorItem, nTamArray
    local nLinha, nEsqTexto, nBaixoTexto, nDirTexto
    local x, cCor, cTela
   
    if ( aTexto == Nil )
        return FALSE
    endif
   
    // Limmitando a 10 linhas/itens no array
    if ( len(aTexto) > 10 )
        return FALSE
    endif

    if ( cTitulo == Nil )
        cTitulo := "Portela Info"
    endif
    cTela      := savescreen(,,,,)
    nTopo      := 0
    nEsquerda  := 0
    nBaixo     := MaxRow()
    nDireita   := MaxCol()
    nMaiorItem := 0

    nTamArray  := len(aTexto)
    if ( nTamArray > nBaixo )
        return FALSE
    endif
   
    for x := 1 to nTamArray
        if ( len(aTexto[x]) > nDireita )
            AFill( aTexto, substr(aTexto[x], 1, (nDireita -7)) + "...", x, 1 )
            // TODO: implementar aqui, a possibilidade de quebrar a string e
            //       acrescentar o restante em uma nova linha, logo abaixo.
        endif
        if ( len(aTexto[x]) > nMaiorItem )
            nMaiorItem := len(aTexto[x])
        endif
    next
    if ( len(cTitulo) > nMaiorItem )
        return FALSE
    endif

    @ nTopo, nEsquerda, nBaixo, nDireita box space(9) color COR_FUNDO

    nLinha      := ((nBaixo - nTamArray)/ 2) -2
    nEsqTexto   := ((nDireita - nMaiorItem) /2)
    nBaixoTexto := (nLinha + nTamArray + 2)
    nDirTexto   := if((nEsqTexto + nMaiorItem +2) >= 79, 79, (nEsqTexto + nMaiorItem + 2))

    @ nLinha -2, nEsqTexto, nBaixoTexto, nDirTexto box space(9) color COR_JANELA
    @ nLinha -2, nEsqTexto    say space(nMaiorItem+3) color COR_TITULO
    @ nLinha -2, nEsqTexto +1 say cTitulo color COR_TITULO

    for x := 1 to nTamArray
        @ nLinha, nEsqTexto +1 say aTexto[x] color COR_JANELA
        nLinha++
    next
    nLinha++
    cCor := setcolor()
    setcolor("W+/BG, GR+/R, R/W, B/W, W/BG")
    @ nLinha, (nEsqTexto + 1 ) prompt " Sim "
    @ nLinha, (nEsqTexto + 7 ) prompt " Nao "
    menu to nOpcao
    if ( lastkey() == K_ESC )
        lRetorno := FALSE
    endif
    do case
        case nOpcao == 1 ; lRetorno := TRUE
        case nOpcao == 2 ; lRetorno := FALSE
    endcase
    setcolor(cCor)
    restscreen(,,,, cTela)
return lRetorno

Avatar de usuário

mauricioportela
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 83
Data de registro: 29 Jul 2016 04:22
Cidade/Estado: Vitoria da Conquista/Bahia
Curtiu: 4 vezes
Mens.Curtidas: 21 vezes



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 16 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro