Você está na página 1de 10

Desenhando grficos e funes

O Visual Basic fornece muitas possibilidades de desenhar grficos : linhas , curvas ,


caixas , etc. Geralmente os grficos so feitos atravs dos objetos Printer , Form ou
Picture . Eles representam a superfcie as quais os grficos podem ser aplicados.

Os mtodos para desenhar grficos que o VB suporta so :

Circle - desenha um crculo ou uma elipse.


Cls - limpa todos os grficos.
Line - desenha uma linha reta.
PaintPicture - desenha o contedo de um arquivo grfico.
Point - retorna a cor de um ponto.
Print - usado para imprimir.
Pset - define a cor de um pixel definido.

As propriedades grficas que o VB suporta so:

AutoRedraw - Determina se o grfico ser automaticamente redesenhado se


algo se mover na para sua frente.
ClipControls - Determina como o repaint do grfico ser gerenciado.
DrawMode - Define a aparncia do mtodo grfico
DrawStyle - Define o estilo da linha para sada de um mtodo grfico.
DrawWidth - Define a largura da linha para sada de um mtodo grfico.
FillColor - Define a cor usada para preencher crculos , linhas e caixas.
FillStyle - Define o padro usado para preencher crculos , linhas e caixas.
FontTransparent - Determina se a fonte impressa com o fundo
transparente.
Palette - Define a imagem contendo a paleta a ser usada para um controle.
PaletteMode - Determina qual paleta usar para o controle em um objeto.
RightToLeft - Indica a direo de exibio do texto.
ScaleHeight - Define a altura de um rea.
ScaleLeft - Define o valor inicial para a esquerda da rea.
ScaleTop - Define o valor inicial para o topo da rea.
ScaleWidth - Define a largura da rea.
ScaleMode - Define a unidade de escala a ser usada.

Cada mtodo grfico tem sua sada para um formulrio, um picture box ou para o
objeto Printer. Para indicar onde voc quer desenhar , informe antes do mtodo grfico
o nome do objeto usado. Se voc omitir o objeto o VB assume que voc quer desenhar
no formulrio onde o cdigo esta anexado. Ex:

Um formulrio chamado meuForm

MeuForm.PSet (500, 500)

Um controle picture box chamado picPicture1


picPicture1.PSet (500, 500)

O formulrio atual

PSet (500, 500)

Cada rea de desenho tem seu prprio sistema de coordenadas que termina qual
unidade aplicar para as coordenadas.

Desenhando Linhas e formas

Podemos desenhar pontos , linhas e formas com os mtodos grficos do VB. Para
desenhar uma linha entre duas coordenadas usamos o mtodo Line que tem a
seguinte sintaxe:

object.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]

Onde:

Parte Descrio
object Indica o objeto a qual o grfico ser aplicado.

Step Especifica que o ponto inicial das coordenadas relativo a posio atual do grfico dada pe
.

(x1, y1) Valor que indica as coordenadas do ponto inicial para a linha .(A propriedade ScaleMode d
Obrigatrio.

Step Indica que o ponto final das coordenadas relativo para ponto inicial.

(x2, y2) Valor que indica as coordenadas do ponto final da linha a ser desenhada.

color Valor que indica a cor usada para desenhar a linha.Voc pode usar a funo RGB a func

B Se includo desenha uma caixa usando as coordenas.

F Se B for usado F indica que a caixa ser preenchida com a mesma cor usada para desenha

Para desenhar uma linha somente o segundo par de coordenadas obrigatrio e os


valores de x e y podem ser inteiros ou fracionrios. Exemplo que desenha uma linha
inclinada:

Line (500, 500)(2000, 2000)


O cdigo abaixo desenha vrias linhas de largura diferentes:

Private Sub Form_Click ()


DrawWidth = 1
Line (100, 1000)(3000, 1000)
DrawWidth = 5
Line (100, 1500)(3000, 1500)
DrawWidth = 8
Line (100, 2000)(3000, 2000)
End Sub

Desta forma o VB desenha uma linha que inclue o primeiro ponto final , mas no o
ltimo ponto. Para desenhar o ltimo ponto podemos usar o mtodo Pset:

PSet [Step] (0, 0)[, color]

Como o primeiro par de coordenadas opcional , se voc omit-lo o VB usa o objeto


atual x e y como ponto final. A posio atual pode ser definida pelas propriedades
CurrentX e CurrentY. Para desenhar um tringulo podemos usar a conexo com trs
pontos:

' define a coordenada x do ponto de inicio


CurrentX = 1500
' define a coordenada y do ponto de inicio.
CurrentY = 500
' desenha uma linha para abaixo e a direita do ponto
de inicio.
Line -(3000, 2000)
' desenha uma linha para a esquerda do ponto atual
Line -(1500, 2000)
' desenha uma linha para cima e a direita do ponto
inicial.
Line -(1500, 500)

Os mtodos Pset , Line e Circle podem usar a palavra chave Setp que define que o
local do ponto relativo ao ltimo ponto desenhado; O VB adiciona os valores de x e y
ao ltimo ponto desenhado. Ex:

Line (100, 200)(150, 250) igual a Line (100, 200)Step(50, 50)


Para aplicar cor voc usa o argumento color . Para desenhar um linha azul fazemos:
Line (500, 500)(2000, 2000), RGB(0, 0, 255)
Se voc omitir o argumento color a propriedade Forecolor definida ser usada como
cor.

Para limpar a rea de de desenho basta usar o mtodo Cls. A sintaxe :

[object.]Cls

Trabalhando com escalas

Um dos primeiros conceitos que voc deve compreender ao trabalhar com grficos no
VB o conceito de escala. O tamanho de um objeto ou grfico na tela depende da
unidade de medida que voc escolheu para cri-lo. As unidades de medidas mais
usadas so : polegadas , centmetros , milmetros e pixels. Alm destas medidas o VB
suporta outras unidades de medidas que servem para medir o tamanho de um objeto
so elas:

Points - 72 points formam uma polegada. Geralmente usada para fontes de texto.

Twips - Existem 1440 twips em uma polegada. Esta medida fornece mais preciso
para medidas do que Points ( 1 twip = 1/20 de um Point) , tornando possvel
grficos mais precisos.

Characters - Utiliza twips fixos : 120 twips na horizontal por 240 twips na vertical .
No muito utilizada.

User - Tipo definido pelo usurio. Uma unidade muito poderosa que voc pode usar
como uma escala. Voc define o nmero de unidades dentro da rea ( altura : de
cima at embaixo e largura : da esquerda para a direita).

Junto com esta propriedades a propriedade ScaleMode identifica qual unidade vai ser
usada. Desde que voc defina a propriedade ScaleMode o VB ajusta as propriedades
de tamanho da rea para se adequar a seleo definida.

Quando voc cria grficos eles sero criados na rea cliente de uma janela, e, em geral
voc estar usando uma posio x/y dentro desta rea para direcionar o VB onde ele
vai colocar o grfico. Os limites da rea cliente so definidos pelas propriedades
ScaleWidth e ScaleHeight. Para definir as coordenadas superior/esquerda iniciais
voc usa as propriedades : ScaleTop e ScaleLeft. Isto pode ser til se voc sabe que
a equao do seu grfico somente se aplica a uma rea a alguma distncia da
coordenada original ( x=0 e y=0)

Usando os mtodos Grficos

Se no considerarmos o objeto Print podemos dizer que temos 6 mtodos grficos


que j foram mencionados no incio deste artigo. A seguir vou dar mais alguns
detalhes sobre os mais importantes destes mtodos:

Nota: Para testar os cdigos de cada exemplo abaixo crie um projeto no VB e no


formulrio padro insira um objeto Picture com o nome de Picture1.
Circle - A sintaxe do mtodo : objeto.circle (XCenter, YCenter), Radius,
Color

O cdigo abaixo desenha 20 crculos. Eu estou movendo progressivamente o


centro para a direita comeando na coordenada X=500

For i = 1 to 2000 Step 100


picture1.circle (i + 500, 1000),
400, vbGreen
Next i

Cls - Sintaxe : objeto.Cls

Apaga todos os grficos que foram desenhados no objeto.

Ex: picture1.cls

Line - A sintaxe : object.Line [Step] (x1, y1) [Step] - (x2, y2), [color],
[B][F]

O cdigo abaixo cria 20 linhas verticais posicionadas da esquerda para a direita.

For i = 1 to 1000 Step 100


picture1.line (i+500,500)-
(i+500,4000), vbBlue
Next i

Para desenhar caixas basta incluir um argumento como mostrado no cdigo a


seguir:

For i = 1 To 4000 Step 400


Picture1.Line (i + 200, 500)-(i +
400, 1000), vbBlue, BF
Next i

O argumento BF includo no final do cdigo diz ao VB para desenhar caixas


preenchidas.

Pset - Sintaxe : objeto.PSet (x, y), QBColor(Cor)

Pset o mtodo mais bsico que o VB oferece para desenhar. Usando Pset
voc pode definir a cor de qualquer ponto dentro de uma rea. Por exemplo , o
cdigo abaixo obtm cores e coordenadas aleatrias:
Private Sub Command1_Click()

Dim x as integer
Dim y as integer
Dim iColor as Integer

For i = 1 To 1000
'obtem cores aleatrias entre 0
to 15
iColor = (Int(10 * Rnd) + 0)
'define X de 0 at ScaleWidth
x = (Int((Picture1.ScaleWidth *
Rnd) + 0))
'define Y de 0 at ScaleHeight
y = (Int((Picture1.ScaleHeight *
Rnd) + 0))
'imprime os pontos no PictureBox preenchida com os
picturebox pontos desenhados por Pset.
Picture1.PSet (x, y),
QBColor(iColor)
Next i
End Sub
Pset poderoso , voc pode desenhar qualquer coisa com ele. Voc
s tem que controlar a localizao de cada ponto.

Voc j percebeu que o ponto forte do VB no so os mtodos grficos. Na realidade


eles so muito simples , mas nem tudo esta perdido. Voc pode criar grficos mais
sofisticados usando as APIs do Windows.

Percebendo a lacuna a Microsoft criou as DLLs conhecidas como DirectX que podem
ser usadas para obter efeitos grficos complexos e com bom desempenho. (Vamos
falar sobre o DirectX em um outro artigo.)

Para terminar o artigo vou mostrar como voc pode criar um projeto no VB para desenha equaes
matemticas. Vai ser um projeto simples para lhe dar a idia de como voc pode trabalhar com os mtodos
aqui descritos. Abaixo temos o formulrio do projeto:
Olhando para o formulrio acima temos:

Um controle pictureBox - picture1


7 botes de comando (command1,command2,..at command7) . Cada boto
ir desenhar o grfico da funo exibida em sua propriedade Caption

O cdigo que esta no formulrio o seguinte :

Option Explicit
Dim i As Integer
Dim x As Single
Dim y As Single

Private Sub Command1_Click()


' Desenha y = 4 * sin(x).
Picture1.ForeColor = vbBlue
x = -10
y = 4 * Sin(x)
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = -10 To 10 Step 0.25
y = 4 * Sin(x)
Picture1.Line -(x, y)
Next x
End Sub

Private Sub Command2_Click()


' Desenha y = x ^ 3 / 5 - 3 * x + 1.
Picture1.ForeColor = vbYellow
x = -10
y=x^3/5-3*x+1
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = -10 To 10 Step 0.25
y=x^3/5-3*x+1
Picture1.Line -(x, y)
Next x
End Sub

Private Sub Command3_Click()

' Desenha y = x^2


Picture1.ForeColor = vbRed
x = -10
y=x^2
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = -10 To 10 Step 0.25
y=x^2
Picture1.Line -(x, y)
Next x

End Sub

Private Sub Command4_Click()


Unload Me
End Sub

Private Sub Command5_Click()


' Desenha y = x^3
Picture1.ForeColor = vbCyan
x = -10
y=x^3
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = -10 To 10 Step 0.25
y=x^3
Picture1.Line -(x, y)
Next x

End Sub

Private Sub Command6_Click()

' Desenha y = cos(x)


Picture1.ForeColor = vbGreen
x = -10
y = Cos(x)
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = -10 To 10 Step 0.25
y = Cos(x)
Picture1.Line -(x, y)
Next x
End Sub

Private Sub Command7_Click()


' desenha y = cos(x)
Picture1.ForeColor = vbGreen
x=0
y = x * Sqr(1 + x)
Picture1.CurrentX = x
Picture1.CurrentY = y
For x = 0 To 10 Step 1
y = x * Sqr(1 + x)
Picture1.Line -(x, y)
Next x
End Sub

Private Sub Form_Load()

Picture1.Scale (-10, 10)-(10, -10)

' desenha o eixo X


Picture1.Line (-10, 0)-(10, 0), , BF

For i = -9 To 9
' Picture1.Line (i, -0.5)-(i, 0.5)
Next i

' Desenha o eixo Y


Picture1.Line (0, -10)-(0, 10)
For i = -9 To 9
' Picture1.Line (-0.5, i)-(0.5, i)
Next i

End Sub

O funcionamento bem simples:

1. No evento Load do formulrio os eixos X e Y so desenhados


2. Cada boto desenha o grfico de uma funo usando o mtodo Line em um lao For/Next

O resultado produzido aps clicar em todos os botes ser:

Fique a vontade para melhorar o cdigo e criar um super programa para desenhar
funes matemticas.

Se voc no sabe por onde comear vou deixar abaixo trs links para voc
pegar programas prontos que fazem exatamente isto. Estude o cdigo com dedicao
e aprenda como fazer.