Condividi tramite


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

Informazioni sul codice gestito GDI+

Utilizzo di classi grafiche gestite