Programação Gráfica no Visual Basic

Este capítulo é uma introdução à programação gráfica do Visual Basic. Trabalhar com gráficos pode ser divertido, embora não seja necessariamente fácil. Naturalmente, o Windows é em essência um ambiente gráfico; lembre-se de que os melhores programas escritos para Windows fazem uso desse recurso.

Forms e Caixas de Imagem

Até este ponto, a maioria dos "desenhos" que você criou em Visual Basic foi feita em tempo de desenvolvimento. O Visual Basic também suporta métodos gráficos que lhe permitem escrever no vídeo em tempo de execução, realizando tarefas tais como impressão de texto, desenho de linhas, tracejamento de círculos, modificação de cores e assim por diante. Esses métodos estão associados a forms, caixas de imagens e a um tipo especial de objeto chamado Printer. A discussão a seguir concentra-se nos forms, porém as propriedades e métodos descritos aplicam-se também às caixas de imagens.

A impressão e o objeto Printer serão discutidos no capítulo 12.

Gerenciamento de Vídeo

As imagens em seu monitor são reflexo direto do conteúdo da memória de vídeo, um banco de RAM que pertence à placa controladora de vídeo. As imagens na tela são compostas por vários pontos individuais chamados de pixels (abreviatura para picture elements - elementos de imagem). A quantidade de pixels que compõe o vídeo determina quanta memória RAM é necessária. Um monitor monocromático requer apenas um bit para cada pixel. Quando o bit correspondente em RAM está no estado ON, o pixel no vídeo é iluminado. Quando o bit está em OFF, o pixel fica escuro. Se, por exemplo, a resolução do vídeo é de 640 por 320 pixels, serão usados 204.800 bits (640 x 320) ou 25.600 bytes da memória de vídeo para controlar a exibição.

Em um monitor colorido, é preciso mais de um bit para controlar o pixel, pois a cor é criada por meio de uma combinação de intensidades variáveis de vermelho, verde e azul. Dependendo do tipo de controladora, podem ser necessários de 4 a 32 bits por pixel para controlar o monitor colorido. (Quanto mais bits, mais cores poderão ser exibidas simultaneamente.) Em sistemas com maiores recursos, com grandes monitores coloridos, apenas a RAM de vídeo chega a atingir 4 megabytes.

Exibindo Gráficos

Todas as imagens de vídeo , desde linhas multicoloridas a textos simples, são criadas por meio de uma configuração dos bits apropriados na memória de vídeo. Os métodos gráficos do Visual Basic fazem toda a configuração de bits para você. Esses métodos gráficos, chamados de Print, Line, Circle e PSet, traçam textos, linhas, arcos e pontos individuais no vídeo. Além disso, um método chamado Point determina a cor de um ponto, e o método CIs limpa o form.

Em ambientes onde apenas um programa controla a exibição, a imagem traçada no vídeo permanece nele. O Windows, no entanto, é um ambiente multitarefa. Após ser traçada uma imagem sobre um form, o usuário pode mudar para um segundo aplicativo que traçará alguma coisa em algum lugar do vídeo . A confusão tem início quando o usuário, ao sair desse segundo aplicativo, espera rever a imagem criada pelo primeiro aplicativo, possivelmente sobreposta pelo segundo aplicativo.

O Windows resolve esse problema com o evento Paint, que é tratado por um procedimento de evento do Visual Basic. Se a exibição de um aplicativo for sobreposta por alguma outra janela, o Windows enviará o evento Paint para o aplicativo "sobreposto" quando este retomar o controle da exibição, permitindo que ele recrie a imagem do vídeo. O mesmo processo ocorre (sem interferência do aplicativo) quando você minimiza uma janela contendo imagens ou controles e então faz a sua restauração.

Um aplicativo simples pode demonstrar o que está acontecendo. Crie um novo projeto. Inclua o seguinte código como procedimento Click do form e então processe o programa:

Sub Form_Click ()

Print "Alô

End Sub

Dê alguns cliques no form para fazer com que o texto apareça no vídeo. Agora, minimize o form ou mova a janela de algum outro aplicativo sobre o form. Quando você restaurar o form, ativando-o novamente, poderá ver que o texto terá desaparecido.

Nesse caso, quando o form foi restaurado, o Visual Basic chamou o seu procedimento Form_Paint. Porém, como ele não tinha sido criado, nada aconteceu. Obviamente, se você tem intenção de escrever aplicativos gráficos, precisará codificar o procedimento de evento Paint para poder reconstruir as imagens. Isso requer um planejamento cuidadoso. A melhor abordagem é colocar toda a codificação gráfica no próprio procedimento Paint. Quando o programa estiver pronto para traçar a imagem pela primeira vez, chame esse procedimento diretamente. Com isso, tudo estará estruturado de forma que a chamada automática que o Visual Basic faz para o procedimento de evento Paint reconstrua as imagens necessárias.

Tente modificar o programa que você acabou de escrever para usar essa técnica. Em primeiro lugar, introduza o seguinte código na seção de declarações gerais:

' Inicializado como 0 pelo Visual Basic

Dim ContClick As Integer

Então, inclua estes dois procedimentos de eventos:

Sub Form_Click ()

ContClick = ContClick + 1

Form_Paint

End Sub

Sub Form_Paint ()

Dim I As Integer

' Limpar a tela, posicionando a

‘ impressão no topo do form.

Cls

For I = 1 To ContClick

Print "Alô"

Next I

End Sub

Ao processar essa versão do programa, tente minimizar ou sobrepor alguma outra janela à janela do form. Você verá que a exibição sempre retorna à aparência anterior quando o form é restaurado.

A Propriedade AutoRedraw

O Visual Basic também oferece uma técnica simples para recomposição de imagens. Todo form tem uma propriedade AutoRedraw, que por default é False. Caso essa propriedade seja configurada para True, o próprio Visual Basic tratará toda a recomposição.

Para testar isso, use o código original do programa Alô (sem incluir o procedimento Form_Paint):

Sub Form_Click ()

Print "Alô"

End Sub

Agora, configure a propriedade AutoRedraw para True, e pressione F5 para processar o aplicativo. Desta vez, o conteúdo do form não será perdido quando a sua janela for sobreposta ou minimizada, apesar de o programa não conter o procedimento Form_Paint.

Naturalmente, isso é uma armadilha. Ao configurar a propriedade AutoRedraw para True, você simplesmente transfere a responsabilidade sobre o gerenciamento da exibição para o Visual Basic. O Visual Basic desempenhará essa tarefa, alocando uma certa quantidade de memória (a quantidade de bits necessários para armazenar uma duplicata das imagens do aplicativo). Quando você traça desenhos no form , o Visual Basic atualiza a cópia na tal "memória de backup". Quando se torna necessário restaurar o form, o Visual Basic recupera a cópia na memória de backup, transportando-a para a memória de vídeo do sistema.

Portanto, é fundamental escolher entre programas simples que requeiram quantidade maior de memória, ou programas complexos que demandem menos memória. Enquanto você está escrevendo programas simples, aplicativos com um único form, provavelmente é mais adequado assinalar a propriedade AutoRedraw como True. Entretanto, à medida que seus aplicativos ficarem maiores, você desejará economizar a memória despendida com cópias de seus forms, e assim será necessário escrever os procedimentos Form_Paint.

Nota: Em aplicativos que não usem métodos gráficos, a propriedade AutoRedraw deve sempre ser configurada como False. Caixas de texto, rótulos, caixas de listas, caixas combinadas e outros controles semelhantes não são afetados pelos eventos Paint, tornando desnecessárias cópias de backup.

Coordenadas do Vídeo

O Visual Basic oferece um sistema de coordenadas default que especifica as localizações de objetos dentro de um form. Esse sistema, ilustrado na Figura 11.1, assinala as coordenadas (0,0) para o canto superior esquerdo do form; com valores que crescem à medida que você se movimenta para a direita ao longo do eixo horizontal e para baixo ao longo do eixo vertical. As propriedades Top e Left de um objeto indicam seu deslocamento a partir do ponto de origem (0,0).

  

Figura 11.1 O sistema de coordenadas do Visual Basic .

As propriedades Top, Left, Width e Height são medidas em twips. Como você deve se lembrar do Capitulo 5, um twip é a unidade de medida equivalente a 1/1440 de polegada ou 1/20 de um ponto. (Um ponto é aproximadamente 1/72 de polegada, isto é, a medida tipográfica padrão usada para dimensionamento de fontes de caracteres.) Assim, um objeto que tenha 1/2 polegada de altura e 2 polegadas de largura tem as propriedades Height e Width configuradas como 720 e 2880, respectivamente.

Caso seja mais confortável trabalhar com outras unidades de medida, você pode modificar a configuração da propriedade ScaleMode do form, para que o Visual Basic adote outra unidade para o sistema de coordenadas. A Figura 11.2 descreve as unidades de medida correspondentes às várias configurações da propriedade ScaleMode.

Pode-se ver facilmente o efeito da modificação da configuração de ScaleMode. Coloque um objeto da caixa de ferramentas em um form e examine a configuração das propriedades Top, Left, Height e Width do objeto. Modifique então a ScaleMode do form para 5; um controle cuja propriedade Height estava configurada em 720 (twips) terá agora a configuração 0,5 polegada. Se você mudar a ScaleMode para 6, a Height (altura) passará para 12,7 milímetros.

 

Figura 11.2 Configurações para a propriedade ScaleMode.

 

A configuração 4 para ScaleMode, que mede em caracteres, é um tanto quanto estranha, pois usa medidas diferentes para as escalas horizontal e vertical. Com as outras unidades de medida, um objeto que tem lados iguais é um quadrado. Ao usar caracteres como unidade de medida, um objeto com altura 6 e largura 12 é um quadrado com 1 polegada de lado.

ScaleMode 0

Ao configurar ScaleMode para 0, você poderá usar sua própria escala de medida. Para definir um sistema particular de unidades de medida, deve-se configurar as propriedades ScaleHeight e ScaleWidth. Por exemplo, se você assinalar ScaleWidth para 500, está dizendo ao Visual Basic para usar uma escala que contenha 500 unidades como largura total do form. Se, depois disso, você configurar a propriedade Width de um rótulo para 250, ele terá a largura correspondente à metade da largura do form, conforme mostrado na Figura 11.3. A propriedade ScaleHeight é configurada de forma similar. A unidade para altura (height) não precisa ter qualquer relação com a unidade de largura (Width).

Figura 11.3 Trabalhando com unidades de medida definidas pelo usuário.

Além das escalas horizontal e vertical, você também pode definir um ponto de origem diferente do canto superior esquerdo. A nova posição é definida pelas propriedades ScaleLeft e ScaleTop, que por default são 0. Assinalando novos valores para essas duas propriedades, você define um novo sistema de coordenadas. Por exemplo, assinalando 3 para ScaleLeft e -4 para ScaleTop, modifica-se as coordenadas do ponto de origem de (0,0) para (3,4). As coordenadas do canto inferior direito são definidas como (ScaleLeft + ScaleWidth, ScaleTop + ScaleHeight). Assim, se você configurar ScaleHeight para 17 e ScaleWidth para 10, as coordenadas do canto inferior direito passam a ser (13,13) no novo sistema de medidas, como mostra a Figura 11.4.

Figura 11.4 Sistema de coordenadas definido pelo usuário.

Se você quiser visualizar o form como um sistema de coordenadas cartesianas padrão, com ponto (0,0) no centro do form, conforme mostrado na Figura 11.5, assinale um valor positivo para a propriedade ScaleTop, e o seu correspondente valor negativo para a propriedade ScaleLeft. A Figura 11.5 ilustra um sistema de coordenadas onde o canto superior esquerdo foi definido como (-40,40), a propriedade ScaleWidth contém 80 e a propriedade ScaleHeight contém -80.

Figura 11.5 Sistema de coordenadas cartesianas definido pelo usuário.

A escala pode ser configurada pelo programa de duas formas diferentes: configurando as propriedades individualmente ou usando o método Scale. A sintaxe do método é a seguinte:

[objeto.]Scale [(Ieft, top)-(right, bottom)]

Observe que a sintaxe inclui apenas as coordenadas dos cantos superior esquerdo e inferior direito. O Visual Basic calcula as propriedades ScaleHeight e ScaleWidth a partir desses pontos. Assim, a instrução para configuração da escala para o form na Figura 11.5 deveria ser Scale (-40, 40)-(40, -40). Usar o método Scale sem parâmetros faz com que a escala de medida seja configurada para twips e reconfigurada a origem para o canto superior esquerdo, com coordenadas (0,0).

Equações e Grades

Se você está pensando que essas informações e mais alguns trocados podem valer um café e nada mais, espere um pouco. Na realidade, um sistema de medidas bem configurado pode simplificar consideravelmente a sua vida. Suponhamos que você esteja escrevendo um programa para representar funções matemáticas graficamente e que seja necessário construir o gráfico da equação y = x ^ 2 - 3x + 12 dentro do domínio -10 <= x <= 10. Usando a escala e o ponto de origem padrões, você teria de calcular a quantos twips para baixo e para a direita traçar os eixos, transformar cada valor de y e x para twips e adicionar o deslocamento do ponto de origem. Porém, se você definir uma sistema de coordenadas apropriado para a situação, precisará apenas calcular os valores de y e x; o Visual Basic faz o resto. A Figura 11.6 contém o programa que traça esse gráfico.

Figura 11.6 Código de programa para representar uma equação graficamente.

Dado um valor de X, a função FofX calcula Y de acordo com a fórmula.

Observe que o restante do programa trabalha independentemente da fórmula contida em FofX. O código principal é o procedimento Form_Paint, que é chamado pelo Visual Basic sempre que se torna necessário atualizar a área de exibição.

Em primeiro lugar, o programa configura a escala para o sistema padrão de coordenadas cartesianas, por meio da instrução Scale. A seguir, são traçados os eixos, por meio do método Line. Em sua forma mais simples, o método Line tem a seguinte sintaxe:

[objeto.]Line [(x1,y1)]-(x2,y2)

Com isso, seria traçada uma linha do ponto (x1,y1) até o ponto (x2,y2).

Finalmente, o programa plota o gráfico usando uma variante do método Line, sem especificação do ponto inicial. Nesse caso, o Visual Basic assume como ponto inicial a última posição conhecida cujas coordenadas estão armazenadas nas propriedades CurrentX e CurrentY do form. CurrentX e CurrentY precisam ser configuradas apenas uma vez no programa; após a execução de cada instrução Line, o Visual Basic atualiza a configuração dessas propriedades.

Você pode abrir um novo form, incluir esse código e executá-lo sem controles ou rotinas adicionais. Um exemplo da saída é mostrado na Figura 11.7.

Figura 11.7 O gráfico para a função FofX.

Repare que o código mostrado na Figura 11.6 usou o valor default (1) para Step. Para melhorar a resolução do gráfico (plotar uma quantidade maior de pontos), inclua a cláusula Step na instrução For, conforme mostrado aqui:

For X = -10 To 10 Step 0.1

Ainda que não tenha plotado qualquer gráfico desde a escola secundária, você achará muito útil um sistema de medidas definido pelo usuário para tarefas como desenho de tabuleiro de xadrez ou para a construção de grades para jogos semelhantes ao GO. Você pode definir uma escala personalizada que tenha a dimensão de sua grade - por exemplo, 0 a 8 (ou 1 a 9) para tabuleiro de xadrez. Então, em vez de ter de calcular a localização das linhas, você poderá traçá-las nas posições 0, 1, 2 e assim por diante. O código mostrado na Figura 11.8 traça a grade de 8 por 8 que aparece na Figura 11.9.

Figura 11.8 Código de programa para desenhar uma grade 8 por 8.

Figura 11.9 Uma grade 8 por 8 traçada pelo programa mostrado na Figura 11.8.

Como mencionado anteriormente, todas as propriedades e métodos discutidos aqui aplicam-se tanto a forms quanto a caixas de imagens. Por exemplo, cada caixa de imagem pode ter seu próprio sistema de coordenadas personalizado por intermédio das propriedades de escala. Você deve incluir o nome do controle caixa de imagem quando fizer referência a essas propriedades e métodos; do contrário, o sistema assumirá que se trata de métodos e propriedades do form e não do objeto. Por exemplo, se você tivesse um objeto caixa de imagem cuja propriedade Name fosse configurada para MeuDesenho, poderia traçar uma grade de 8 por 8 dentro da caixa de imagem com o código mostrado na Figura 11.10.

Figura 11.10 Uma grade 8 por 8 traçada dentro de uma caixa de imagens.

Cores

Retornemos por alguns instantes ao gráfico mostrado na Figura 11.7. Para diferenciar a linha plotada dos eixos do sistema de coordenadas, seria interessante traçar os eixos em outra cor. O método Line permite-lhe, por meio de parâmetros opcionais, configurar a cor da linha a ser traçada. Alternativamente, pode-se configurar a propriedade ForeColor do form, que especifica a cor a ser usada para traçar qualquer coisa no form (incluindo os textos a serem impressos). As Figuras 10.11 e 10.12 contêm o código que traça os eixos do gráfico em verde e desenha a linha com a cor default. O código na Figura 11.11 especifica a cor por meio do método Line; o código na Figura 11.12 altera a propriedade ForeColor do form.

 

Figura 11.11 Código de programa para configurar cores de gráfico com o uso do método Line.

Figura 11.12 Código de programa para configurar cores de gráfico com o uso da propriedade ForeColor do form.

As duas rotinas usam a função RGB para criar uma cor. Essa função (cujo nome é abreviatura de Red "vermelho", Green "verde" e Blue "azul") requer três argumentos, cada qual um inteiro no intervalo de 0 a 255. O primeiro argumento especifica a intensidade da cor vermelha, o segundo, a intensidade da cor verde e o terceiro controla a cor azul. Um argumento 0 indica total ausência de cor; 255 indica máxima intensidade. A função retorna um inteiro do tipo Long, que representa uma cor no sistema RGB. A Figura 11.13 lista algumas cores comuns e suas representações no sistema RGB.

Figura 11.13 Configurações de RGB para algumas cores comuns.

Nota: Ainda que a função RGB teoricamente permita um máximo de 16 milhões de cores, o limite prático será determinado pelo tipo de hardware de seu vídeo . O padrão VGA, por exemplo, permite que somente 16 cores sejam exibidas simultaneamente.

Adicionalmente à configuração da propriedade ForeColor, você pode modificar a cor de fundo (background) do form, alterando a sua propriedade BackColor. Caso o valor dessa propriedade seja modificado em tempo de execução, todos os gráficos existentes serão apagados.

O Visual Basic inclui também constantes especiais para as cores correspondentes às configurações de cores dos elementos da interface definidas no Painel de Controle. Por exemplo, a instrução ForeColor = ACTIVE_TITLE_BAR configura a cor de desenho do form para ser a cor especificada no Painel de Controle para as barras de titulo de janelas. Essas constantes globais estão listadas na Figura 11.14. (Note que a definição das constantes na Figura 11.14 inicia-se com 0x, indicando que os valores aparecem em notação hexadecimal.) O uso dessas constantes, em vez de cores fixas, assegurará que seus aplicativos se adaptem ao mapeamento de cores definido pelo usuário, e levará os aplicativos a ter um aspecto mais profissional.

As seguintes constantes podem ser usadas em qualquer parte do seu código no lugar dos seus valores reais:

Figura 11.14 Constantes definidas para cores no Visual Basic.

Números Hexadecimais

O sistema numérico hexadecimal (base 16) usa 16 símbolos para representar valores numéricos: os algarismos de 0 a 9 e as letras A (equivalente ao decimal 10), B, C, D, E e F (equivalente ao decimal 15). Como foi explicado no Capítulo 2, analogamente a outros sistemas numéricos, o valor de cada posição no sistema hexadecimal, ou hex, cresce em potências de 16. Por exemplo, o número hex 1A3 representa a soma de 1 x 16 ^ 2 (256), 10 x 16 ^ 1 (160) e 3 x 16 ^ 0 (3); assim, o decimal equivalente é 419.

A notação hexadecimal é usada com freqüência em programação como uma forma abreviada para representar os números binários usados pelo computador. Uma vez que qualquer um dos 16 dígitos hexadecimais pode ser representado por 4 bits, 2 dígitos hexadecimais (um para cada 4 bits) podem ser representados em 1 byte de oito bits, nos quais se baseiam tanto a memória do computador quanto as áreas de armazenamento em discos. Assim, 1 byte de área de armazenamento pode conter 256 números hexadecimais diferentes (0 até FF).

Você pode usar valores hexadecimais em qualquer lugar onde o Visual Basic aceite um número. Basta colocar o prefixo &H ou 0x para sinalizar que o valor está em notação hexadecimal.

Outros Métodos e Propriedades de Desenho

A propriedade DrawWidth determina a largura de cada linha traçada. A configuração para essa propriedade é sempre medida em pixels. Assim, o valor 1 faz com que seja traçada a linha mais fina, com largura de 1 pixel. O valor 2 permite o desenho de linhas com 2 pixels, e assim por diante.

As propriedades DrawStyle e DrawMode afetam como as linhas aparecem na tela. DrawStyle é similar à propriedade BorderStyle de um objeto linha. Configurações de 0 a 6 indicam quando o traçado da linha é sólido, pontilhado, tracejado ou alguma combinação desses estilos.

A propriedade DrawMode é um pouco mais complexa. Suas 16 configurações determinam como a imagem que está sendo traçada se comporta em relação às outras que já estão na tela. Por exemplo, a configuração default (13 - Copy Pen) faz com que a imagem seja traçada sobreposta a todos os gráficos existentes. Com essa configuração, a execução da instrução Line (0, .5)-(2, .75) duas vezes seguidas daria a impressão de traçar apenas uma linha, pois a segunda iria sobrepor-se à primeira. Porém, se DrawMode fosse 6 - Invert, a primeira execução da instrução faria com que a linha fosse traçada em cor de fundo inversa, enquanto a segunda execução inverteria novamente, fazendo a linha traçada praticamente desaparecer. Outras configurações de DrawMode combinam cores de diversas formas e permitem a criação de efeitos especiais; veja o manual de referência do Visual Basic para maiores informações.

As propriedades FilIColor e FillStyle afetam a aparência de preenchimento de círculos e polígonos. Essas propriedades são similares às propriedades FilIColor e FilIStyle de controles de contornos descritos no Capitulo 5.

O Visual Basic oferece três métodos para auxiliar no processo de desenho: PSet para configurar um ponto (ou pixel) para uma certa cor; Line para traçar linhas e retângulos; e CircIe para criar círculos, arcos e elipses. (Abordaremos esses métodos em detalhes daqui a instantes.) Além disso, o método CIs limpa um form ou caixa de imagem; e o método Point opera como uma função, retornando a cor do ponto especificado.

O método CIs limpa, ou apaga, textos e gráficos do objeto especificado - mais precisamente, ele configura cada pixel com a cor de fundo. Da mesma forma que outros métodos discutidos nesta seção, o método CIs, quando você não faz referência ao objeto, atua sobre o form atual.

O método Point tem a seguinte sintaxe:

[objeto,]Point (x, y)

Ele retorna código de cor RGB para o pixel localizado nas coordenadas (x, y), onde x é a posição no eixo horizontal e y, a posição no eixo vertical. As coordenadas são medidas nas unidades especificadas pela propriedade ScaleMode do form ou da caixa de imagem.

O Método PSet

Para configurar um único ponto para uma certa cor, use o método PSet. Este método tem a seguinte sintaxe:

[objeto,]PSet [Step](x, y)[, cor]

As coordenadas (x, y) referem-se à posição absoluta, medida nas unidades especificadas pela propriedade ScaleMode do objeto sobre o qual você está desenhando. Entretanto, se as coordenadas forem precedidas pela palavra-chave Step, elas serão o deslocamento relativo à posição atual (dada pelas propriedades CurrentX e CurrentY). Por exemplo, Step(2, 10) refere-se à posição atual mais 2 unidades horizontalmente e 10 unidades verticalmente - isto é, a posição (CurrentX + 2, CurrentY + 10).

Você pode configurar um ponto para qualquer cor. Se uma cor não for especificada, o método PSet assinala para o ponto a configuração de cor da propriedade ForeColor. Esse método pode ser útil para apagar um único pixel; basta configurar o pixel com a cor de fundo atual (configuração da propriedade BackColor).

Observe que a dimensão e a aparência do ponto são afetadas pela forma como você configura as propriedades DrawWidth e DrawMode. Por exemplo, quando a propriedade DrawWidth é configurada para 1, o método PSet configura a cor de um único pixel. No entanto, quando DrawWidth é configurada para um valor maior do que 1, o ponto será dimensionado e centralizado nas coordenadas especificadas.

O Método Line

O método Line, que traça linhas ou retângulos, usa a seguinte sintaxe:

[objeto.] Line [[Step](x1, y1)]-[Step](x2, y2)[,[cor][, B[F]]]

O primeiro par de coordenadas (x1, y1) especifica o ponto inicial da linha. Se você omitir as coordenadas do ponto inicial, será assumida a posição corrente como ponto inicial. É obrigatório incluir o segundo par de coordenadas, (x2, y2), que especifica o ponto final. Você também pode especificar a cor da linha.

Quando você inclui a letra B (de box - caixa) na instrução Line, é traçado o retângulo com os cantos opostos localizados nos dois pares de coordenadas especificados. Esse retângulo será preenchido com a configuração de cor da propriedade FilIColor e com o estilo indicado pela propriedade FilIStyle. Você ainda pode incluir a letra F na instrução Line, para que o retângulo seja preenchido com a mesma cor com que foi traçado. Você só pode especificar F se for especificado B. (Isto é, a opção de preenchimento é válida apenas quando um retângulo estiver sendo traçado.)

São mostrados alguns exemplos de desenho com o método Line nas Figuras 10.15, 10.16 e 10.17. Cada um usa a instrução Scale (-2, 2)-(2, -2) e a instrução Line mostrada na figura.

 

Figura 11.15 Traçando uma linha com o método Line.

Figura 11.16 Traçando um retângulo com o método Line.

Figura 10.17 Traçando um retângulo cheio como método Line.

 

O Método Circle

O método Circle é o mais complexo dos métodos de desenho. Você pode usá-lo para traçar círculos, elipses, arcos e "pedaços de pizza". (Um pedaço de pizza é um arco com raios conectando as extremidades do arco ao centro.)

A sintaxe completa para o método Circle é a seguinte:

[objeto.]Circle [Step](x, y), raio[, [cor][, [início][, [final][, aspecto]]]]

Você deve sempre especificar as coordenadas do centro (x, y) quando usar o método Circle; este método não assume a posição atual como default. Quando um círculo é traçado, CurrentX e CurrentY são configurados para as coordenadas especificadas para o centro.

Para traçar um círculo, basta informar a origem e o raio. Para estreitar um círculo, transformando-o em uma elipse, você deve modificar a razão de aspecto. Os círculos têm razão de aspecto 1,0. Valores de aspecto maiores do que 1 dão origem a elipses altas e estreitas; valores menores do que 1 criam elipses baixas e largas. Assim, um valor de aspecto 4,0 traçará uma elipse à Stan Laurel (o magro), enquanto um valor 0,4 dará origem a uma elipse à Oliver Hardy (o gordo), conforme mostrado nas Figuras 10.18 e 10.19. Observe que você deve especificar todas as vírgulas intermediárias existentes na instrução Circle, mesmo quando não informa os valores para cada parâmetro.

 

Figura 11.18 Traçando uma elipse à Stan Laurel com o método Circle.

Figura 11.19 Traçando uma elipse à Oliver Hardy com o método Circle.

 

Para traçar um arco em vez de um circulo ou elipse completos, deve-se especificar os parâmetros início e final na instrução Circle. Esses valores devem ser fornecidos em radianos (desenterre aquele livro de trigonometria), podendo variar de 0 a 2 pi. A Figura 11.20 mostra o valor em radianos para pontos estratégicos ao longo do círculo.

Figura 11.20 Pontos ao longo do círculo especificados em radianos.

Se você se sentir mais confortável usando graus em vez de radianos, defina a constante PI e use a seguinte função:

Function GrausToRadianos (Graus As Single) As Single

GrausToRadianos = Graus * PI / 180.0

End Function

Agora, tudo o que você tem a fazer é passar para GrausToRadianos um valor em graus, e a função retornará o valor correspondente em radianos.

Para traçar pedaços de pizza, você deve usar valores negativos para início e final na instrução Circle. Valores negativos fazem com que o Visual Basic trace as linhas de raio no ângulo especificado pelo valor absoluto do parâmetro. Para que as linhas de raio sejam traçadas, é preciso que os dois parâmetros sejam negativos. O Visual Basic não preencherá um arco ou um pedaço de pizza "aberto". As Figuras 10.21 e 10.22 mostram alguns exemplos.

Figura 11.21 Traçando um pedaço de pizza com o método CircIe.

Figura 11.22 Traçando um círculo menos um pedaço de pizza com o método Circle.

 

Considerações de Hardware para Programas Gráficos

Se tiver interesse em escrever programas gráficos que sejam realmente úteis para outras pessoas, você deve considerar cuidadosamente o projeto de seus programas e, em particular, deve levar em consideração o tipo de hardware no qual os programas serão executados. Por exemplo, conforme discutido anteriormente neste capítulo, a decisão sobre quando usar a propriedade AutoRedraw ou o procedimento Paint para reconstrução da área de exibição pode ser muito importante. Lembre-se de que a quantidade de memória requerida para o Visual Basic manter as cópias de seus forms depende do hardware no qual o programa é processado. Por exemplo, você pode ter desenvolvido um programa para um sistema monocromático, porém o usuário poderá ter um monitor colorido com resolução de 1280 x 1024, cujos requisitos de memória são substancialmente maiores do que os de seu equipamento. Usar AutoRedraw em tal sistema poderia facilmente esgotar a memória disponível.

Ou pode ser que você tenha desenvolvido o programa em um computador de alta resolução. O que acontece se o usuário tiver um sistema com baixa resolução? No seu sistema, um texto com 6 pontos pode parecer apenas um pouco fino, porém talvez não seja legível em um laptop com baixa resolução. Se você tem intenção de desenvolver programas para revender, pode ser interessante examinar as propriedades TwipsPerPixelX e TwipsPerPixelY dos objetos Screen e Printer. (O objeto Screen representa o vídeo completo. Seu programa pode examinar as propriedades do objeto Screen para determinar questões sobre o tipo de fonte a usar e onde colocar as caixas de diálogo.)

 

Conheça o poder das macros do RabJump e insira código com um simples apertar de teclas