Dica: Cores do savescreen no xharbour

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
linux.eo
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 09 Out 2005 19:23

Dica: Cores do savescreen no xharbour

Mensagem por linux.eo »

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.
Responder