A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Assembly - Fontes (masm)

Ter

21

Abr

2009


11:52

(2 votos, média 5.00 de 5) 


Nível intermediário

Mudando o visual do Menu Malandro. Como trabalhar com fontes e cores. O uso de macros para facilitar a programação.

Neste tutorial vamos fazer a brincadeira da janela "fujona" ficar um pouco mais colorida. O projeto é o mesmo do tutorial anterior, o "Menu Malandro", no qual incluiremos algumas funções que lidam especificamente com fontes.

O que são fontes

No Windows, uma fonte é uma coleção de caracteres e símbolos gráficos que compartilham um estilo (ou um design). Os três elementos mais importantes deste estilo são o tipo, o estilo e o tamanho.

O termo TIPO refere-se às características específicas dos caracteres e símbolos da fonte, como a largura das linhas finas e grossas que compõem os caracteres e a presença ou ausência de serifs. Um serif é uma pequena linha que serve como "acabamento" de linhas não conectadas (por exemplo, as pequenas linhas horizontais nos "pés" da letra M na fonte Times New Roman - M). Uma fonte sem serif geralmente é denominada sans-serif.

O termo ESTILO refere-se ao peso (espessura das linhas) e à inclinação de uma fonte. O peso pode variar de super-leve até super-pesado, ou seja: fino (Thin), extra leve (Extralight), leve (Light), normal (Normal), médio (Medium), semi-negrito (Semibold), negrito (Bold), extra-negrito (Extrabold) e pesado (Heavy). A inclinação pode ser romana, oblíqua ou itálica. Os caracteres de uma fonte romana ficam alinhados na vertical (diz-se que ficam "em pé"). Os de uma fonte oblíqua são inclinados artificialmente. Esta inclinação é obtida podando-se os caracteres de uma fonte romana. Os caracteres de uma fonte itálica são inclinados autênticos e aparecem como foram desenhados.

No Windows, o TAMANHO das fontes é um valor impreciso. Geralmente pode ser determinado medindo-se a distância da base de um "g" minúsculo até o topo de um "M" maiúsculo adjacente. O tamanho de uma fonte é especificado em uma unidade chamada ponto. De acordo com o sistema de pontos idealizado por Pierre Simon Fournier, um ponto corresponde a 0.013837 polegadas (ou 0,3514598 milímetros). A grosso modo, isto corresponde a 1/72 de polegada (ou 1/3 de milímetro).

O Windows organiza as fontes por família. Uma FAMÍLIA é um conjunto de fontes que possuem a mesma espessura e características serif. Existem cinco famílias com nomes específicos. Um sexto nome, o "Dontcare", permite que um aplicativo utilize a fonte padrão. A tabela a seguir descreve os nomes das famílias de fontes:

Nome da FamíliaDescrição
Decorative Denomina uma fonte nobre. Um exemplo é a Old English.
Dontcare Um nome de família genérico. É usado quando não há informações sobre a fonte ou quando as informações não têm importância.
Modern Especifica uma fonte monospace com ou sem serifs. Fontes monospace geralmente são modernas. Exemplos: Pica, Elite, and Courier New®.
Roman Fonte proporcional com serifs. Um exemplo é a Times New Roman.
Script Especifica fontes desenhadas para se parecerem com escrita manual. São exemplos a Script e a Cursive.
Swiss Para fontes proporcionais sem serifs. Um exemplo é a Arial.

Estes nomes de famílias correspondem a constantes do Windows: FF_DECORATIVE, FF_DONTCARE, FF_MODERN, FF_ROMAN, FF_SCRIPT e FF_SWISS. Um aplicativo usa estas constantes quando cria, seleciona ou obtém informações sobre uma fonte.

As fontes de uma mesma família distinguem-se pelo tamanho (10 pontos, 24 pontos, etc) e pelo estilo (regular, itálico e assim por diante).

As cores no Windows

Esta pequena introdução ao sistema RGB é necessária para podermos criar o código fonte do exemplo.

No Windows, as cores são expressas pela sua composição de vermelho, verde e azul. É o sistema RGB, onde R = Red (vermelho), G = Green (verde) e B = Blue (azul). Os valores para estas cores básicas podem variar de 0 a 255, onde 0 é nada e 255 é o máximo. Se quisermos indicar vermelho puro no máximo a composição será R = 255, G = 0 e B = 0. Branco é o resultado da composição do máximo das três cores básicas e indicado por 255,255,255. Preto, por sua vez, é a ausência de todas as cores - 0,0,0.

Preparando as cores

Use o código fonte do tutorial Menu Malandro como base para o código fonte deste tutorial.

Antes de iniciarmos a criação e o uso de fontes, vamos preparar uma macro cuja função será devolver o valor correspondente a uma cor em RGB no registrador EAX. Mas o que são macros?

Uma das grandes vantagens do MASM é que ele é um "MACRO assembler", cuja tradução literal é "construtor de macros". Um macro assembler pre-processa o texto antes que o assembler leia e compile o código. Esta característica propicia ao programador a facilidade de escrever procedimentos MACRO que ampliam ou modificam o código fonte. Com o uso de macros, o código fonte pode ser escrito de uma forma mais rápida e confiável. MACROS são as armas secretas na produção de código, pois realizam tarefas específicas na manipulação de código. Podem ser usadas com vários propósitos, desde uma simples substituição de texto até loops de expansões complexas de código repetitivo.

Vamos fazer da macro RGB o nosso exemplo: ... RGB MACRO red, green, blue xor eax, eax mov ah, blue shl eax, 8 mov ah, green mov al, red ENDM .DATA ...

Cada vez que usarmos RGB seguido dos valores da intensidade das cores, por exemplo RGB 255,96,128, o texto destacado em negrito será substituído pelo texto da macro definido acima. O que esta macro faz é o seguinte:

  1. Zera o registrador EAX com a instrução XOR EAX,EAX.
  2. Transfere para o byte mais significativo (8 bits) de EAX o valor da cor azul (EAX = 00 00 80 00).
  3. Desloca os bits do byte mais significativo 8 posições para a esquerda (EAX = 00 80 00 00).
  4. Transfere para o byte mais significativo de EAX o valor da cor verde (EAX = 00 80 60 00).
  5. Transfere para o byte menos significativo de EAX o valor da cor vermelha (EAX = 00 80 60 FF).

Esta macro tem uma ampla aplicação na programação assembly. Seu uso é tão frequente que é bom mantê-la sempre à mão.

Informações adicionais