mensagens subindo e descendo
Moderador: Moderadores
mensagens subindo e descendo
ola pessoal,
alguem tem alguma ideia de como fazer uma mensagem box , subir e descer da tela.
igual aquelas que agora viraram moda nos antivirus...
o problema maior talvez seja porque trabalho no modo console ainda, mas de repente faço alguma adaptacao, utilizo harbour 3.1.0dev
tentei gerar o box fora do campo visual da tela, e usar savescreen restscreen para arrastar ela, mas nao funcionou porque ela foi gerada fora da area da tela.
Abel
alguem tem alguma ideia de como fazer uma mensagem box , subir e descer da tela.
igual aquelas que agora viraram moda nos antivirus...
o problema maior talvez seja porque trabalho no modo console ainda, mas de repente faço alguma adaptacao, utilizo harbour 3.1.0dev
tentei gerar o box fora do campo visual da tela, e usar savescreen restscreen para arrastar ela, mas nao funcionou porque ela foi gerada fora da area da tela.
Abel
mensagens subindo e descendo
Saudações!
Prezado Abel,
No modo console acho que você vai ter que seguir os seguintes passos:
- Salve a tela toda com savescreen()
- Crie o box numa área visivel da tela com coordenadas l1,c1,l2,c2
- Verifique a diferença entre as coordenadas difcol = c2 - c1 e diflin = l2 - l1
- Agora você tem que fazer uma rotina para alterar o valor de l1 e c1 e calcular os valores de l2 e c2 somando aos primeiros os valores de difcol e diflin
- Cada vez que estes valores forem calculados você deve restaurar a tela com restscreen() e em seguida recriar o box com as novas coordenadas.
- É necessário criar algumas regras como não permitir que l1 + diflin exceda o limite da tela, da mesma forma que c1 + difcol também não exceda o limite da tela.
- As linhas podem ser incrementadas por unidades (+1) até que os limites sejam atingidos onde serão incrementados em inverso por (-1).
- As colunas podem ter a mesma caracerística dependendo do efeito visual que você quer.
- Para utilizar este recurso numa parada tela (prompt, get, wait, etc) é necessário uma Thread.
- Para que funcione a Thread você deve compilar o programa com hbmk2 -mt para que funcione.
Espero ter ajudado.
[]s
Yugi
Prezado Abel,
No modo console acho que você vai ter que seguir os seguintes passos:
- Salve a tela toda com savescreen()
- Crie o box numa área visivel da tela com coordenadas l1,c1,l2,c2
- Verifique a diferença entre as coordenadas difcol = c2 - c1 e diflin = l2 - l1
- Agora você tem que fazer uma rotina para alterar o valor de l1 e c1 e calcular os valores de l2 e c2 somando aos primeiros os valores de difcol e diflin
- Cada vez que estes valores forem calculados você deve restaurar a tela com restscreen() e em seguida recriar o box com as novas coordenadas.
- É necessário criar algumas regras como não permitir que l1 + diflin exceda o limite da tela, da mesma forma que c1 + difcol também não exceda o limite da tela.
- As linhas podem ser incrementadas por unidades (+1) até que os limites sejam atingidos onde serão incrementados em inverso por (-1).
- As colunas podem ter a mesma caracerística dependendo do efeito visual que você quer.
- Para utilizar este recurso numa parada tela (prompt, get, wait, etc) é necessário uma Thread.
- Para que funcione a Thread você deve compilar o programa com hbmk2 -mt para que funcione.
Espero ter ajudado.
[]s
Yugi
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
mensagens subindo e descendo
Amigos, recentemente o Alexandre (asimoes) postou um código sobre Marquee (clique aqui para ver o tópico), que com algumas alterações pode fazer o que o Abel quer.
Abraços,
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
mensagens subindo e descendo
Abel, segue código que pode lhe ajudar:
[]s
Código: Selecionar todos
#include 'inkey.ch'
Function Main()
local salvatela, l1, l2, c1, c2, diflin, difcol, mcol, mlin, mudalin, mudacol
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_UTF8EX
HB_LANGSELECT( 'PT' )
HB_CDPSELECT( "UTF8EX" )
set date french
set century on
set scoreboard off
set cursor off
setmode(25,80)
set color to W+/B
cls
set color to W+/R
@ 00,00 clear to 00,79
@ 00, 01 say "ESC = SAIR"
save screen to salvatela
l1 = 1
l2 = 6
c1 = 10
c2 = 35
diflin = l2 -l1
difcol = c2 - c1
mcol = 79
mlin = 23
mudalin = 1
mudacol = 1
keyboard chr(13)
do while.t.
restore screen from salvatela
l1 = l1 + mudalin
l2 = l1 + diflin
c1 = c1 + mudacol
c2 = c1 + difcol
if l2 > mlin
l1 = mlin - diflin
mudalin = -1
loop
endif
if l1 < 1
l1 = 1
mudalin = 1
loop
endif
if c2 > mcol
c1 = mcol - difcol
mudacol = -1
loop
endif
if c1 < 1
c1 = 1
mudacol = 1
loop
endif
l2 = l1 + diflin
c2 = c1 + difcol
ylib_Msg("Testando BOX",l1,c1,l2,c2,"W+/G","N/W",1,"Janela para verificar o efeito de deslocamento de um box!")
letra := inkey(0.25)
if letra == 27
exit
endif
enddo
set color to
cls
return NIL
/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Criar Janela Genérica com controle de cor, posição, cor do título e sombra com 4 posições
Parâmetros:
1. mTitulo....: Titulo da janela
2. l1.........: Linha inicial da janela
3. c1.........: Coluna inicial da janela
4. l2.........: Linha final da janela
5. c2.........: Coluna final da janela
6. corTitulo..: Cor do Título da janela (Frente e Fundo)
7. corJanela..: Cor da janela (Frente e Fundo)
8. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)
if corTitulo == NIL
corTitulo = "W/B"
endif
if corJanela == NIL
corJanela = "N/W"
endif
// Posicionamento da sombra da Janela
setcolor("N/N+")
do case
case tipoSombra == 1 // inferior esquerdo
ylib_Sombra(l1+1,c1-1,l2+1,c2-1)
case tipoSombra == 2 // inferior direito
ylib_Sombra(l1+1,c1+1,l2+1,c2+1)
case tipoSombra == 3 // superior esquerdo
ylib_Sombra(l1-1,c1-1,l2-1,c2-1)
case tipoSombra == 4 // superior direito
ylib_Sombra(l1-1,c1+1,l2-1,c2+1)
otherwise
ylib_Sombra(l1+1,c1-1,l2+1,c2-1) // Padrão inferior esquerdo
endcase
// Posicionamento da Janela e Título
setcolor(corJanela)
@ l1,c1 clear to l2,c2
setcolor(corTitulo)
@ l1,c1 clear to l1,c2
@ l1,c1+1 say mTitulo
return nil
/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Sombra Real na tela
Parâmetros:
01. l1...: Linha inicial
02. c1...: Coluna Inicial
03. l2...: Linha final
04. c2...: Coluna final
---------------------------------------------------------------------------------------------------------------------
*/
function ylib_Sombra(l1,c1,l2,c2)
local ret := "", ct:= 0, tela, coluna:=c1, linha:=l1, cor, tam:=0, acumula := ""
tela :=savescreen(l1,c1,l2,c2)
cor := setcolor()
setcolor("N+/N")
tela := hb_utf8tostr(tela)
tam := len(tela)
for ct:= 1 to tam step 4
@ linha,coluna say substr(tela,ct,1)
++ coluna
if coluna > c2
coluna = c1
++ linha
endif
if linha > l2
exit
endif
next
setcolor(cor)
return nil
/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Tela Para Mensagem
Parâmetros:
01. mTitulo....: Titulo da Janela
02. l1.........: Linha inicial da janela
03. c1.........: Coluna inicial da janela
04. l2.........: Linha final da janela
05. c2.........: Coluna final da janela
06. corTitulo..: Cor do Título da janela (Frente e Fundo)
07. corJanela..: Cor da janela (Frente e Fundo)
08. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
09. Mensagem...: Mensagem de Erro ou aviso
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_Msg(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra,mensagem)
set cursor off
ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)
setcolor(corJanela)
keyboard chr(27)
memoedit(mensagem,l1+2,c1+1,l2-1,c2-1,.F.)
return nil
mensagens subindo e descendo
ola, pessoal.
pelo que entendi estas rotinas vao exibir o box com a mensagem e movimenta-lo pela tela ate a posicao desejada., mas o que eu queria é que o box tivesse o efeito de entrar na tela pela lateral ou pela parte de baixo e nao exibi-lo e movimenta-lo.
desde ja agradeço as sugestoes e vou analisar melhor, se alguem tiver outra ideia ou eu estiver enganado me avise por favor.
Abracos,
ABEL
pelo que entendi estas rotinas vao exibir o box com a mensagem e movimenta-lo pela tela ate a posicao desejada., mas o que eu queria é que o box tivesse o efeito de entrar na tela pela lateral ou pela parte de baixo e nao exibi-lo e movimenta-lo.
desde ja agradeço as sugestoes e vou analisar melhor, se alguem tiver outra ideia ou eu estiver enganado me avise por favor.
Abracos,
ABEL
mensagens subindo e descendo
Bem, talvez seja isto que você está querendo: O box aparece na lateral esquerda da tela e corre até o centro. Eis o código:
[]s
Yugi
Código: Selecionar todos
#include 'inkey.ch'
Function Main()
local salvatela, l1, l2, c1, c2, diflin, difcol, mcol, mlin, mudalin, mudacol, pBox := {}
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_UTF8EX
HB_LANGSELECT( 'PT' )
HB_CDPSELECT( "UTF8EX" )
set date french
set century on
set scoreboard off
set cursor off
setmode(25,80)
set color to W+/GR
cls
set color to W+/R
@ 00,00 clear to 00,79
@ 00, 01 say "ESC = SAIR"
save screen to salvatela
l1 = 6 // linha inicial do box
l2 = 11 // linha final do box
c1 = 0 // coluna inicial do box
c2 = 25 // coluna final do box
difcol = c2 - c1
mcol = 79 // coluna final da tela
mfim = int((80-difcol)/2) // coluna de parada do box
mlin = l2 - l1
l1 = int((25 - mlin)/2)
l2 = l1 + mlin
pausa := 0.02
// aqui temos o box com a mensagem...
ylib_Msg("Testando BOX",l1,c1,l2,c2,"W+/G","N/W",1,"Janela para verificar o efeito de deslocamento de um box!")
for ct:= c1 to c2
aadd(pbox,savescreen(l1,ct,l2,c2))
next
tam := len(pbox)
posic := array(tam)
for ct:= tam to 1 step - 1
aadd(posic,pbox[ct])
next
c1 = c1 - difcol
do while.t.
restore screen from salvatela
if (c1%2)<> 0
if (c1 >= 0)
restscreen(l1,c1,l2,c2,pbox[1])
else
restscreen(l1,0,l2,c2,pbox[tam-c2])
endif
endif
c1 = c1 + 1
c2 = c1 + difcol
if c1 == mfim // fim do processamento...
exit
endif
if c1%2==0
inkey(pausa)
endif
enddo
restscreen(l1,c1,l2,c2,pbox[1])
inkey(0)
set color to
cls
return NIL
/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Criar Janela Genérica com controle de cor, posição, cor do título e sombra com 4 posições
Parâmetros:
1. mTitulo....: Titulo da janela
2. l1.........: Linha inicial da janela
3. c1.........: Coluna inicial da janela
4. l2.........: Linha final da janela
5. c2.........: Coluna final da janela
6. corTitulo..: Cor do Título da janela (Frente e Fundo)
7. corJanela..: Cor da janela (Frente e Fundo)
8. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)
if corTitulo == NIL
corTitulo = "W/B"
endif
if corJanela == NIL
corJanela = "N/W"
endif
// Posicionamento da Janela e Título
setcolor(corJanela)
@ l1,c1 clear to l2,c2
setcolor(corTitulo)
@ l1,c1 clear to l1,c2
@ l1,c1+1 say mTitulo
return nil
/**
--------------------------------------------------------------------------------------------------------------------
Descrição:
Tela Para Mensagem
Parâmetros:
01. mTitulo....: Titulo da Janela
02. l1.........: Linha inicial da janela
03. c1.........: Coluna inicial da janela
04. l2.........: Linha final da janela
05. c2.........: Coluna final da janela
06. corTitulo..: Cor do Título da janela (Frente e Fundo)
07. corJanela..: Cor da janela (Frente e Fundo)
08. tipoSombra.: pode ser 1, 2, 3, 4, respectivamente, sombra na posição inferior esquerdo, inferior direito, superior esquerdo e superior direito
09. Mensagem...: Mensagem de Erro ou aviso
--------------------------------------------------------------------------------------------------------------------
*/
function ylib_Msg(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra,mensagem)
set cursor off
ylib_janela(mTitulo,l1,c1,l2,c2,corTitulo,corJanela,tipoSombra)
setcolor(corJanela)
keyboard chr(27)
memoedit(mensagem,l1+2,c1+1,l2-1,c2-1,.F.)
return nil
Yugi
mensagens subindo e descendo
Ola,
Entendi agora o que voce fez,
vc exibiu o box na tela, salvou, apagou, e movimentou.
o que eu nao queria era este efeito de piscada que ficou, tentei gerar o box fora da area de visualizacao da tela, mas nao funcionou.
Abel
Entendi agora o que voce fez,
vc exibiu o box na tela, salvou, apagou, e movimentou.
o que eu nao queria era este efeito de piscada que ficou, tentei gerar o box fora da area de visualizacao da tela, mas nao funcionou.
Abel
mensagens subindo e descendo
Mensagem subindo e descendo com box.
Código: Selecionar todos
@ 00,00 to 04,10
@ 02,01 say PADC("BOX",9)
K:=0
nLin:=1
lTop:=.T.
DO WHILE K = 0
Scroll(00,00,24,10,IF(lTop,-1,1))
IF lTop
nLin++
ELSE
nLin--
ENDIF
IF nLin = 21
lTop:=.F.
ENDIF
IF nLin = 1
lTop:=.T.
ENDIF
k:=inkey(.5)
ENDDO
►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)
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)
mensagens subindo e descendo
asimoes, executei seu codigo, mas ainda nao é isso que eu queria.
vamos ver se posso explicar melhor, queria o mesmo efeito do box que o avast exibe no canto inferior direito, o box aparece de baixo para cima do nada, como se ele "entrasse" na tela.
pelo que percebi acho q isso nao é possivel, pois para movimentar o box preciso exibi-lo antes em alguma coordenada da tela.
se tiver alguma idéia, me avise.
Abracos, e agradeço desde já.
Abel
vamos ver se posso explicar melhor, queria o mesmo efeito do box que o avast exibe no canto inferior direito, o box aparece de baixo para cima do nada, como se ele "entrasse" na tela.
pelo que percebi acho q isso nao é possivel, pois para movimentar o box preciso exibi-lo antes em alguma coordenada da tela.
se tiver alguma idéia, me avise.
Abracos, e agradeço desde já.
Abel
- Nascimento
- Usuário Nível 4

- Mensagens: 763
- Registrado em: 19 Jul 2008 12:11
- Localização: OLINDA-PE
mensagens subindo e descendo
eu acho que vc quer um efeito que tem no livro do ramalho 111 funçoes clipper
tem mais ou menos uma coisa assim
tem mais ou menos uma coisa assim
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina
clipper 5.3 /harbour/minigui
mensagens subindo e descendo
Abel,
Agora sim entendi o efeito que você quer.
Este efeito você acha na minigui:
D:\Minigui\SAMPLES\Advanced\TaskBarNotifier
Agora sim entendi o efeito que você quer.
Este efeito você acha na minigui:
D:\Minigui\SAMPLES\Advanced\TaskBarNotifier
►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)
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)
-
Adalberto
- Usuário Nível 3

- Mensagens: 343
- Registrado em: 01 Set 2007 01:09
- Localização: Santa Cruz de la Sierra - Bolivia
mensagens subindo e descendo
Abel, buenas noches.
Sólo con ánimo de ayudar, te entrego este código en clipper puro e duro, espero que te sirva.
Saludos, desde Santa Cruz de la Sierra - Bolivia.
[ ] Adalberto
Sólo con ánimo de ayudar, te entrego este código en clipper puro e duro, espero que te sirva.
Código: Selecionar todos
FUNCTION MAIN()
acMat:= ''; acVector:= {}; cRayaFin:= ''
cTxt01:= cTxt02:= cTxt03:= cTxt04:= cTxt05:= cTxt06:= cTxt07:= cTxt08:= cTxt09:= ''
nLen:= Llenar('Esta es una demostraci¢n;de un cuadro con mensaje;que aparece de un lateral;Y AYUDAR A UN AMIGO')
FOR nJ:= 1 TO nLen
cJ:= STRZERO(nJ, 2, 0)
FOR nI:= 1 TO (LEN(acVector) + 2)
cI:= STRZERO(nI, 2, 0)
@ nI,1 SAY RIGHT(cTxt&cI., nJ)
NEXT nI
INKEY(.02)
NEXT nJ
INKEY(0)
RETURN NIL
//
STATIC FUNCTION Llenar(cTxt)
WHILE .T.
nPos:= AT(';', cTxt)
IF EMPTY(nPos)
EXIT
ENDIF
AADD(acVector, LEFT(cTxt, (nPos - 1)))
cTxt:= SUBS(cTxt, (nPos + 1))
ENDDO
AADD(acVector, cTxt)
cTxt:= acVector[1]
FOR nI:= 1 TO LEN(acVector)
IF (LEN(acVector[nI]) > LEN(cTxt))
cTxt:= acVector[nI]
ENDIF
NEXT nI
FOR nI:= 1 TO LEN(acVector)
cI:= STRZERO(nI+1, 2, 0)
nLen:= LEN(acVector[nI])
nMitad1:= ROUND(((LEN(cTxt) - nLen) / 2), 0)
nMitad2:= ((LEN(cTxt) - nLen) - nMitad1)
cTxt&cI:= ('³' + SPACE(nMitad1) + acVector[nI] + SPACE(nMitad2) + '³')
NEXT nI
cI:= STRZERO((VAL(cI) + 1), 2, 0)
cTxt01:= ('Ú' + REPL('Ä', LEN(cTxt)) + '¿')
cTxt&cI.:= ('À' + REPL('Ä', LEN(cTxt)) + 'Ù')
RETURN(LEN(cTxt)+2)
[ ] Adalberto
mensagens subindo e descendo
Acho que é isso que você quer.
- Anexos
-
taskbar.zip- Exemplo de notificação taskbar
- (554.1 KiB) Baixado 122 vezes
►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)
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)
mensagens subindo e descendo
asimoes, tentei baixar taskbar.zip , mas esta dando como corrompido.
Abraços,
Abel
Abraços,
Abel
mensagens subindo e descendo
Abel
Eu baixei o anexo sem problemas.
Pergunto para quem já baixou, teve problemas.
Eu baixei o anexo sem problemas.
Pergunto para quem já baixou, teve problemas.
►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)
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)

