Uma
das coisas que mais chamou a atenção, no
projeto da TILT disquete, foi a mão segurando
um disco, que compõe a abertura do sistema. O que
mais despertou a curiosidade do pessoal ligado na programação
Delphi foi o fato das mãozinhas aparecerem sobre
a tela desktop do Windows 95, como se fossem um grande
ícone.
Se você
nem sabe do que estamos falando, então baixe o
pacote de programação, no final desta página
e rode o programa. Neste exemplo, ao clicar sobre a mão,
a placa de proteção do disquete irá
abrir e fim. Só isso, afinal é um exemplo
de como a mão funciona.
Esta criação,
cuja obra e arte ficou a cargo no nosso "criador de artes"
oficial, Bob Pixel, não é novidade
para quem acompanhou os projetos da PRO KIT. Ela
apareceu pela primeira vez nos discos Bitmap, no
tempo que as placas VGA de 16 cores ainda eram as mais
cotadas entre os usuários. Continuou sendo usada
quando o projeto passou a valer-se das 256 cores.
Mas até
esse ponto, o funcionamento de abertura do disquete era
bem simples de ser feito. Na verdade, tudo não
passava de uma tela sobreposta a outra. Nas versões
para Windows e principalmente no projeto da TILT disquete
a coisa se complicou um pouco. Foi preciso lançar
mão de uns truquezinhos, que mostraremos agora.
Preste atenção como as coisas se resolvem
de uma maneira prá lá de original.
A idéia
ainda é a mesma: apresentar uma mão segurando
um disquete e, ao clicar sobre o mesmo, abrir a portinhola
e executar o programa. Toda a nossa solução
se baseia na função BitBlt, que já
foi vista aqui na TILT online inúmeras vezes e
na correta criação das imagens.
Partimos
da figura acabada, como por exemplo a que se segue:
O primeiro passo é criar uma
máscara para ela:
A
seguir criamos a imagem da portinhola aberta, não
esquecendo (neste caso) nem do arranhão que a unha
irá provocar.
Essas figuras
são gravadas como BMP e depois carregadas
num formulário como TImages,
com os respectivos nomes de Mao, Masc e
Porta. Somente a porta deve estar com o atributo
Visible setado como False.
O truque
aqui é colocar a TImage
da Mão nas coordenadas 0,0 do Form1. Isso
é fundamental, pois a portinhola, apesar de invisível,
deverá estar exatamente na sua posição
final e "sobre" a TImage
Mão.
No evento
OnCreate do Form1
escrevemos o seguinte código:
var
Tela,Fig1,Fig2:
HBitmap;
begin
//Fazemos
o Form1 do tamanho da figura da mão
Form1.Width:=
Mao.Width; Form1.Height:= Mao.Height;
//Na
lateral esquerda da tela
Form1.Left:=
0;
//Na
metade da altura
Form1.Top:=
(Screen.Height - Mao.Height) div 2;
//Criamos
um handle para a tela
Tela:=
CreateDc('Display',nil,nil,nil);
//Criamos
um handle para a mão
Fig1:=
Mao.Canvas.Handle;
//Criamos
um handle para a máscara
Fig2:=
Masc.Canvas.Handle;
//Montamos
na máscara uma imagem do que será salvo
da tela
BitBlt(Fig2,0,0,Mao.Width,Mao.Height,Tela,Form1.Left,
Form1.Top,SRCAND);
//Agora
passamos tudo para a TImage Mao
BitBlt(Fig1,0,0,Mao.Width,Mao.Height,Fig2,0,0,SRCPAINT);
//Liberamos
o handle da tela
DeleteDc(Tela);
end;
Pronto,
com isso a mão irá aparecer como se fosse
um grande ícone na tela do Windows. No evento OnMouseDown,
da TImage Mao, colocamos
o seguinte código:
begin
Porta.Visible:= True;
end;
E para finalizar,
no evento OnMouseUp
colocamos o código de inicialização
do nosso programa, que poderia ser aquele código
normalmente colocado no evento OnCreate
ou OnActivate, do
Form1.
Viu como
é simples sair fora da rotina do Windows? Não
fizemos nenhum grande malabarismo e nosso programa ganhou
um toque especial, que o diferencia da grande maioria
dos programas que circulam por aí. Pense nisso
quando for apresentar seu mais novo programa aos seus
futuros "clientes".
Gostou? Clique
no link abaixo para baixar o fonte completo desta matéria.