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.
Dica: Cores do savescreen no xharbour
Moderador: Moderadores
