Éléments graphiques pour les utilisateurs de Visual Basic 6.0

Mise à jour : novembre 2007

Dans Visual Basic 6.0, plusieurs méthodes et propriétés graphiques sont utilisées pour dessiner sur un contrôle Form ou PictureBox. Dans Visual Basic 6.0, les graphismes sont basés sur les API interface GDI (Graphics Device Interface) de Windows.

Dans Visual Basic 2008, les graphiques sont fournis par l'espace de noms System.Drawing qui encapsule des API GDI+ (Graphics Device Interface +). GDI+ développe les possibilités graphiques de Visual Basic 6.0, mais les méthodes ne sont pas compatibles.

Différences conceptuelles

Dans Visual Basic 6.0, les méthodes graphiques s'appliquent uniquement à l'objet Form et au contrôle PictureBox.

Dans Visual Basic 2008, les méthodes graphiques s'appliquent à des formulaires et à tout contrôle qui prend en charge l'événement Paint, y compris les contrôles PictureBox, Panel et GroupBox. En outre, les méthodes graphiques s'appliquent à tous les contrôles qui prennent en charge la propriété OwnerDraw, y compris les contrôles ListView, TreeView et Button.

Propriété AutoRedraw

Dans Visual Basic 6.0, les méthodes graphiques peuvent être appelées à partir de toutes les procédures événementielles ; la propriété AutoRedraw est utilisée pour rendre des graphiques persistants lorsque les méthodes graphiques sont appelées d'un événement autre que Paint.

Dans Visual Basic 2008, les méthodes graphiques doivent être appelées uniquement depuis la procédure événementielle Paint, ou pour certains contrôles owner-drawn, depuis plusieurs procédures événementielles Draw (DrawItem, DrawSubItem, etc.). La propriété AutoRedraw n'est plus prise en charge et n'est pas nécessaire parce que les événements Paint et Draw rendre automatiquement les graphiques persistants.

Propriété ClipControls

Dans Visual Basic 6.0, la propriété ClipControls est utilisée pour contrôler la peinture d'un formulaire ou d'un contrôle. Si True, seules les zones récemment exposées sont repeintes, en théorie, avec une amélioration des performances.

Il n'existe aucun équivalent pour la propriété ClipControls dans Visual Basic 2008 ; l'amélioration des performances dans GDI+ et les cartes vidéo à jour la rendent inutile.

Propriété DrawMode

Dans Visual Basic 6.0, la propriété DrawMode contrôle la couleur d'un objet Graphics lorsqu'il dessine un modèle sur un autre. Cette propriété affecte des affichages monochromes ou de faible résolution (256 couleurs ou moins).

Il n'existe aucun équivalent pour la propriété DrawMode dans Visual Basic 2008 ; elle n'est plus nécessaire avec les affichages actuels.

Propriété DrawStyle

Dans Visual Basic 6.0, la propriété DrawStyle contrôle l'apparence d'une ligne dessinée à l'aide de la méthode Line. Si la propriété DrawWidth a une valeur supérieure à 1, la propriété DrawStyle n'a aucun effet et la ligne sera toujours unie.

Dans Visual Basic 2008, l'apparence d'une ligne est contrôlée par la définition de la propriété DashStyle d'une classe System.Drawing.Pen utilisée par l'une des méthodes DrawLine ; la largeur de ligne n'a aucune conséquence sur cette propriété.

Propriété DrawWidth

Dans Visual Basic 6.0, la propriété DrawWidth détermine l'épaisseur d'une ligne en pixels ; la propriété DrawWidth est généralement définie avant l'exécution d'une méthode graphique.

Dans Visual Basic 2008, la propriété Pen.Width d'un contrôle System.Drawing.Pen détermine l'épaisseur de ligne ; vous pouvez définir la propriété Width comme paramètre en créant Pen ou en définissant Pen.Width une fois Pen créé. Si aucune propriété Pen.Width n'est spécifiée, la largeur par défaut est de 1 pixel.

Propriété Image

Dans Visual Basic 6.0 la propriété Image d'un formulaire ou d'un contrôle PictureBox retourne un handle à une bitmap ; le handle peut être assigné à la propriété Picture ou utilisé comme valeur pour passer aux appels d'API Windows.

Dans Visual Basic 2008, les bitmaps ne possèdent plus de handle ; l'image bitmap réelle est passée en tant qu'objet de type Bitmap. Un contrôle Bitmap peut être assigné à la propriété Image d'un contrôle PictureBox, mais il ne peut pas être passé aux appels d'API Windows.

Méthode Line

Dans Visual Basic 6.0, la méthode Line est utilisée pour dessiner un rectangle en spécifiant les coordonnées des coins supérieur et inférieur gauches, avec un argument B optionnel. La propriété FillColor est utilisée pour remplir un rectangle d'une couleur unie, et la propriété FillStyle remplit le rectangle de hachures croisées.

Dans Visual Basic 2008, la méthode DrawRectangles est utilisée pour dessiner la bordure d'un rectangle et la méthode FillRectangle pour le remplir. FillRectangle prend un objet Brush comme paramètre. SolidBrush remplace la propriété FillColor et les membres de la classe HatchBrush remplacent la propriété FillStyle.

Méthode Point

Dans Visual Basic 6.0, la méthode Point d'un formulaire ou d'un contrôle PictureBox est utilisée pour retourner une valeur de couleur pour le pixel à un point spécifié. Bien que la méthode Point puisse être utilisée pour les formulaires ou les contrôles qui ne contiennent pas d'image, elle est utilisée plus souvent pour récupérer une couleur d'une bitmap assignée à la propriété Picture.

Dans Visual Basic 2008, la méthode Point n'existe plus. Vous pouvez utiliser la méthode M:System.Drawing.Bitmap.GetPixel(System.Int32,System.Int32) pour récupérer une valeur de couleur d'une bitmap. Pour les formulaires ou les contrôles qui ne contiennent pas d'image, vous pouvez interroger la propriété BackColor.

Méthode Print

Dans Visual Basic 6.0, la méthode Print est utilisée pour afficher du texte sur un formulaire ou un contrôle PictureBox. La police utilisée pour afficher le texte est déterminée par les propriétés Font du formulaire ou du contrôle, et la couleur est déterminée par la propriété ForeColor. La méthode Print n'offre aucun contrôle de l'emplacement du texte et ne peut afficher le texte qu'horizontalement.

Dans Visual Basic 2008, la méthode DrawString est utilisée pour afficher du texte. La police est déterminée par un objet Font et la couleur par un objet Brush ; tous les deux sont passés comme paramètres à la méthode DrawString. La méthode DrawString dispose également des paramètres X et Y qui déterminent l'emplacement de début du texte. Il existe également un paramètre Format optionnel qui utilise un objet StringFormat vous permettant d'afficher le texte verticalement.

Méthode PSet

Dans Visual Basic 6.0, la méthode PSet est utilisée pour modifier la couleur d'un pixel sur un formulaire ou un contrôle PictureBox. Si la propriété DrawWidth a une valeur supérieure à 1, la méthode PSet dessine un cercle plein. Un paramètre optionnel est utilisé pour spécifier la couleur ; s'il est omis, le paramètre ForeColor est utilisé.

Dans Visual Basic 2008, la méthode PSet n'a aucun équivalent. Pour modifier la couleur d'un seul pixel sur un formulaire ou sur le contrôle PictureBox, utilisez la méthode DrawEllipse pour dessiner un cercle avec une hauteur et une largeur de 1 pixel. Pour dupliquer les fonctionnalités de PSet lorsque DrawWidth est supérieur à 1, utilisez la méthode FillEllipse.

Modifications des codes graphiques

Les exemples de code ci-dessous illustrent les différences entre les techniques de codage dans Visual Basic 6.0 et dans Visual Basic 2008.

Dessin d'une courbe

Le code suivant montre comment dessiner une ligne sur un formulaire au moment de l'exécution. Dans l'exemple Visual Basic 6.0, la méthode Line est utilisée; elle utilise comme arguments les coordonnées X et Y des points de début et de fin et, éventuellement, une couleur. L'exemple Visual Basic 2008 utilise la méthode DrawLine qui utilise comme arguments un objet Pens et les coordonnées X et Y des points de début et de fin.

Remarque :

Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Dessin d'une ligne en pointillés

Le code suivant montre comment dessiner une ligne en pointillés sur un formulaire au moment de l'exécution. Dans l'exemple Visual Basic 6.0, la propriété DrawStyle détermine l'apparence de la ligne. L'exemple Visual Basic 2008 utilise un objet Pen, en affectant une valeur à sa propriété DashStyle pour déterminer l'apparence.

Remarque :

Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Contrôle de l'épaisseur de ligne

Le code suivant montre comment dessiner des lignes de différentes épaisseurs sur un formulaire au moment de l'exécution. Dans l'exemple Visual Basic 6.0, la propriété DrawWidth est utilisée. L'exemple Visual Basic 2008 utilise la propriété Width de l'objet 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

Dessin d'un cercle

Le code suivant montre comment dessiner un cercle sur un formulaire au moment de l'exécution. Dans l'exemple Visual Basic 6.0, la méthode Circle est utilisée ; elle utilise comme arguments les coordonnées X et Y du centre, du rayon et, éventuellement, une couleur. L'exemple Visual Basic 2008 utilise la méthode DrawEllipse qui prend un objet Pen, les coordonnées X et Y du coin supérieur gauche du rectangle englobant ainsi que la largeur et la hauteur comme arguments.

Remarque :

Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Dessin d'un rectangle plein

Le code suivant montre comment dessiner deux rectangles sur un formulaire au moment de l'exécution, un avec un remplissage uni et l'autre avec un des hachures croisées. Dans l'exemple Visual Basic 6.0, les propriétés FillColor et FillStyle sont utilisées en même temps que la méthode Line. Un appel à la méthode Line à l'aide du paramètre B permet de dessiner un rectangle.

L'exemple Visual Basic 2008 utilise la méthode Graphics.Rectangle pour dessiner le cadre et la méthode Graphics.FillRectangle qui prend un objet Brush comme argument. Dans cet exemple, les contrôles SolidBrush et HatchBrush sont utilisés.

Remarque :

Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Affichage d'une image sur un formulaire

Le code suivant illustre des méthodes graphiques permettant d'afficher une image sur un formulaire au moment de l'exécution. L'exemple Visual Basic 6.0 utilise la méthode PaintPicture. L'exemple Visual Basic 2008 utilise la méthode 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

Affichage de texte dans un formulaire

Le code suivant illustre des méthodes graphiques permettant d'afficher une chaîne de texte sur un formulaire au moment de l'exécution. L'exemple Visual Basic 6.0 utilise la méthode Print. L'exemple Visual Basic 2008 utilise la méthode 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

Définition de la hauteur et de la largeur d'une chaîne

Le code suivant illustre des méthodes graphiques permettant de déterminer la taille d'une chaîne sur un formulaire au moment de l'exécution, et ensuite de dessiner un rectangle pour l'englober. L'exemple Visual Basic 6.0 utilise les méthodes TextHeight et TextWidth. L'exemple Visual Basic 2008 utilise la méthode MeasureString qui retourne une structure 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

Dessin d'un pixel unique

L'exemple suivant illustre des méthodes graphiques permettant de modifier la couleur d'un seul pixel sur un formulaire au moment de l'exécution. L'exemple Visual Basic 6.0 utilise la méthode PSet. L'exemple Visual Basic 2008 utilise la méthode DrawEllipse avec les paramètres Height et Width ayant la valeur 1.

Remarque Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Définition de la couleur d'un pixel unique

Le code suivant illustre des méthodes graphiques permettant de déterminer la couleur d'un pixel situé à un emplacement particulier dans une image sur un formulaire au moment de l'exécution, et de dessiner ensuite un rectangle plein de cette couleur. L'exemple Visual Basic 6.0 utilise la méthode Point pour récupérer la valeur de couleur. L'exemple Visual Basic 2008 utilise la méthode GetPixel.

Remarque :

Dans Visual Basic 6.0, l'unité de mesure par défaut correspond à des twips ; dans Visual Basic 2008, il s'agit de pixels.

' 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

Équivalences de propriété et de méthode graphiques

Le tableau suivant répertorie les propriétés graphiques et les méthodes de Visual Basic 6.0, ainsi que leurs équivalents Visual Basic 2008.

Visual Basic 6.0

Équivalent Visual Basic 2008

Propriété AutoRedraw

Nouvelle implémentation. Pour assurer la persistance des graphismes, placez les méthodes graphiques dans l'événement Paint.

Méthode Circle

Méthode DrawEllipse

Propriété ClipControls

Nouvelle implémentation. La propriété ClipControls n'est plus nécessaire.

Méthode Cls

Méthode Clear

Propriété CurrentX

Paramètre x de plusieurs méthodes graphiques. Par exemple, DrawRectangle (stylet, x, y, largeur, hauteur)

Propriété CurrentY

Paramètre y de plusieurs méthodes graphiques. Par exemple, DrawRectangle (stylet, y, y, largeur, hauteur)

DrawMode Propriété

Nouvelle implémentation. La propriété DrawMode n'est plus nécessaire.

Propriété DrawStyle

Propriété DashStyle

Propriété DrawWidth

Propriété Width

Propriété FillColor

Objet SolidBrush

Propriété FillStyle

Objet HatchBrush

Propriété HasDC

Nouvelle implémentation. Les contextes de périphérique (DC) ne sont plus nécessaires avec GDI+.

Propriété HDC

Nouvelle implémentation. Les contextes de périphérique (DC) ne sont plus nécessaires avec GDI+.

Propriété Image

Nouvelle implémentation.

Méthode Line

Méthode DrawLine

Méthode PaintPicture

Méthode DrawImage

Méthode Point

Pas d'équivalent direct. Pour les bitmaps, utilisez Bitmap.GetPixel. Pour les formulaires ou les contrôles, utilisez la propriété BackColor.

Méthode Print

Méthode DrawString

Méthode Pset

Méthodes DrawEllipse, FillEllipse

Propriétés TextHeight, TextWidth

Méthode MeasureString

Mettre à niveau des remarques

Lorsqu'une application est mise à niveau de Visual Basic 6.0 à Visual Basic 2008, les méthodes graphiques ne sont pas mises à niveau et des avertissements sont insérés dans le code. En raison des différences considérables entre GDI et GDI+, tout code graphique existant devra être réécrit.

Voir aussi

Tâches

Contrôle utilisateur de dessin personnalisé, exemple

Autres ressources

Vue d'ensemble des graphismes (Windows Forms)

Mise en route de la programmation graphique

À propos du code managé GDI+

Utilisation de classes graphiques managées