Grafica per gli utenti di Visual Basic 6.0
Aggiornamento: novembre 2007
In Visual Basic 6.0 per disegnare in un Form o nel controllo PictureBox è possibile utilizzare vari metodi e proprietà relativi alla grafica. La grafica in Visual Basic 6.0 è basata sulle API GDI (Graphics Device Interface) di Windows.
In Visual Basic 2008 la grafica è fornita dallo spazio dei nomi System.Drawing, che comprende le API GDI+. Le API GDI+ rappresentano un potenziamento delle funzionalità grafiche di Visual Basic 6.0, ma i metodi non sono compatibili.
Differenze concettuali
In Visual Basic 6.0 i metodi grafici si applicano soltanto all'oggetto Form e al controllo PictureBox.
In Visual Basic 2008 i metodi grafici si applicano ai form e ai controlli che supportano l'evento Paint, compresi i controlli PictureBox, Panel e GroupBox. Inoltre, i metodi grafici si applicano a tutti i controlli che supportano la proprietà OwnerDraw, compresi i controlli ListView, TreeView e Button.
Proprietà AutoRedraw
In Visual Basic 6.0 i metodi grafici possono essere chiamati da una qualsiasi routine eventi; la proprietà AutoRedraw è utilizzata per mantenere la grafica quando si chiamano metodi grafici da un evento diverso dall'evento Paint.
In Visual Basic 2008 i metodi grafici dovrebbero essere chiamati solo dalla routine eventi Paint oppure, nel caso di controlli creati dal proprietario, dalle varie routine eventi Draw, quali DrawItem, DrawSubItem e così via. La proprietà AutoRedraw non è più supportata e non è necessaria poiché gli eventi Paint e Draw mantengono automaticamente la grafica.
Proprietà ClipControls
In Visual Basic 6.0 la proprietà ClipControls è utilizzata per controllare il disegno di un form o di un controllo. Quando impostata su True, vengono ridisegnate solo le nuove aree esposte. Tale meccanismo comporta, in genere, un miglioramento delle prestazioni.
In Visual Basic 2008 non esistono proprietà equivalenti alla proprietà ClipControls; infatti, le migliori prestazioni di GDI+ e delle schede video più recenti rendono inutile questa proprietà.
Proprietà DrawMode
In Visual Basic 6.0 la proprietà DrawMode controlla il colore di un oggetto grafico quando si disegna un motivo sopra un altro motivo. Questa proprietà ha effetto solo su display monocromatici o a bassa risoluzione (256 colori o meno).
In Visual Basic 2008 non esistono proprietà equivalenti alla proprietà DrawMode; infatti, questa proprietà non è più necessaria per i display moderni.
Proprietà DrawStyle
In Visual Basic 6.0 la proprietà DrawStyle controlla l'aspetto di una linea disegnata utilizzando il metodo Line. Se la proprietà DrawWidth è impostata su un valore maggiore di 1, la proprietà DrawStyle non ha effetto e la linea sarà sempre disegnata a tinta unita.
In Visual Basic 2008 l'aspetto di una linea è controllato impostando la proprietà DashStyle di una classe System.Drawing.Pen utilizzata da uno dei metodi DrawLine; lo spessore della linea non ha importanza ai fini di questa proprietà.
Proprietà DrawWidth
In Visual Basic 6.0 la proprietà DrawWidth determina lo spessore in pixel di una linea; tale proprietà è in genere impostata prima di eseguire un metodo grafico.
In Visual Basic 2008 la proprietà Pen.Width di un controllo System.Drawing.Pen determina lo spessore della linea; è possibile impostare la proprietà Width come parametro quando si crea l'oggetto Pen o impostando la proprietà Pen.Width dopo aver creato l'oggetto Pen. Se la proprietà Pen.Width non è stata specificata, viene utilizzato lo spessore predefinito di 1 pixel.
Proprietà Image
In Visual Basic 6.0 la proprietà Image di un form o di un controllo PictureBox restituisce un handle per una bitmap; l'handle può essere assegnato alla proprietà Picture o utilizzato come valore da passare alle chiamate API Windows.
In Visual Basic 2008 le bitmap non presentano più alcun handle; invece, le stesse bitmap sono passate come un oggetto di tipo Bitmap. Un controllo Bitmap può essere assegnato alla proprietà Imagedi un controllo PictureBox, ma non può essere passata alle chiamate API Windows.
Metodo Line
In Visual Basic 6.0 il metodo Line viene utilizzato per disegnare un rettangolo specificando le coordinate del vertice in alto a sinistra e del vertice in basso a destra oltre all'argomento facoltativo B. La proprietà FillColor è utilizzata per riempire il rettangolo con un colore a tinta unita, mentre la proprietà FillStyle riempie il rettangolo con un motivo a tratteggio incrociato.
In Visual Basic 2008 il metodo DrawRectangles è utilizzato per disegnare il bordo di un rettangolo, laddove il metodo FillRectangle è utilizzato per riempire tale rettangolo. Il metodo FillRectangle accetta come parametro un oggetto Brush. La classe SolidBrush sostituisce la proprietà FillColor e i membri della classe HatchBrush sostituiscono la proprietà FillStyle.
Metodo Point
In Visual Basic 6.0 il metodo Point di un form o di un controllo PictureBox è utilizzato per restituire il valore del colore del pixel in un punto specifico. Benché possa essere utilizzato per form o controlli che non contengono immagini, il metodo Point è per lo più utilizzato per determinare un colore da una bitmap assegnata alla proprietà Picture.
In Visual Basic 2008 non esiste più il metodo Point. È possibile utilizzare il metodo M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) per ottenere un valore di colore da una bitmap. Per i form e i controlli che non contengono immagini è possibile effettuare una query sulla proprietà BackColor.
Metodo Print
In Visual Basic 6.0 la proprietà Print è utilizzata per visualizzare il testo di un form o di un controllo di tipo PictureBox. Il tipo di carattere utilizzato per visualizzare il testo è determinato dalle proprietà Font del form o del controllo, mentre il colore è determinato in base alla proprietà ForeColor. Il metodo Print non prevede alcun controllo della posizione del testo e consente di visualizzare il testo solo orizzontalmente.
In Visual Basic 2008 per visualizzare il testo si utilizza il metodo DrawString. Il tipo di carattere è stabilito in base a un oggetto Font, laddove il colore è determinato da un oggetto Brush; entrambi gli oggetti sono passati come parametri al metodo DrawString. Il metodo DrawString presenta anche i parametri X eY in base ai quali si determina la posizione iniziale del testo. Esiste inoltre il parametro facoltativo Format che accetta un oggetto StringFormat in modo da consentire la visualizzazione verticale di un testo.
Metodo Pset
In Visual Basic 6.0 il metodo PSet è utilizzato per cambiare il colore di un pixel di un form o di un controllo PictureBox. Se la proprietà DrawWidth è impostata su un valore maggiore di 1, il metodo PSet disegna un cerchio pieno. Per specificare il colore è disponibile un parametro facoltativo; se non specificato, sarà il parametro ForeColor a essere utilizzato.
In Visual Basic 2008 non esiste alcun metodo equivalente al metodo PSet. Per cambiare il colore di un unico pixel di un form o di un controllo PictureBox è possibile utilizzare il metodo DrawEllipse per disegnare un cerchio con altezza e larghezza pari a 1 pixel. Per emulare la funzionalità del metodo PSet quando la proprietà DrawWidth è maggiore di 1, utilizzare il metodo FillEllipse.
Modifiche di codice per la grafica
Nell'esempio di codice riportato di seguito vengono illustrate le differenze nelle tecniche di codifica tra Visual Basic 6.0 e Visual Basic 2008.
Creazione di una linea semplice
Nell'esempio di codice riportato di seguito viene illustrato come disegnare una linea in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo Line; tale metodo accetta come argomenti le coordinate X e Y dei punti di inizio e di fine e, facoltativamente, un colore. Nell'esempio relativo a Visual Basic 2008 si utilizza il metodo DrawLine; tale metodo accetta come argomenti un oggetto Pens e le coordinate X e Y dei punti di inizio e di fine.
Nota: |
---|
In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel. |
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a solid black line 200 twips from the top of the form.
Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint(ByVal sender As Object, ByVal e _
As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a solid black line 25 pixels from the top of the form.
e.Graphics.DrawLine(Pens.Black, 0, 25, Me.Width, 25)
End Sub
Creazione di una linea punteggiata
Nell'esempio di codice riportato di seguito viene illustrato come disegnare una linea punteggiata in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 la proprietà DrawStyle determina l'aspetto della linea. Nell'esempio relativo a Visual Basic 2008 si utilizza un oggetto Pen e si imposta la proprietà DashStyle in modo da determinare l'aspetto della linea.
Nota: |
---|
In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel. |
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a dotted line 200 twips from the top of the form.
Me.DrawStyle = vbDot
Line (0, 200) - (ScaleWidth, 200), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint1(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a dotted black line 25 pixels from the top of the form.
Dim LPen As New System.Drawing.Pen(System.Drawing.Color.Black)
LPen.DashStyle = Drawing2D.DashStyle.Dot
e.Graphics.DrawLine(LPen, 0, 25, Me.Width, 25)
End Sub
Determinazione dello spessore della linea
Nell'esempio di codice riportato di seguito si descrive come disegnare linee di diverso spessore in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza la proprietà DrawWidth. Nell'esempio relativo a Visual Basic 2008 si utilizza la proprietà Width dell'oggetto Pens.
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a line with a thickness of 1 pixel.
DrawWidth = 1
Line (0, 200)-(ScaleWidth, 200), vbBlack
' Draw a line with a thickness of 5 pixels.
DrawWidth = 5
Line (0, 400)-(ScaleWidth, 400), vbBlack
' Draw a line with a thickness of 10 pixels.
DrawWidth = 10
Line (0, 600)-(ScaleWidth, 600), vbBlack
End Sub
' Visual Basic
Private Sub Form1_Paint2(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a line with a thickness of 1 pixel.
Dim TPen As New System.Drawing.Pen(System.Drawing.Color.Black, 1)
e.Graphics.DrawLine(TPen, 0, 25, Me.Width, 25)
' Draw a line with a thickness of 5 pixels.
TPen.Width = 5
e.Graphics.DrawLine(TPen, 0, 50, Me.Width, 50)
' Draw a line with a thickness of 10 pixels.
TPen.Width = 10
e.Graphics.DrawLine(TPen, 0, 75, Me.Width, 75)
End Sub
Creazione di un cerchio
Nell'esempio di codice riportato di seguito viene illustrato come disegnare un cerchio in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo Circle; tale metodo accetta come argomenti le coordinate X e Y del centro, il raggio e, facoltativamente, un colore. Nell'esempio relativo a Visual Basic 2008 si utilizza il metodo DrawEllipse; tale metodo accetta come argomenti un oggetto Pen e, relativamente al rettangolo circoscritto, le coordinate X e Y del vertice in alto a sinistra, la larghezza e l'altezza.
Nota: |
---|
In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel. |
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a 1000 twip diameter red circle
Circle (500, 500), 500, vbRed
End Sub
' Visual Basic
Private Sub Form1_Paint3(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a 70 pixel diameter red circle.
e.Graphics.DrawEllipse(Pens.Red, 0, 0, 70, 70)
End Sub
Creazione di un rettangolo pieno
Il codice di seguito riportato mostra come creare due rettangoli in un form in fase di esecuzione, uno con riempimento a tinta unita e l'altro con un motivo a tratteggio incrociato. Nell'esempio relativo a Visual Basic 6.0 si utilizzano le proprietà FillColor e FillStyle oltre al metodo Line. Per creare il rettangolo è sufficiente chiamare il metodo Line con il parametro B.
Nell'esempio relativo a Visual Basic 2008 si utilizza il metodo Graphics.Rectangle per disegnare il bordo e il metodo Graphics.FillRectangle per riempire il rettangolo; tale metodo accetta come argomento un oggetto Brush. In questo esempio si utilizzano entrambi i controlli SolidBrush e HatchBrush.
Nota: |
---|
In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel. |
' Visual Basic 6.0
Private Sub Form_Paint()
' Draw a solid red rectangle.
FillColor = vbRed
FillStyle = vbSolid
Line (10, 10)- (1000, 500), vbRed, B
' Draw a rectangle filled with a crosshatch pattern.
FillColor = vbBlack
FillStyle = vbCross
Line (10, 500)- (1000, 1000), vbBlack, B
End Sub
' Visual Basic
Private Sub Form1_Paint4(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Draw a solid red rectangle.
Dim SBrush As New System.Drawing.SolidBrush _
(System.Drawing.Color.Red)
e.Graphics.DrawRectangle(Pens.Red, 2, 2, 70, 40)
e.Graphics.FillRectangle(SBrush, 2, 2, 70, 40)
' Draw a rectangle filled with a crosshatch pattern.
Dim HBrush As New System.Drawing.Drawing2D.HatchBrush( _
System.Drawing.Drawing2D.HatchStyle.Cross, _
System.Drawing.Color.Black, System.Drawing.Color.Transparent)
e.Graphics.DrawRectangle(Pens.Black, 2, 40, 70, 40)
e.Graphics.FillRectangle(HBrush, 2, 40, 70, 40)
End Sub
Visualizzazione di un'immagine in un form
Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo di metodi grafici per visualizzare un'immagine in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo PaintPicture. Nell'esempio relativo a Visual Basic 2008 viene utilizzato il metodo DrawImage.
' Visual Basic 6.0
Private Sub Form_Paint()
' Create a stdPicture object.
Dim Pict1 As New stdPicture
Pict1 = LoadPicture("C:\Windows\Greenstone.bmp")
PaintPicture Pict1, 0, 0
End Sub
' Visual Basic
Private Sub Form1_Paint5(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
' Create a Bitmap object.
Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")
e.Graphics.DrawImage(Pict1, 0, 0)
End Sub
Visualizzazione di testo in un form
Nell'esempio di codice riportato di seguito vengono utilizzati dei metodi grafici per visualizzare una stringa di testo in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo Print. Nell'esempio relativo a Visual Basic 2008 viene utilizzato il metodo DrawString.
' Visual Basic 6.0
Private Sub Form_Paint()
Me.Font.Size = 24
Me.Font.Bold = True
Me.ForeColor = vbRed
Print "Hello World!"
End Sub
' Visual Basic
Private Sub Form1_Paint6(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
TextFont.Dispose()
TextBrush.Dispose()
End Sub
Determinazione dell'altezza e della larghezza di una stringa
Nell'esempio di codice riportato di seguito vengono utilizzati dei metodi grafici per determinare le dimensioni di una stringa in un form in fase di esecuzione e quindi per disegnarvi un rettangolo attorno. Nell'esempio relativo a Visual Basic 6.0 si utilizzano i metodi TextHeight e TextWidth. Nell'esempio relativo a Visual Basic 2008 viene utilizzato il metodo MeasureString; tale metodo restituisce una struttura SizeF.
' Visual Basic 6.0
Private Sub Form_Paint()
Me.Font.Size = 24
Me.Font.Bold = True
Me.ForeColor = vbRed
Print "Hello World!"
Line (0, 0)-(TextWidth("Hello World!"), _
TextHeight("Hello World!")), vbBlack, B
End Sub
' Visual Basic
Private Sub Form1_Paint7(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim TextFont As New System.Drawing.Font("Arial", 24, FontStyle.Bold)
Dim TextBrush As New System.Drawing.SolidBrush(System.Drawing.Color.Red)
e.Graphics.DrawString("Hello World!", TextFont, TextBrush, 10, 10)
Dim TextSize As New System.Drawing.SizeF
TextSize = e.Graphics.MeasureString("Hello World!", TextFont)
e.Graphics.DrawRectangle(Pens.Black, 10, 10, TextSize.Width, TextSize.Height)
TextFont.Dispose()
TextBrush.Dispose()
End Sub
Creazione di un singolo pixel
Nell'esempio riportato di seguito vengono utilizzati dei metodi grafici per cambiare il colore di un singolo pixel in un form in fase di esecuzione. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo PSet. Nell'esempio relativo a Visual Basic 2008 viene utilizzato il metodo DrawEllipse con i parametri Height e Width impostati su 1.
Nota In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel.
' Visual Basic 6.0
Private Sub Form_Paint()
Me.DrawWidth = 1
PSet (1000, 1000), vbRed
End Sub
' Visual Basic
Private Sub Form1_Paint8(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
e.Graphics.DrawEllipse(Pens.Red, 70, 70, 1, 1)
End Sub
Impostazione del colore di un singolo pixel
Nel codice riportato di seguito vengono utilizzati dei metodi grafici per determinare il colore di un pixel avente una posizione specifica all'interno di un'immagine in un form in fase di esecuzione e quindi per disegnare un rettangolo riempito con tale colore. Nell'esempio relativo a Visual Basic 6.0 si utilizza il metodo Point per ottenere il valore del colore. Nell'esempio relativo a Visual Basic 2008 viene utilizzato il metodo GetPixel.
Nota: |
---|
In Visual Basic 6.0 l'unità di misura predefinita era il twip, mentre in Visual Basic 2008 è il pixel. |
' Visual Basic 6.0
Private Sub Form_Paint()
Dim PixelColor As Long
Picture1.Picture = LoadPicture("C:\Windows\Greenstone.bmp")
PixelColor = Picture1.Point(10, 10)
FillColor = PixelColor
Line (0, 0)-(100, 500), PixelColor, B
End Sub
' Visual Basic
Private Sub Form1_Paint9(ByVal sender As Object, ByVal e As _
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim Pict1 As New Bitmap("C:\Windows\Greenstone.bmp")
Picture1.Image = Pict1
Dim PixelColor As Color = Pict1.GetPixel(4, 4)
Dim PixelBrush As New SolidBrush(PixelColor)
e.Graphics.FillRectangle(PixelBrush, 0, 0, 100, 100)
End Sub
Proprietà e metodi grafici equivalenti
Nelle tabelle riportate di seguito sono elencati i metodi e le proprietà grafiche di Visual Basic 6.0, insieme ai rispettivi equivalenti di Visual Basic 2008.
Visual Basic 6.0 |
Visual Basic 2008Equivalente |
---|---|
Proprietà AutoRedraw |
Nuova implementazione. Per mantenere la grafica, inserire i metodi grafici nell'evento Paint. |
Metodo Circle |
Metodo DrawEllipse |
Proprietà ClipControls |
Nuova implementazione. La proprietà ClipControls non è più necessaria. |
Metodo Cls |
Metodo Clear |
Proprietà CurrentX |
Parametro x di diversi metodi grafici, ad esempio, DrawRectangle(pen, x, y, width, height). |
Proprietà CurrentY |
Parametro y di diversi metodi grafici, ad esempio, DrawRectangle(pen, x, y, width, height) |
DrawMode Proprietà |
Nuova implementazione. La proprietà DrawMode non è più necessaria. |
Proprietà DrawStyle |
Proprietà DashStyle |
Proprietà DrawWidth |
Proprietà Width |
Proprietà FillColor |
Oggetto SolidBrush |
Proprietà FillStyle |
Oggetto HatchBrush |
Proprietà HasDC |
Nuova implementazione. I contesti di periferica non sono più necessari con GDI+. |
Proprietà HDC |
Nuova implementazione. I contesti di periferica non sono più necessari con GDI+. |
Proprietà Image |
Nuova implementazione. |
Metodo Line |
Metodo DrawLine |
Metodo PaintPicture |
Metodo DrawImage |
Metodo Point |
Nessun equivalente diretto. Per le bitmap, utilizzare il metodo Bitmap.GetPixel. Per i form o i controlli, utilizzare la proprietà BackColor. |
Metodo Print |
Metodo DrawString |
Metodo Pset |
Metodi DrawEllipse, FillEllipse |
Proprietà TextHeight, TextWidth |
Metodo MeasureString |
Note sull'aggiornamento
Quando un'applicazione Visual Basic 6.0 viene aggiornata a Visual Basic 2008, i metodi grafici non vengono aggiornati e vengono inseriti degli avvisi nel codice. A causa delle notevoli differenze fra GDI e GDI+, tutto il codice grafico deve essere riscritto.
Vedere anche
Attività
Esempio di controllo utente con creazione personalizzata
Altre risorse
Cenni preliminari sulla grafica (Windows Form)
Guida introduttiva alla programmazione grafica