Janelas fora do padrão
Como fugir do feijão-com-arroz, tão característico do windows

Os ambientes operacionais gráficos foram "pensados", desde o projeto pioneiro da Xerox e passando pelo estrondoso fracasso da Apple, chamado Lisa, para aliar o poder de processamento dos computadores à linguagem visual, que o ser humano compreende com muito mais facilidade do que a linguagem escrita. O propósito era sair daqueles ambientes estéreis, onde predominava a palavra, para algo (imagem) que traduzisse visualmente idéias e conceitos. De preferência, reproduzindo visualmente o mundo real, no que se convencionou chamar metáforas visuais.

Da idéia à prática decorreram anos e anos de experimentos, sistemas alternativos e muita discussão, até que fossem aceitos tais conceitos pela comunidade técnica, que é geralmente impermeável a estes aspectos. Isto não é nenhuma novidade, pois lidar com comunicação visual demanda, em primeiro lugar, uma boa dose de sociologia e observação comportamental, coisa que nenhum programador ou analista de sistema está apto a empreender sem uma prévia preparação. Daí ter demorado tanto a popularização de sistemas como o Windows e seus primos mais destacados. E, mesmo nos dias atuais, podemos considerar que os aspectos mais importantes da comunicação, nesses sistemas, ainda é sub-utilizada.

Quando usamos um ambiente gráfico, como é o caso do Windows, nada nos impede de extrapolar o visual dos nossos programas. Na verdade, o único empecilho aos devaneios dos autores é mesmo a falta de criatividade e o preconceito com as formas que fogem um pouco do padrão convencional.

Neste ponto o Windows abriu uma "janela" de possibilidades incríveis, mas que não vem sendo explorada de uma forma mais intensa. Na verdade, é possível dizer até que os programas gráficos, feitos sob o DOS, são muito mais avançados estética e funcionalmente falando do que os programas feitos sob o próprio Windows. Aliás, não existe nada mais "quadrado" do que um programa for win.

Claro, existem exceções e, neste caso específico, elas podem ser encontradas exatamente onde seria de se esperar: naqueles segmentos mais ligados à produções de cunho cultural (notadamente a música). Curioso como os programas gráficos e de desktop publishing, que deveriam valer-se desses recursos com muito mais propriedade, são os mais "caretas" do mercado.

Lembro-me que ainda no tempo do Windows 3.1 (há um século atrás, em termos de informática) deparei com um dos primeiros programas que fugia do esquemão "janelas": os players que acompanhavam as recém lançadas placas de som Sound Blaster de 16 bits. Fiquei maravilhado, pois alí estava a prova de que era possível quebrar certos tabus.

Apesar destes primeiros exemplos de rebeldia visual ainda se manterem dentro da estrutura retangular, mostrou-se alí que poderíamos ter botões, displays, controles deslizantes, etc, etc, etc, e que esses controles não perdiam em eficiência para os componentes normais do Windows. Ao contrário, tornavam os programas mais bonitos, mais funcionais e com um estilo gráfico marcante.

Um dos destaques dessa fase inicial e que pode ser encontrado até hoje, é o Kay Krause, que produziu o primeiro software de uso gráfico que literalmente mudou o conceito de "janela quadrada" do Windows. Foi, é claro, considerado louco, esquisito e um monte de outras coisas e seus programas, da série KPT (Kay's Power Tools), passaram a sofrer de uma relação amor/ódio por parte dos usuários.

Mas o tempo passou, novas experiências foram surgindo e hoje já podemos encontrar aqui e alí, programas que "escapam" da camisa de forma que o padrão visual do Windows tenta impor. O próprio Key Krause, vez por outra, ensaia vôos mais arriscados.

Podemos então dividir em dois tipos, esses programas: aqueles que, apesar de se mostrarem diferentes ainda se mantém dentro da estrutura retangular das janelas e aqueles de extrapolam até mesmo esses limites. Dos primeiros apresento imagens de players, um de música e outro de vídeo mpeg.

Do segundo tipo tenho dois exemplos fantásticos: um do Key:7 uma ferramenta de aplicação de efeitos sob imagens, que extrapola tudo o que é mais sagrado, na programação Windows e um incrível player de arquivos VQF, que por sí só já constitui uma nova tendência em termos de arquivo de sons (músicas digitalizadas). Só esses poucos exemplos já dariam, cada um, uma matéria extensa, mas por hora ficaremos apenas nas imagens, pois o propósito aqui é outro.

Na verdade, esta matéria nasceu de uma questão levantada na lista de discussão da TILT, onde um leitor perguntou exatamente da possibilidade de "sair" das janelas, na confecção de um jogo.

Aqui no club TILT foi apresentado, há algum tempo, uma matéria onde se mostrava como, no projeto editorial da TILT disquete, tínhamos feito uma figura de abertura muito especial. Tratava-se de uma mão segurando um disquete e, ao clicar sobre o mesmo, o programa principal era acionado. Antes porém o disquete abria a sua capa protetora, numa animação feita com duas imagens. O mais interessante é que a cada nova edição, uma mão diferente era usada para segurar o disquete.

Embora a solução que criamos para o caso dos disquetes envolva apenas BitBlt e máscaras, não é uma solução perfeita. Tivemos que pesquisar um pouco, até encontrar uma resposta mais adequada.

E ela surgiu de um recurso especial do Windows (e por tabela do ambiente gráfico) chamado de região. Uma região nada mais é do que uma ára onde o sistema operacional permite que os aplicativos (e ele mesmo) escrevam (plotem gráficos/pixels). É em essência o retângulo característico das janelas, porém não precisa se necessariamente...

Exprimente, num form novo, criar um botão e nele escrever o seguinte processamento:

var
  hR: THandle;
begin {cria uma Reigião elíptica}
  hR:= CreateEllipticRgn(0,0,400,200);
  SetWindowRgn(Handle,hR,True);
end;

Bacaninha, não é? Ora, mas um retângulo nada mais é do que um polígono...

var
  hR: THandle;
  pontos: array[0..5] of TPoint;
begin
  pontos[0].x:= 0; pontos[0].y:= 0;
pontos[1].x:= 100; pontos[1].y:= 100;
pontos[2].x:= 150; pontos[2].y:= 500;
pontos[3].x:= 500; pontos[3].y:= 300;
pontos[4].x:= 300; pontos[4].y:= 20;
pontos[5].x:= 0; pontos[5].y:= 0;
hr:= CreatePolygonRgn(Pontos,6,winding);
SetWindowRgn(Handle,hR,True); end;

Pronto, a imaginação é o limite...

Mas ainda tem um porém: para imagens mais complexas fica complicado calcular ou mesmo desenhar o polígono à mão (além de que qualquer alteração nos forçará a fazer todo o trabalho novamente. Para esses casos, bolamos uma procedure que "varre" uma image base (TImage), chamada Img e cria uma máscara de região. Coloque-a em qualquer lugar do seu programa e faça uma chamada a ela no OnCreate. Todos os elementos e componentes do jogo devem estão estar dentro da área útil da imagem. Usamos a cor fuchsia para determinar a área transparente.

procedure TForm1.TransCriar;
var
MaskMap: TBitmap;
LinRgn,SpRgn,WinRgn: HRGN;
Lin,Col,Cor: integer;
Sl: PByteArray;
SpEsq,SpDir: integer;
begin
BorderStyle:= bsNone;
BorderIcons:= [];
MaskMap:= TBitmap.Create;
MaskMap.Width:= Imp.Width;
MaskMap.Height:= Imp.Height;
MaskMap.Assign(Imp.Picture.Bitmap);
MaskMap.Mask(clFuchsia);
MaskMap.Canvas.CopyMode:= cmDSTINVERT;
MaskMap.Canvas.Draw(0,0,MaskMap);
MaskMap.PixelFormat:= pf8Bit;
MaskMap.Canvas.CopyMode:= cmSRCCOPY;
Height:= Imp.Height;
Width:= Imp.width;
WinRgn:= CreateRectRgn(0,0,0,0);
for Lin:= 0 to Height-1 do begin
LinRgn:= CreateRectRgn(0,Lin,0,Lin);
Sl:= MaskMap.scanline[Lin];
SpEsq:= 0; SpDir:= 0;
repeat
Col:= SpEsq;
Cor:= Sl[Col];
repeat
Col:= Col + 1;
until (Cor <> Sl[Col]) or (Col >= Width);
SpDir:= Col - 1;
if Cor <> 0 then begin
SpRgn:= CreateRectRgn(SpEsq,Lin,SpDir+1,Lin+1);
CombineRgn(LinRgn, LinRgn, SpRgn, RGN_OR);
DeleteObject(SpRgn);
end;
SpEsq:= SpDir+1;
until (SpDir >= Width);
CombineRgn(WinRgn, WinRgn, LinRgn, RGN_OR);
DeleteObject(LinRgn);
end;
SetWindowRgn(Handle,WinRgn,True);
MaskMap.Free;
end;

No pacote zipado, no final desta página, tem a imagem do computador abaixo e um txt com a procedure, para você testar e brincar à vontade. De agora em diante, seus jogos em Delphi terão aquele "ar" profissional que só os grandes desenvolvedores conseguem dar.


Download...
Clique no link para fazer o download dos arquivos. Se sua assinatura do club TILT está para vencer, clique aqui e saiba como renová-la.

jan.zip A procedure em formato txt
 
online