Modo Console - pisca / sombra

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Modo Console - pisca / sombra

Mensagem por asimoes »

O screenmark é uma ótima função desde que nao se use caracteres gráficos tipo ã | ç ►◄ esses caracteres não são tratados pela função screenmark,
então fiz essa outra versão que pode aceitar, usando @ say

Código: Selecionar todos


FUNCTION MAIN
   Pisca(24,00,"► ATENÇÃO","W+/B","B/B")
   Inkey(0)
RETURN Nil

FUNCTION Pisca(nLinha,nColuna,cMensagem,cCor1,cCor2)
PUBLIC nTmpLog:=1
   HB_DEFAULT(@cMensagem,"")
   HB_DEFAULT(@cCor1,"W+/N")
   HB_DEFAULT(@cCor2,"N/N")
   IF !Empty(cMensagem)
      IF !TYPE("nPisca") == "U"
         HB_IdleDel( nPisca )
      ENDIF
      nPisca:=HB_IdleAdd( {|| PiscaMensagem(nLinha,nColuna,cMensagem,cCor1,cCor2) } )
   ELSE
      HB_IdleDel( nPisca )
   ENDIF
RETURN .T.  

FUNCTION PiscaMensagem(nLinha,nColuna,cMensagem,cCor1,cCor2)
STATIC nTempoPisca
   IF nTempoPisca = Nil
      nTempoPisca:=Seconds()
   ENDIF
   
   IF Seconds() - nTempoPisca >= nTmpLog
      //ScreenMark(cMensagem,cCor1,.F.,.T.)
      @ nLinha,nColuna SAY cMensagem COLOR cCor1
      HB_IdleSleep( .3 )
      //ScreenMark(cMensagem,cCor2,.F.,.T.)
      @ nLinha,nColuna SAY cMensagem COLOR cCor2
      nTempoPisca:=Seconds()
   ENDIF
RETURN Nil
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Modo Console - pisca / sombra

Mensagem por asimoes »

Descobri ontem que a função ScreenMark usa a função ScreenText que captura a tela em ansi, e a string que eu estava procurando estava em oem, por isso não estava funcionando.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Modo Console - pisca / sombra

Mensagem por JoséQuintas »

A questão da sombra:

Opção 1:

Habilite o modo de compatibilidade com Clipper para salvar/restaurar telas

Código: Selecionar todos

   hb_gtInfo( HB_GTI_COMPATBUFFER, .T. )

Opção 2:

Substitua a sombra por espaços em branco

Opção 3:

Pare de usar sombra.
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

Modo Console - pisca / sombra

Mensagem por JoséQuintas »

Rotina simples substituindo sombra por espaços em branco.

Imagine o retângulo.
A sombra vai ser à direita, uma coluna depois da final.
Também embaixo uma linha depois da final.
E vai começar uma linha depois da inicial e uma coluna depois da inicial, pra dar o efeito 3D.

Isso em código fonte (mas não lembro se o CLEAR TO aceita cor):

Código: Selecionar todos

FUNCTION Sombra( LinhaIniicial, ColunaInicial, LinhaFinal, ColunaFinal )
   @ LinhaInicial + 1, ColunaFinal + 1 CLEAR TO LinhaFinal + 1, ColunaFinal + 1 COLOR "N/N"
   @ LinhaFinal + 1, ColunaInicial + 1 CLEAR TO LinhaFinal + 1, ColunaFinal + 1 COLOR "N/N"
   RETURN NIL
Nota:
Pode ser CLEAR TO, BOX Space(9), ou Scroll( ..., 0 )
Se não aceitar cor, é salvar, trocar, usar e restaurar.

Código: Selecionar todos

cCorAnt := SetColor( "N/N" )
...
SetColor( cCorAnt )
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:

Modo Console - pisca / sombra

Mensagem por clodoaldomonteiro »

Boas,
O exemplo abaixo tá bem tosco, mas funciona.

Código: Selecionar todos

   ...
   lPisca := .t.
   ii:=0
   Do While !Eof()
      ii++
      If IsInteger(ii / 50 )
         If lPisca
            @ 1,1 Say 'Aguarde coleta de dados...' Color "n/w"
         Else
            @ 1,1 Say 'Aguarde coleta de dados...' Color "w/n"
         Endif
         lPisca := !lPisca
      Endif
      Skip
   EndDo
   ...
   ...
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
Responder