Alternativa a funcao ALERT()

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

Moderador: Moderadores

Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Alternativa a funcao ALERT()

Mensagem por mauricioportela »

Alternativa a funcao ALERT()

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
Att.
Mauricio Portela
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Alternativa a funcao ALERT()

Mensagem por clodoaldomonteiro »

Olá Maurício.

Faltou informar se é pra Clipper, Harbour ou xHarbour.

Grato pela dica.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Alternativa a funcao ALERT()

Mensagem por mauricioportela »

Ola!

Acredito que sirva para todos, pois eu usei somente comandos/funcoes nativas. Eu uso o harbour 3.2 (TUI).

Att.
Mauricio
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Alternativa a funcao ALERT()

Mensagem por alxsts »

Olá!

Grato pela contribuição.

No Harbour existe uma função nativa que faz a mesma coisa e ainda permite que se escolha a cor do alerta, além de ter um parâmetro que indica o tempo que a mensagem deve ser exibida. Veja hb_Alert ()
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Alternativa a funcao ALERT()

Mensagem por mauricioportela »

Ola!

Tem a questão de estética (perfumaria). veja:

Att.
Mauricio
Anexos
Tela 04
Tela 04
alternativa_04.png (10.83 KiB) Exibido 1967 vezes
Tela 03
Tela 03
alternativa_03.png (11.65 KiB) Exibido 1967 vezes
Tela 02
Tela 02
Tela 01
Tela 01
Tela do hb_alert
Tela do hb_alert
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a funcao ALERT()

Mensagem por JoséQuintas »

Usuário console já é muito ridicularizado.
Fazendo isso piorou.

Volte 40 anos no tempo, nos exemplos do Clipper 5.2, e vai ter algo melhor que isso.
É no exemplo de browse, que simula uma planilha de lotus 123.
Não sei se tem o mesmo exemplo no Clipper 5.3, só tenho certeza sobre o 5.2.

Se eu encontrar aqui em algum lugar o 5.2, posto aqui.

De qualquer forma, o trabalho foi interessante, porque até mesmo GUI depende desse básico.
Não é qualquer um que vai criando funções pra facilitar as coisas, ainda mais partindo do zero.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Alternativa a funcao ALERT()

Mensagem por clodoaldomonteiro »

alxsts escreveu:Olá!

Grato pela contribuição.

No Harbour existe uma função nativa que faz a mesma coisa e ainda permite que se escolha a cor do alerta, além de ter um parâmetro que indica o tempo que a mensagem deve ser exibida. Veja hb_Alert ()
Vi que existe a mesma coisa no xHarbour.
Alert()
Displays a text-mode dialog box with a message.
Syntax
Alert( <xMessage>, [<aOptions>], [<cColor>], [<nDelay>] ) --> nChoice

Arguments
<xMessage>
This is the message to display in the dialog box. It can be of any data type but is usually a character string or an array filled with strings. If <xMessage> is a character string, the semicolon is treated as a new line character. When it is an array, each element is displayed in a new line of the dialog box.
<aOptions>
<aOptions> is an array filled with character strings. Each element is displayed as prompt for the user to make a selection. If no parameter is passed, <aOptions> defaults to { "Ok" }.
<cColor>
This is a color string holding two color values. The Normal color is used to display the dialog box along with <xMessage>. The options to select from are displayed in the Enhanced color. The default is "W+/R,W+/B".
<nDelay>
Optionally, a numeric value can be specified, indicating the number of seconds to wait for a key press before the dialog box closes automatically. It defaults to zero, which means that the dialog box does not close automatically. Return
The function returns a numeric value indicating the ordinal position within <aOption> of the prompt selected by the user. When the ESC key is pressed, the user aborted the selection and the return value is 0.
If <nDelay> is specified and this number of seconds has elapsed without a key press, the return value is 1.

Código: Selecionar todos

// The example displays a message to terminate or resume the program.
// After 5 seconds without user response, the program quits automatically.

   PROCEDURE Main()
      LOCAL cMessage, aOptions, nChoice

      cMessage := "Quit program?;(auto-quit in 5 seconds)"
      aOptions := { "Yes", "No" }

      nChoice := Alert( cMessage, aOptions, , 5)

      DO CASE
      CASE nChoice == 0
         ? "Program not interrupted ..."
      CASE nChoice == 1
         QUIT
      CASE nChoice == 2
         ? "Program resumed ..."
      ENDCASE

    RETURN
T+
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Alternativa a funcao ALERT()

Mensagem por mauricioportela »

Ola!

Não sei se entendi as mensagens acima mencionando que o (x)Harbour tem a função.

Minha intenção foi contribuir com uma "alternativa", ou seja, dá mais uma opção para usar no sistema.

Já passei por situações onde aparecia na tela, mensagens dentro do "alert" e, alguns "consultores" de clientes metendo o pau no sistema, dizendo que era coisa ultrapassada etc...

Att.
Mauricio
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a funcao ALERT()

Mensagem por JoséQuintas »

Sim
hbmk2 -find alert

Harbour core (installed):
Alert()
hb_Alert()
hb_gtAlert()

Estou sem leitor de CD/DVD, senão colocaria a do exemplo do Clipper.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a funcao ALERT()

Mensagem por JoséQuintas »

Como está em CD/DVD e não tenho leitor, pesquisei no google clipper 5.2 samples
samples.png
VivaClipper não serve, o próximo é do github

Tem o clipper inteiro, ao que parece.
Falei que era exemplo de browse, de planilha, então... algo sobre browse e sobre planilha, spreadsheet em inglês
Cheguei nesse TBROW, SPRDSHT.

https://github.com/ibarrar/clipper/tree ... OW/SPRDSHT

Baixei, mas precisei colocar o nome de MAIN() no primeiro fonte, pois esse é o ponto de partida, senão o harbour não executa nada.
clipper.png
Está aí então.
Uma novidade de décadas atrás.
Exemplo original do Clipper.

Nota: Lembro tudo de minhas ferramentas de trabalho, mesmo que não use mais o Clipper há uns 15 anos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a funcao ALERT()

Mensagem por JoséQuintas »

Uia, vale até um destaque

Código: Selecionar todos

/*****
 *
 * BUTTONS.CH
 * Header file for the button functions
 *
 *
 */

#xtranslate   .row          =>   \[1\]
#xtranslate   .col          =>   \[2\]

#xtranslate   .len          =>   \[3\]

#xtranslate   .shadRow      =>   \[4\]
#xtranslate   .shadCol      =>   \[5\]
#xtranslate   .letCol       =>   \[6\]
#xtranslate   .upShadCol    =>   \[7\]

#xtranslate   .butStr       =>   \[8\]
#xtranslate   .butLet       =>   \[9\]

#define       SIZE               9

#define       BUTTOMBGHI         "N/BG*"
#define       BUTTOMBGLO         "N/BG"
#define       BUTTOMLETHI        "R+/BG*"
#define       BUTTOMLETLO        "R+/BG"

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

// EOF - BUTTONS.CH //
e o fonte button.prg

Código: Selecionar todos

   // Build String
   aArray.butStr := SUBSTR(cStr, 1, nAt - 1) +;
                  SUBSTR(cStr, nAt + 1)
   aArray.len    := LEN(aArray.butStr)
   aArray.letCol := nCol + nAt - 1
   aArray.butLet := SUBSTR(aArray.butStr, nAt, 1)

   // Where
   aArray.row       := nRow
   aArray.col       := nCol
   aArray.ShadRow   := nRow + 1
   aArray.ShadCol   := nCol + 1
   aArray.upShadCol := nCol + aArray.len
Parece até classe, ou talvez seja, mas não do jeito que a gente conhece hoje.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Alternativa a funcao ALERT()

Mensagem por mauricioportela »

Ola!

Quintas, realmente, é um trabalho excelente!

Eu testei aqui tbm. Pra quem ainda tem trabalhos TUI, como eu, dá pra aproveitar a ideia!

Obrigado!

Att.
Mauricio
Anexos
teste.png
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativa a funcao ALERT()

Mensagem por JoséQuintas »

mauricioportela escreveu:Quintas, realmente, é um trabalho excelente!
Eu testei aqui tbm. Pra quem ainda tem trabalhos TUI, como eu, dá pra aproveitar a ideia!
Obrigado!
Faz parte do Clipper 5.2, vinha como exemplo.

Se usa console mesmo, pode optar pelas alternativas harbour dele mesmo.
Só de mudar a quantidade de linhas/colunas já te dá a opção de trabalhar melhor com as telas.
Também pode usar as mensagens do windows, e outras coisas mais, se achar que vale a pena.
Acaba usando os mesmos fontes, e pode alterar quando quiser, e se quiser.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Alternativa a funcao ALERT()

Mensagem por alxsts »

Olá!

Na Seção Downloads do Fórum tem um Zip contendo a instalação completa do Clipper 5.2e (cópia das pastas já instalado). Instalação do Clipper versão 5.2e (Modo instalado) - Site do Maligno

Lembrando que a Seção Downloads do Fórum está com problema de acesso no estilo clássico de exibição do Fórum. Para que funcione, use o link "Mudar para estilo Celular".

Clipper5 download
[]´s
Alexandre Santos (AlxSts)
Responder