Dica: Cores do savescreen no xharbour
Enviado: 13 Nov 2005 09:52
Compartilhando o que fiz durante algumas horas
da madrugada, para estas horas não ficarem
perdidas na minha lembrança...
Pelo que andei examinando, no xharbour
o resultado de um savescren é diferente do
resultado do Clipper.
Enquanto que no Clipper temos com retorno um
string contendo um caractere indicando o bloco
de desenho, e outro caractere indicando a cor
do conjunto:
Por exemplo:
@ 10,10 SAY "BRASIL" COLOR ("B/R")
tela1 = savescreen(10,10,10,15)
tela1 conteria "BARAAASAIALA"
Os A's após cada letra indica a cor do bloco.
Onde asc("A") = 65 -> 65%16=1=B e (65-1)/16=4=R
Este B é de Blue, e não de Brasil.
E o R é de Red, e não de bRasil...
Foi coincidência...
No xHarbour, teríamos algo diferente, como:
tela1 -> "B!..R!..A!..S!..I!..L!.."
Assim, enquanto que no clipper temos apenas 1 elemento
para representar a cor do bloco, no xharbour temos
3 elementos.
Neste caso, !=33, .=0, .=0 (representei o CHR(0) como ".")
Depois de examinar os resultados das cores,
cheguei à seguinte fórmula de conversão:
33%8=1 = B (azul)
(33-1)/8=4 = R (vermelho)
Ao invés de trabalhar com 16, ele trabalha com 8.
Mas quando tivermos alguma cor entre 8 e 15,
o segunto elemento mudará, podendo assumir os
valores 0,32,8,40.
Nos meus testes, o terceiro elemento foi sempre 0.
Examinando o segundo elemento:
00 - cor do caractere é <8, cor do fundo é <8
32 - cor do caractere é >=8, cor do fundo é <8
08 - cor do caractere é <8, cor do fundo é >=8
40 - cor do caractere é >=8, cor do fundo é >=8
E para finalizar, após as devidas conversões,
terminamos com os seguintes erros:
Cores que deveriam ser | Cores calculadas
0/0 7/0
7/0 0/0
8/0 15/0
15/0 8/0
0/8 7/8
7/8 0/8
8/8 15/8
15/8 8/8
Aí é só fazer um "CASE" para estes "casos"
e pronto, dominamos as cores no xHarbour.
Esta dica serve para substituir a função Sombra.
Meu objetivo foi poder pegar a cor do fundo
antigo, para que o fundo das bordas de um
novo objeto que pretendo desenhar seja
igual ao fundo já utilizado.
da madrugada, para estas horas não ficarem
perdidas na minha lembrança...
Pelo que andei examinando, no xharbour
o resultado de um savescren é diferente do
resultado do Clipper.
Enquanto que no Clipper temos com retorno um
string contendo um caractere indicando o bloco
de desenho, e outro caractere indicando a cor
do conjunto:
Por exemplo:
@ 10,10 SAY "BRASIL" COLOR ("B/R")
tela1 = savescreen(10,10,10,15)
tela1 conteria "BARAAASAIALA"
Os A's após cada letra indica a cor do bloco.
Onde asc("A") = 65 -> 65%16=1=B e (65-1)/16=4=R
Este B é de Blue, e não de Brasil.
E o R é de Red, e não de bRasil...
Foi coincidência...
No xHarbour, teríamos algo diferente, como:
tela1 -> "B!..R!..A!..S!..I!..L!.."
Assim, enquanto que no clipper temos apenas 1 elemento
para representar a cor do bloco, no xharbour temos
3 elementos.
Neste caso, !=33, .=0, .=0 (representei o CHR(0) como ".")
Depois de examinar os resultados das cores,
cheguei à seguinte fórmula de conversão:
33%8=1 = B (azul)
(33-1)/8=4 = R (vermelho)
Ao invés de trabalhar com 16, ele trabalha com 8.
Mas quando tivermos alguma cor entre 8 e 15,
o segunto elemento mudará, podendo assumir os
valores 0,32,8,40.
Nos meus testes, o terceiro elemento foi sempre 0.
Examinando o segundo elemento:
00 - cor do caractere é <8, cor do fundo é <8
32 - cor do caractere é >=8, cor do fundo é <8
08 - cor do caractere é <8, cor do fundo é >=8
40 - cor do caractere é >=8, cor do fundo é >=8
E para finalizar, após as devidas conversões,
terminamos com os seguintes erros:
Cores que deveriam ser | Cores calculadas
0/0 7/0
7/0 0/0
8/0 15/0
15/0 8/0
0/8 7/8
7/8 0/8
8/8 15/8
15/8 8/8
Aí é só fazer um "CASE" para estes "casos"
e pronto, dominamos as cores no xHarbour.
Esta dica serve para substituir a função Sombra.
Meu objetivo foi poder pegar a cor do fundo
antigo, para que o fundo das bordas de um
novo objeto que pretendo desenhar seja
igual ao fundo já utilizado.