Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0 1
6. GRFICOS
USANDO CONTROLE GRFICOS
As propriedades principais de uma linha desenhada com Line so as coordenadas dos dois extremos:
X1, Y1, X2 e Y2. Objetos criados com shape tm as propriedades Left, Width, Top e Height.
O mtodo Move, visto anteriormente, s se aplica a objetos criados com a caixa de ferramentas.
Exemplo: O cdigo abaixo move uma linha aleatoriamente pela tela, variando as propriedades X1, Y1,
X2 e Y2.
A funo Rnd retorna nmeros aleatrios entre zero e um. Para gerar nmeros aleatrios entre 0 e a
mxima coordenada, multiplicamos Rnd pela largura da tela ou altura, conforme a coordenada seja X ou Y,
respectivamente.
Existem trs eventos de mouse que podem ser capturados para realizar aes:
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0 2
Todos estes eventos passam quatro parmetros para as respectivos procedimentos de eventos:
Button, Shift, X e Y. Button representa o boto que foi pressionado (1 para o boto esquerdo, 2 para o boto
direito e 4 para o do meio, se houver). Shift representa o estado das teclas Shift, Ctrl e Alt durante o evento,
de acordo com a tabela abaixo.
Tabela 17
Shift Descrio
1 Shift pressionada
2 Ctrl pressionada
4 Alt pressionada
Os parmetro Button e Shift tambm admite combinaes. Por exemplo, Shift = 3 siginifica as teclas
Shift e Ctrl pressionadas.
Os controles desenhados a partir da Caixa de Ferramentas nem sempre se prestam aos objetivos de
um programa grfico. Por exemplo, para desenhar pontos ou um grande nmero de linhas devemos usar
mtodos grficos e no controles. Mtodos so muito mais versteis e rpidos e no precisam estar presentes
em tempo de projeto.
Para desenhar pontos em um objeto grfico (formulrio, caixa de figuras ou controle de imagens) use o
mtodo PSet, cuja sintaxe a seguinte:
onde X e Y so as coordenadas do objeto onde o ponto deve ser desenhado. O parmetro Cor opcional.
Se no for especificado, o ponto ser desenhado usando-se a ForeColor do objeto. Da mesma forma, o
tamanho do ponto pode ser definido pela propriedade DrawWidth do objeto.
onde a linha ser desenhada das coordenadas X1 e Y1 at X2 e Y2. Observe que X1 e Y1 so opcionais. Se
forem omitidas, o mtodo Line desenhar uma linha da posio grfica atual at (X2, Y2). A posio grfica
atual pode ser obtida por meio das propriedades CurrntX e CurrentY dos objetos grficos. As mesmas
observaes feitas sobre cores e espessuras de pontos aplicam-se a linhas. Adicionalmente, a propriedade
DrawStyle do objeto grfico permite determinar o estilo da linha (cheia, tracejada, etc).
Para desenhar retngulos, preenchidos ou no, use o mtodo Line com o parmetro B (de Box),
A propriedade FillStyle do objeto grfico no qual o retngulo estiver sendo desenhado permitir
preencher o mesmo com um determinado padro, que pode ser slido, tracejado, etc. A propriedade FillColor
determinar a cor do preenchimento.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0 3
No Visual Basic, somente figuras desenhadas com AutoRedraw = true podem ser salvas. Alm disso, a
propriedade LinkMode for formulrio que contm a figura a ser salva deve estar em Source.
Para carregar figuras em um objeto, use as duas linhas a seguir, que especificam a funo
LoadPicture,
A sintaxe pode parecer estranha, mas assim mesmo. O arquivo pode ser do tipo Bitmap (*.bmp),
Windows MetaFile (*.wmf) ou Device Independent Bitmap (*.dib).
UM EDITOR DE FIGURAS
Nosso recm-adquiridos conhecimentos sobre variveis e mtodos grficos podem ser usados para
implementar um editor de figuras, com capacidade para editar, gravar e abrir arquivos do tipo .BMP. Vamos
aproveitar a oportunidade para implementar tambm um controle do tipo Barra de Ferramentas, usando os
controles ToolBar e ImageList.
ToolBar: Este controle usado para mostrar botes que correspondem a itens do menu do
aplicativo, provendo uma interface grfica para os comandos mais usuais. Cada boto pode ter uma
imagem associada, proveniente de uma ImageList. Para iniciar uma barra de ferramentas voc deve
antes disponibilizar os controles Microsoft Windows Common Controls (COMCTL32.OCX) na caixa
de ferramentas. Depois, posicione o controle em um formulrio e, clicando com o boto direito do mouse,
escolha a opo properties. Nesta janela, escolha a opo Buttons para inserir tantos botes quantos forem
necessrios. Note que estes botes podem ser de vrios tipos:
tbrDefault: este boto no permanece acionado aps o clique, sendo o boto utilizado para
opes de salvar ou abrir arquivo, por exemplo;
tbrCheck: este boto permanece acionado aps o clique independente do estado dos outros
botes da barra;
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0 4
tbrButtonGroup: use esta opo para implementar botes de opo do tipo botes de rdio,
onde apenas um dos botes do grupo que tem a propriedade tbrButtonGroup pode
permanecer acionado;
tbrSeparator: este no propriamente um boto, mas sim um separador com largura de oito
pixels, usado geralmente para separar grupos de botes com diferentes funes;
tbrPlaceHolder: este boto igual ao separador, mas tem largura ajustvel.
Voc deve, tambm, modificar a propriedade Key de cada um dos botes. Esta propriedade um
string que descreve a funo do boto (por exemplo, salvar, imprimir, etc). Isto necessrio porque o
evento padro dos botes, ButtonClick, passa o parmetro Key do boto que foi clicado. Voc pode usar este
parmetro e o comando Select ... Case para atribuir um cdigo a cada um dos botes. No interesante usar
ndices aqui, pois o usurio pode reconfigurar a barra de ferramentas em tempo de execuo, mudando os
ndices.
Voc tambm pode atribuir imagens aos botes, mas, antes disso, ser necessrio inserir um controle
ImageList que conter tais imagens, conforme visto a seguir.
Volte, agora, para as propriedades da barra de ferramentas. Na opo General, associe a ImageList
barra de ferramentas. A seguir, use a opo Buttons para associar uma imagem da ImageList a cada um
dos botes.
Voc tambm pode configurar a propriedade Align da barra de ferramentas para obter uma barra de
ferramentas vertical ou alinhada na parte de baixo do formulrio.
O Applications Wizard do VB 5.0 pode ser usado para produzir esqueletos de aplicativos que
contm barras de ferramentas prontas para serem usadas, juntamente com a ImageList e todas as
imagens adequadas. Para usar este assistente, clique sobre o menu File|New Project, escolha a
opo VB Applications Wizard e siga as instrues. Os botes da barra de ferramentas que
formada correspondem aos comandos de um editor de textos simples e podem ser configuradas
conforme a necessidade do usurio.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0 5
Para iniciar o Editor de Figuras, insira um novo projeto e posicione os seguintes objetos sobre o
formulrio:
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0 6
Tabela 18 (continuao)
Note que a caixa de figuras picFrame deve ser inserida antes da caixa picPaint, pois esta ltima estar
contida na primeira. Alm dos objetos mencionados, voc deve posicionar doze caixas de figuras dentro do
painel panColor, da seguinte forma:
desenhe, antes, uma pequena caixa de figuras e renomeie-a para picShowFillColor. Esta caixa ir
mostra a cor atual de preenchimento de figuras fechadas;
dentro de picShowFillColor, desenhe outra caixa de figuras, menor ainda, e renomeie-a para
picShowForeColor. Esta caixa ir mostra a cor atual de desenho;
ao lado de picShowFillColor desenhe dez caixas de figuras, conforme mostrado na figura 13. Estas
caixas devem ser criadas como um array de controles e tero todas o mesmo nome (picColor), com
ndices variando de zero at nove. A posio e as cores destas caixas sero configuradas
automaticamente durante o evento Activate de frmPaint.
Os botes das barras de ferramentas podem ser inseridos da forma j explicada, com as seguintes
observaes:
os botes ativos de tblHoriz so todos no estilo tbrDeafault, com exceo dos separadores;
os botes de tblVert so todos no estilo tbrButtonGroup.
as imagens para as duas Listas de Imagens podem ser buscadas nos diretrios
BITMAPS\TLBR_W95 e ICONS\WRTING. Estes diretrios acompanham o Visual Basic e tero sido
instalados se voc tiver escolhido a instalao completa ou, se na instalao personalizada, tiver
escolhido a opo de inatalar cones e bitmaps.
Observao: Dependendo do tipo de monitor, os valores das propriedades descritas na tabela 18 podem no
reproduzir os efeitos mostrados na figura 13. Neste caso, defina as propriedades, especialmente Left, Top,
Width e Height de modo a obter uma aparncia semelhante da figura 13.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Anotaes:
panColor
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
vsbVert
picPaint
tblHoriz
imlHoriz
picFrame
tblVert
imlVert
Common Dialog 1
Option Explicit
Public FlagFormaLivre As Boolean
Public FlagDesenho As Boolean
Public FlagLinha As Boolean
Public FlagRetngulo As Boolean
Public FlagElipse As Boolean
Public FlagApagar As Boolean
Public FlagTexto As Boolean
Public FlagCortar As Boolean
Public FlagTrava
Public ColorIndex As Single
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Nota. A funo RGB() compe cores a partir das chamadas cores bsicas aditivas (vermelho,
verde e azul). Em desenhos feitos com tintas, como em aquarelas, as cores bsicas so o
vermelho, o azul e o amarelo, sendo denominadas cores bsicas subtrativas. Se voc colocar um
pintor e um programador para conversar sobre cores, talvez d origem a uma grande briga sobre
cores bsicas !
Depois de criadas as cores, devemos atribu-las s caixas de cores picColor, o que feito
com um pequeno lao For ... Next.
For dummy = 0 To 9
picColor(dummy).BackColor = NovaPaleta(dummy).ColorValue
Next dummy
.
.
.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
End Sub
O prximo passo acertar as bordas das caixas que compem a paleta de cores. Primeiro,
calculamos o espao que existe para mostra a paleta, descontando a largura de picShowFillColor
da largura do formulrio e dividindo o nmero resultante por 10. Depois, acertamos as
propriedades Left e Width de cada uma das caixas picColor.
FillOption = 1
FlagFormaLivre = True
picPaint.Top = 0
picPaint.Left = 0
vsbVert.Max = picPaint.Width
hsbHoriz.Max = picPaint.Height
vsbVert.LargeChange = vsbVert.Max / 5
hsbHoriz.LargeChange = hsbHoriz.Max / 5
vsbVert.SmallChange = vsbVert.Max / 50
hsbHoriz.SmallChange = hsbHoriz.Max / 50
End Sub
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Se o usurio clicar com o boto esquerdo, atribumos a cor da caixa escolhido cor de
desenho (ForeColor) do formulrio e cor de fundo (BackColor) de picShowForeColor. Para indicar
qual a caixa selecionada atualmente, mudamos a propriedade BorderSyle para 1 (Fixed Single),
enquanto as bordas das outras nove caixas sero definidas em 0 (None).
Se o usurio clicar com o boto direito, atribmos a cor da caixa selecionada varivel
MyFillColor e cor de fundo de picShowFillColor.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Usaremos o evento ButtonClick da barra de ferramentas para definir um flag que indicar
qual o boto selecionado no momento. Note que usamos a instruo Select Case para verificar
qual o boto clicado, mas a clusula Case foi substituda por Case Is, pois se trata de um objeto
boto.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
End Sub
If FlagFormaLivre Then
TempFore = picPaint.ForeColor
TempMode = picPaint.DrawMode
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 7 'Modo XOR
picPaint.Line (ncoraX, ncoraY)-(CurrentX, CurrentY)
picPaint.Line (ncoraX, ncoraY)-(X, Y)
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
picPaint.ForeColor = TempFore
picPaint.DrawMode = TempMode
CurrentX = X
CurrentY = Y
End If
If FlagLinha Then
TempFore = picPaint.ForeColor
TempMode = picPaint.DrawMode
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 7 'Modo XOR
picPaint.Line (ncoraX, ncoraY)-(CurrentX, CurrentY)
picPaint.Line (ncoraX, ncoraY)-(X, Y)
picPaint.ForeColor = TempFore
picPaint.DrawMode = TempMode
CurrentX = X
CurrentY = Y
End If
If FlagRetngulo Then
TempFore = picPaint.ForeColor
TempMode = picPaint.DrawMode
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 7 'Modo XOR
If FormaPerfeita = True Then
picPaint.Line (ncoraX, ncoraX)-(CurrentX, CurrentX), , B
picPaint.Line (ncoraX, ncoraX)-(X, X), , B
Else
picPaint.Line (ncoraX, ncoraY)-(CurrentX, CurrentY), , B
picPaint.Line (ncoraX, ncoraY)-(X, Y), , B
End If
picPaint.ForeColor = TempFore
picPaint.DrawMode = TempMode
CurrentX = X
CurrentY = Y
End If
If FlagElipse Then
TempFore = picPaint.ForeColor
TempMode = picPaint.DrawMode
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 7 'Modo XOR
If FormaPerfeita = True Then
Aspecto = Abs(ncoraY - CurrentY) / Abs(ncoraX - CurrentX)
Else
Aspecto = 1
End If
raio = Sqr((ncoraX - CurrentX) ^ 2 + (ncoraY - CurrentY) ^ 2)
picPaint.Circle (ncoraX, ncoraY), raio, , , , Aspecto
If FormaPerfeita = True Then
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
If FlagApagar Then
TempFore = ForeColor
TempMode = DrawMode
TempWidth = DrawWidth
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 13 'Modo Copy
picPaint.DrawWidth = 30
picPaint.PSet (X, Y), picPaint.ForeColor
picPaint.ForeColor = TempFore
picPaint.DrawMode = TempMode
picPaint.DrawWidth = TempWidth
End If
If FlagCortar Then
TempFore = picPaint.ForeColor
TempMode = picPaint.DrawMode
TempStyle = picPaint.DrawStyle
TempWidth = picPaint.DrawWidth
picPaint.DrawStyle = 2
picPaint.ForeColor = picPaint.BackColor
picPaint.DrawMode = 7 'Modo XOR
picPaint.DrawWidth = 1
picPaint.Line (ncoraX, ncoraY)-(CurrentX, CurrentY), , B
picPaint.Line (ncoraX, ncoraY)-(X, Y), , B
picPaint.ForeColor = TempFore
picPaint.DrawMode = TempMode
picPaint.DrawStyle = TempStyle
picPaint.DrawWidth = TempWidth
CurrentX = X
CurrentY = Y
End If
End If
End Sub
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
If FlagLinha Then
picPaint.Line (ncoraX, ncoraY)-(X, Y)
End If
If FlagRetngulo Then
picPaint.FillStyle = MyFill
picPaint.FillColor = MyFillColor
If FormaPerfeita = True Then
picPaint.Line (ncoraX, ncoraX)-(X, X), , B
Else
picPaint.Line (ncoraX, ncoraY)-(X, Y), , B
End If
End If
If FlagElipse Then
picPaint.FillStyle = MyFill
picPaint.FillColor = MyFillColor
If FormaPerfeita = True Then
Aspecto = Abs(ncoraY - Y) / Abs(ncoraX - X)
Else
Aspecto = 1
End If
raio = Sqr((ncoraX - X) ^ 2 + (ncoraY - Y) ^ 2)
picPaint.Circle (ncoraX, ncoraY), raio, , , , Aspecto
End If
If FlagCortar Then
picPaint.FillStyle = 0
picPaint.FillColor = picPaint.BackColor
picPaint.ForeColor = picPaint.BackColor
picPaint.Line (ncoraX, ncoraY)-(X, Y), , B
FlagCortar = False
End If
picPaint.FillStyle = MyFill
picPaint.FillColor = MyFillColor
picPaint.ForeColor = TempFore
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
End If
FormaPerfeita = False
End Sub
Note que estamos usando o objeto Clipboard para implementar os efeitos de cortar, copiar
e colar.
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
CommonDialog1.ShowPrinter
panColor.Visible = False
PrintForm
panColor.Visible = True
Case 6 'Barra separadora, no executado
Case 7 'Exit
End
End Select
OcorreuErro: 'Usurio pressionou Cancel
Exit Sub
End Sub
Anotaes:
SETEMBRO/1998
AAA
VISUAL BASIC 5.0
Anotaes:
SETEMBRO/1998
AAA