Página 1 de 1
Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 11:21
por labaroazul
Bom dia!
Estou tentanto dar uma "embelezada" em um sistema e gostaria de saber se, no Clipper, tem algum jeito de imitar aquele efeito de sombra "transparente" dos menus do Edit do Ms-dos. A sombra não fica preta, dá pra ver o que está escrito no fundo.
É só uma curiosidade!
:{
Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 11:28
por Pablo César
Aqui no fórum na seção de "Downloads" tem, dê uma olhada:
https://pctoledo.org/forum/filebase.php?search=1
Também tem este exemplo:
Re: Como fazer sombra "transparente" comoa do Edit do Ms-Dos?
Enviado: 07 Mai 2008 11:29
por Daniel
eu uso esta função do miro
Código: Selecionar todos
@ 13, 19 Prompt " 1-> Cadastro Entrada de N.F. "
@ 14, 19 Prompt " 2-> Consulta Entrada de N.F. "
@ 15, 19 Prompt " 3-> Relat¢rio Entrada de N.F. "
shadow(12, 18, 16, 50)
Menu To ows
********************************
Function Shadow(LIN_SUP,COL_SUP,LIN_INF,COL_INF)
LIN_INF=LIN_INF+1
LIN_SUP=LIN_SUP-1
COL_INF=COL_INF+2
COL_SUP=COL_SUP-2
IF PCOUNT()=2 .OR. PCOUNT()=3
C_SOM=COL_SUP
L_SOM=LIN_SUP
LIN_SUP=VAL(SUBS(C_SOM,1,2))
COL_SUP=VAL(SUBS(C_SOM,3,2))
LIN_INF=VAL(SUBS(C_SOM,5,2))
COL_INF=VAL(SUBS(C_SOM,7,2))
COL_SOM=SUBS(C_SOM,9)
LIN_SOM=L_SOM
ENDIF
IF COL_SUP<2 .OR. LIN_INF>22
C_SOM=""
L_SOM=""
RETURN .F.
ENDIF
IF PCOUNT()=3
RESTSCREEN(LIN_SUP+1,COL_INF+1,LIN_INF,COL_INF+2,COL_SOM)
RESTSCREEN(LIN_INF+1,COL_SUP+2,LIN_INF+2,COL_INF+2,LIN_SOM)
RETURN .F.
ENDIF
IF PCOUNT()<>2
COL_SOM=SAVESCREEN(LIN_SUP+1,COL_INF+1,LIN_INF,COL_INF+2)
LIN_SOM=SAVESCREEN(LIN_INF+1,COL_SUP+2,LIN_INF+2,COL_INF+2)
ENDIF
COL_SOM=SUBS(COL_SOM,1,((LIN_INF-LIN_SUP)+1)*4)
LIN_SOM=SUBS(LIN_SOM,1,((COL_INF-COL_SUP)+1)*4)
IF SUBS(COL_SOM,2,1)<>CHR(7)
C_SOM=STR(LIN_SUP,2)+STR(COL_SUP,2)+STR(LIN_INF,2)+STR(COL_INF,2)+COL_SOM
L_SOM=LIN_SOM
ENDIF
FOR I=2 TO LEN(COL_SOM) STEP 2
COL_SOM=STUFF(COL_SOM,I,1,CHR(8))
NEXT
FOR I=2 TO LEN(LIN_SOM)/2 STEP 2
LIN_SOM=STUFF(LIN_SOM,I,1,CHR(8))
NEXT
RESTSCREEN(LIN_SUP+1,COL_INF+1,LIN_INF+1,COL_INF+2,COL_SOM)
RESTSCREEN(LIN_INF+1,COL_SUP+2,LIN_INF+2,COL_INF+2,LIN_SOM)
RETURN .T.
Re: Como fazer sombra "transparente" comoa do Edit do Ms-Dos?
Enviado: 07 Mai 2008 11:31
por Maligno
Você terá de trabalhar em cada byte de cor da área de sombra, individualmente. Mas pelo menos o truque é simples: altere o byte de cor para fundo preto (0) e frente preto enfatizado (8), ou seja, 08 (hexa), mantendo o byte do caractere intacto, claro.
Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 11:57
por Pablo César
Sei também que o Clipper possue uma função interna de sombra que faz parte do "undocumented" functions, mas não lembro onde tem a respeito.
Re: Como fazer sombra "transparente" comoa do Edit do Ms-Dos?
Enviado: 07 Mai 2008 12:06
por alaminojunior
Sei também que o Clipper possue uma função interna de sombra que faz parte do "undocumented" functions, mas não lembro onde tem a respeito.
DBGSHADOW(10,10,20,50)
É tiro e queda !!!
Re: Como fazer sombra "transparente" comoa do Edit do Ms-Dos?
Enviado: 07 Mai 2008 12:19
por Maligno
Pablo César escreveu:Sei também que o Clipper possue uma função interna de sombra que faz parte do "undocumented" functions, mas não lembro onde tem a respeito.
Não conheço. Mas isso nem é tão importante, a meu ver. É coisa fácil de fazer. Fiz minha própria função em pouco tempo.

Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 12:59
por Pablo César
alaminojunior escreveu:DBGSHADOW(10,10,20,50)
É tiro e queda !!!
É isso aí colega, valeu !
Maligno escreveu:Não conheço. Mas isso nem é tão importante, a meu ver.
Agora você conhece. O efeito é o mesmo e com menos linha de programação, veja tem dois exemplos:
Código: Selecionar todos
SETCOLOR("N/BG")
CLS
FUN_DO:=PADR("® Clipper on Line ¯",50)
FUN_DO:=SUBSTR( FUN_DO + REPLICATE( FUN_DO, 1840 / LEN( FUN_DO ) ), 1, 1840 )
FOR CONTAR=0 TO 24
@ CONTAR, 00 SAY SUBSTR( FUN_DO, CONTAR * 80 - 79, 80 )
NEXT
SETCOLOR("W/B")
@ 05,05 CLEAR TO 15,33
SOMBRA2(05,05,15,33)
@ 05,42 CLEAR TO 15,70
DBGSHADOW(05,42,15,70)
FUNCTION SOMBRA2(LS,CS,LI,CI)
COL=SAVESCREEN(LS-1,CS-1,LI-1,CS-1)
LIN=SAVESCREEN(LS-1,CS-1,LS-1,CI-1)
FOR I = 2 TO LEN(COL) STEP 2
COL=STUFF(COL,I,1,CHR(8))
NEXT
FOR I = 2 TO LEN(LIN) STEP 2
LIN=STUFF(LIN,I,1,CHR(8))
NEXT
RESTSCREEN(LS-1,CS-1,LI-1,CS-1,COL)
RESTSCREEN(LS-1,CS-1,LS-1,CI-1,LIN)
RETURN
Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 13:39
por Maligno
A função DBGShadow() não é não-documentada. Ela apenas foi omitida do NG, provavelmente por falha no processo de documentação. Ela até aparece na lista de palavras reservadas.
Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 14:01
por Pablo César
Maligno escreveu:A função DBGShadow() não é não-documentada. Ela apenas foi omitida do NG, provavelmente por falha no processo de documentação.
Será ?. Na internet esta função como a DISPOUTAT() são mencionadas por vários autores e todos mencionam como não documentadas. Mesmo sendo mencionadas no reserved.ch. Eu por exemplo não tenho lido nada em livros sobre essas funções, portanto eu também deveria considerá-las como
non-documented functions.
Enviado: 07 Mai 2008 14:15
por Maligno
Há uma diferença entre objeto não documentado por falha e não documentado por conveniência. As funções DBGShadow() e __xdo() são dois exemplos. A primeira não apareceu provavelmente por falha do documentador. A segunda por conveniência ou precaução (sabe-se lá) do fabricante. Sem falar dos ponteiros internos que variam de versão pra versão. Não seria prudente publicar algo que seria restrito.
Mas é como eu disse: isso não tem lá muita importância. O fato concreto é que elas não constam na documentação.

Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 07 Mai 2008 21:18
por Manuel Luis Modernel
Boa Noite amigos !
Gostaria de saber o que VC´s chamam de "Sombra Transparente" , abri o Edit do Dos e nos menus encontrei "titulos" que mudam de cor no texto e na cor do fundo.
è isto mesmo

?, Mudar a cor para aparentar "desabilitado" ?? Mudar fundo e texto ficando tipo "desbotado" ??
Se for isto, eu fazia com uma linha só, assim:
set color to n/w+ (Isto dá fundo cinza claro com letras cinza escuro)
Enviado: 07 Mai 2008 23:44
por Maligno
Não é isso, Modernel. O colega está se referindo àquela sombra em torno das janelas.
Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 10 Mai 2008 12:02
por Manuel Luis Modernel
Oi Maligno, obrigado !
Agora prestei mais atenção e me localizei "na tar" de sombra transparente, e a dizer verdade nunca tinha reparado nela, já fiz sombras em janelas POP-UP, mais nunca vi se eram ou não transparentes, probavelmente NÃO.
Eu limpava uma area "deslocada de um caracter para abaixo e para direita" com o Clear to e depois desenhava a janela de menús por cima, sobrando a parte da sombra.
Achei bacana o efeito transparente, vou tentar fazer no meu velho Summer !
Re: Como fazer sombra "transparente" como a do Edit do Ms-Dos?
Enviado: 23 Mai 2008 10:12
por labaroazul
Valeu gente!

)
Usando a função DBGShadow() consegui o efeito que queria: o que chamei de "sombra transparente" mostrando o conteúdo abaixo da sombra com cores invertidas!
Meus menus e caixas ficaram muito bons com isso!

) :{
Obrigado!! :{