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!! :{