CAPÍTULO 3
Programação visual com Software Livre
EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo.  Prólogo de Benoit Minisini


3.7 Introdução ao desenhos de primitivas




Alem dos controles já desenhado, o programador pode necessitar desenhar gráficos personalizados. A classe estática Draw é empregado para desenhar sobre um controle, que pode ser um formulário ou um controle DrawingArea.

Desenhar diretamente sobre um formulário não faz sentido, já que uma vez refresque a interface, por exemplo quando passar uma janela ou minimizar e maximizar, se perde o desenho

Realizado sem  que tenhamos controle sobre a situação.DrawingArea dispõe de dois modos de trabalho: o primeiro como é o caso do formulário, perde-se o desenho uma vez refrescado o controle, mas o evento Refresh nos informa para que redesenhamos a parte eliminada;  e o segundo que é ativado quando quando fazemos a propriedade Cached igual a TRUE o controle guarda um cache do desenho realizado e não gera eventos Refresh, sendo que redesenha automaticamente a zona clareada.
 
Como exemplo, criaremos um projeto gráfico Desenhando, que contenha um formulário FMain, e em seu interior um controle DrawingArea chamado Tela  e um botão chamado Desenhar.

A propriedade Cached do controle DrawingArea colocamos como TRUE.

O código do botão desenhar será o seguinte:
Figura 39
Figura 39. Projeto Desenhando

PUBLIC SUB
Button1_Click()

Draw.Begin(Tela)

Draw.Line(0, 0, Tela.W, Tela.H)

Draw.Line(0, Tela.H, Tela.W, 0)

Draw.End

END
Ao  executarmos o programa e pressionar o botão, aparecerá uma cruz criada por nosso código.

Figura 40
Figura 40.Resultado do nosso código

Este código contem, para qualquer desenho o método de trabalho seguinte:

*Em primeiro lugar, especificaremos a classe Draw que controle será empregado para desenhar os elementos que indiquemos, para o qual se empregou o método Draw.Begin() passando como parâmetro o controle desejado, em nosso caso o controle Tela.

*Depois disto passamos a desenhar as primitivas que desejarmos. Aqui vemos empregado o método Draw.Line(), o qual desenha linhas quando especificamos os pontos de origem e destino

*Finalmente, sempre tem que chamar o método Draw.End() para que o cache do controle DrawingArea desenhe-se na tela, e se liberem os recursos associados ao processo de desenhar do controle.

A classe Draw permite desenhar diversos tipos de primitivas:

*Draw.Ellipse: elipse.

*Draw.Line: linhas

*Draw.Point: pontos.

*Draw.Polyline: varias linhas enlaçadas

Draw.Polygon: poligonos.

*Draw.Rect: retângulos

Em todo momento podemos controlar diversos aspectos do desenho, utilizando o         seguinte:

*Draw.BackGround: cor de fundo do pincel.

*Draw.ForeGround: cor do primeiro plano do pincel.

*Draw.FillColor: cor para preencher elipse ou retângulo

*Draw.FillStyle: utiliza as constantes da classe Fill para determinar o padrão de desenho (preenchimento, rajado na horizontal, linhas e pontos, etc.).

Alem das primitivas, podemos desenhar elementos complexos como:

*Draw.Text:  Desenhar um texto em uma posição indicada e com a fonte selecionada por Draw.Font.

*Draw.Image: desenha um gráfico armazenado em um objeto Image.

*Draw.Picture: desenha um gráfico armazenado em um objeto Picture.







Cópia literal

Extraído do livro “GAMBAS, programação visual com software Livre”, da editora EDIT LIN EDITORIAL S.L,  dos autores  Daniel Campos Fernández e José Luis Redrejo. Prólogo de Benoit Minisini

LICENSA DESTE DOCUMENTO


É permitido a cópia e distribuição da totalidade ou parte desta obra sem fins lucrativo. Toda cópia total ou parcial devera expressar o nome do autor e da editora e incluir esta mesma licença, adicionando se é uma cópia literal “Cópia literal”. Se é autorizada a modificação e tradução da obra  sem fins lucrativo sempre se deve constar na obra resultante  a modificação o nome da obra original o autor da obra original e o nome da editora e a obra resultante também deverá ser livremente reproduzida, distribuída, ao publico e transformada em termos similares ao exposto nesta licença.

Tradução

Cientista
 (Antonio Sousa)