Procédure pas à pas : mise à niveau d'une application Visual Basic 6.0 vers la version actuelle de Visual Basic
Mise à jour : novembre 2007
Cette procédure pas à pas permet de mettre à niveau un exemple d'application graphique Visual Basic vers Visual Basic 2008. En plus d'illustrer le processus de mise à niveau, cette procédure pas à pas met en évidence les différences qui existent entre les architectures graphiques de Visual Basic 6.0 et de Visual Basic 2008. Cette procédure peut également servir d'introduction à la gestion des problèmes d'architecture rencontrés dans vos applications.
Dans le cas présent, l'application exemple est un simple formulaire contenant deux boutons, une zone d'image, une minuterie et un contrôle Image caché. Bien que cet exemple ne soit pas représentatif de la plupart des applications que vous souhaitez mettre à niveau, il présente de nombreux problèmes complexes que vous pourriez rencontrer lors de la mise à niveau de vos propres applications.
Remarque : |
---|
Cette procédure pas à pas nécessite que Visual Basic 6.0 soit installé sur votre ordinateur de développement. |
Pour créer l'application Visual Basic 6.0
Ouvrez Visual Basic 6.0. Dans le menu Fichier, choisissez Nouveau projet.
Dans la boîte de dialogue Nouveau projet, choisissez EXE standard et cliquez sur OK.
Ajoutez un contrôle PictureBox au formulaire, et dimensionnez-le de manière à couvrir la plus grande partie du formulaire, tout en ménageant de l'espace dans la partie inférieure.
Attribuez à la propriété AutoRedraw la valeur True, à la propriété DrawStyle la valeur 0-Solid, et à la propriété FillStyle la valeur 0-Solid.
Ajoutez deux contrôles CommandButton sous le contrôle PictureBox.
Sélectionnez le premier CommandButton, puis attribuez à la propriété Name la valeur ClearPictureBox et à la propriété Caption la valeur Clear.
Sélectionnez le deuxième CommandButton, puis attribuez à la propriété Name la valeur ShowImage et à la propriété Caption la valeur Show Image.
Ajoutez un contrôle Image au formulaire puis attribuez à la propriété Name la valeur sourceImage et à la propriété Visible la valeur False.
Définissez la propriété Picture du contrôle Image à n'importe quelle image bitmap. Vous pouvez utiliser une des images dans votre dossier Mes images.
Ajoutez un contrôle Timer au formulaire. Attribuez à la propriété Enabled la valeur False et à la propriété Interval la valeur 25.
Double-cliquez sur le formulaire pour ouvrir l'éditeur de code, et entrez le code suivant.
Option Explicit Private LeftPos As Double Private Sub ClearPictureBox_Click() Picture1.Cls End Sub Private Sub ShowImage_Click() LeftPos = 1 Me.Timer1.Enabled = True End Sub Private Sub Timer1_Timer() If LeftPos <= 0 Then Me.Timer1.Enabled = False Picture1.Print "Visual Basic ROCKS!" Else LeftPos = LeftPos - 0.01 Picture1.Cls Picture1.PaintPicture sourceImage, LeftPos * _ Picture1.Width, 0 End If End Sub
Appuyez sur F5 pour exécuter l'application. Cliquez sur les boutons pour observer le comportement et exécutez le code pour pas à pas pour examiner son fonctionnement.
Dans le menu Fichier, choisissez Enregistrer le projet sous.
Dans la boîte de dialogue Enregistrer le fichier sous, enregistrez le formulaire en tant que PicForm.frm et enregistrez le projet en tant que Drawing.vbp.
Pour exécuter l'Assistant Mise à niveau
Ouvrez Visual Basic 2008. Dans le menu Fichier, sélectionnez Ouvrir un projet.
Dans la boîte de dialogue Ouvrir un projet, localisez le fichier Drawing.vbp, puis ouvrez-le.
Vous lancez ainsi l'Assistant Mise à niveau Visual Basic. La première page de l'Assistant vous en explique le rôle.
Cliquez sur Next pour passer à la seconde page de l'Assistant. Cette page présente les options de mise à niveau ; dans le cas présent, aucune option applicable n'est disponible.
Cliquez sur Next pour passer à la troisième page de l'Assistant. Cliquez sur Nextpour accepter l'emplacement par défaut du nouveau projet, ou indiquez un emplacement différent. L'emplacement défini par défaut est un nouveau dossier situé juste en dessous du dossier du projet Visual Basic 6.0.
Si un message vous invite à créer un dossier, choisissez Oui.
Sur la quatrième page de l'Assistant, cliquez sur Next pour démarrer la mise à niveau.
Une fois la mise à niveau terminée, l'Assistant se ferme et le nouveau projet apparaît dans l'Explorateur de solutions.
Pour afficher les résultats de la mise à niveau
Dans l'Explorateur de solutions, sélectionnez _UpgradeReport.htm pour ouvrir le rapport de mise à niveau.
Remarquez qu'aucun problème général devant être traité n'est spécifié dans le rapport ; pour PicForm.vb, le rapport répertorie six erreurs et aucun avertissement.
Remarque : Si le rapport contient des avertissements, ceux-ci figurent également dans la fenêtre Liste des tâches en tant qu'éléments UPGRADE_WARNING. Les avertissements concernent le code pouvant provoquer de légères différences dans le comportement au moment de l'exécution de votre application. Dans la fenêtre Liste des tâches, double-cliquez sur un élément UPGRADE_WARNING pour atteindre directement le code que vous souhaitez modifier.
Dans la colonne Nouveau nom de fichier, cliquez sur le signe plus pour développer la section PicForm.vb. Cette opération permet d'afficher une liste détaillée des problèmes de mise à niveau concernant le formulaire.
Remarquez que les problèmes s'appliquent à trois emplacements différents : la procédure ClearPictureBox_Click, la procédure Timer1_Timer et la disposition de formulaire. Pour afficher une rubrique d'aide qui explique chaque problème, cliquez sur le lien Description. Dans notre exemple, les problèmes de présentation ne nécessitent aucune intervention ; la rubrique d'aide révèle que deux des propriétés du contrôle PictureBox Visual Basic 6.0 n'ont pas leur équivalent dans Visual Basic 2008.
Pour corriger l'erreur liée à ClearPictureBox_Click
Dans l'Explorateur de solutions, sélectionnez PicForm.vb. Dans le menu Affichage, choisissez Code.
Dans l'éditeur de code, sélectionnez la procédure ClearPictureBox_Click.
Conseil : Un commentaire UPGRADE_ISSUE a été ajouté à la procédure. À la fin du document, vous pouvez cliquer sur le lien qui affiche la rubrique d'aide associée. Tous les problèmes (mis à part les problèmes de présentation) sont ajoutés en tant que commentaires de code au cours d'une mise à niveau, y compris les commentaires UPGRADE_NOTE expliquant ce qui s'est passé au cours de la mise à niveau ; ces commentaires n'apparaissent pas dans le rapport de mise à niveau.
Ajoutez le code suivant à la procédure ClearPictureBox_Click :
Dim g As Graphics = Picture1.CreateGraphics() g.Clear(Picture1.BackColor) g.Dispose()
L'unique erreur dans la procédure d'origine est l'appel à la méthode Picture1.Cls(). Dans Visual Basic 2008, les contrôles intrinsèques ne fournissent pas d'accès direct à leurs surfaces de dessin à l'aide de méthodes (comme dans Visual Basic 6.0). Toutes les opérations graphiques sont gérées avec un objet spécial de type Graphics. Vous pouvez accéder à la surface de dessin d'un contrôle en appelant la méthode CreateGraphics() pour obtenir une instance d'un objet Graphics.
Supprimez ou mettez en commentaire la ligne d'origine : Picture1.Cls().
Pour corriger les erreurs liées à Timer1_Timer
Dans l'éditeur de code, sélectionnez la procédure Timer1_Tick.
Remarque : L'événement Timer du contrôle Visual Basic 6.0 Timer est mis à niveau en événement Tick du composant Visual Basic 2008Timer. Le rapport de mise à niveau affiche le nom de l'ancien événement alors que l'éditeur de code utilise le nom du nouvel événement.
Au démarrage de la fonction, ajoutez le code suivant :
Dim g As Graphics = Picture1.CreateGraphics()
Comme dans la procédure précédente, les erreurs commencent par l'absence d'objet Graphics.
Recherchez le premier UPGRADE_ISSUE, à savoir la méthode Picture1.Print. Ajoutez le code ci-dessous :
g.DrawString("VB .NET ROCKS!", Me.Font, New SolidBrush( _ Color.Yellow), 0, 0)
La méthode DrawString de l'objet Graphics remplace la méthode Visual Basic 6.0 Print. Là où la méthode Print prenait un seul argument Text, DrawString prend également des arguments qui spécifient Font, un objet Brush qui spécifie un objet Color, et les coordonnées de départ pour dessiner le texte.
Supprimez ou mettez en commentaire la ligne d'origine : Picture1.Print("Visual Basic ROCKS!").
Recherchez l'élément UPGRADE_ISSUE suivant, Picture1.Cls(). Remplacez le code par la ligne suivante :
g.Clear(Picture1.BackColor)
Recherchez le dernier élément UPGRADE_ISSUE, Picture1.PaintPicture. Ajoutez le code ci-dessous :
g.DrawImage(sourceImage.Image, CSng(LeftPos * Picture1.Size.Width), _ 0)
Dans ce cas, la méthode DrawImage de la classe Graphics remplace la méthode PaintPicture.
Supprimez ou mettez en commentaire la ligne d'origine : Picture1.PaintPicture(sourceImage, LeftPos * VB6.PixelsToTwipsX(Picture1.Width), 0).
À la fin de la procédure, ajoutez le code suivant :
g.Dispose()
Vous devez utiliser la méthode Dispose pour libérer les ressources mémoire associées à l'objet Graphics.
Pour tester l'application
Dans le menu Déboguer, cliquez sur Démarrer.
Remarque : si vous êtes invités à enregistrer le fichier solution, cliquez sur Enregistrer pour enregistrer le fichier et exécuter l'application.
Cliquez sur le bouton ShowImage.
Vous remarquerez que l'image scintille lorsqu'elle se dessine. Ce problème provient du fait que c'est l'intégralité de la zone qui est effacée avant que chaque image mise à jour se dessine à l'écran.
Modification avancée de l'application
La solution consiste ici à ne dessiner que sur les parties nécessaires de l'écran, au lieu de la zone entière représentée par l'objet Graphics. Dans ce cas, vous voudrez vous assurer que, lorsque l'image se dessine à l'écran, tout pixel, encore à l'écran, correspondant au dernier appel à DrawImage() se confond avec la couleur de l'arrière-plan. Comme l'image se déplace de la droite vers la gauche, il vous suffit d'obscurcir les pixels supplémentaires situés à droite de l'image.
Pour résoudre le problème de scintillement de l'écran
Dans la procédure Timer1_Tick, remplacez la méthode g.Clear(Picture1.BackColor) par le code suivant :
Dim imageWidth As Integer = sourceImage.Image.Width Dim imageHeight As Integer = sourceImage.Image.Height Dim left As Double = imageWidth + (Picture1.Size.Width * LeftPos) g.FillRectangle(New SolidBrush(Me.BackColor), _ New Rectangle(left, 0, 6, imageHeight))
À la place de la méthode Clear, utilisez la méthode FillRectangle pour obscurcir, à l'aide de la couleur de l'arrière-plan, les pixels restants situés à droite de l'image qui se dessine. Pour ce faire, calculez d'abord la coordonnée la plus à gauche du rectangle. Cette opération est effectuée par les trois premières lignes du code.
Dans le menu Déboguer, cliquez sur Démarrer.
Cliquez sur le bouton ShowImage.
L'image se déplace alors sans scintiller.
Il reste encore un problème à résoudre. Vous avez probablement remarqué que la police du message affiché dans le contrôle PictureBox est plus petite que celle de la version d'origine. L'explication est la suivante : dans l'application Visual Basic 6.0, la propriété Font du contrôle PictureBox était définie en Arial Bold 16 au moment du design. Il n'y a pas de propriété Font pour le contrôle Visual Basic 2008PictureBox. À la place, la police par défaut du formulaire (Me.Font) est utilisée. Vous pouvez y remédier en déclarant un nouvel objet Font.
Pour modifier la police
Dans la procédure Timer1_Tick, ajoutez la déclaration suivante :
Dim f As System.Drawing.Font = New System.Drawing.Font("Arial", _ 16, FontStyle.Bold)
Dans l'appel à g.DrawString, remplacez le paramètre de police Me.Font par f.
Dans le menu Déboguer, cliquez sur Démarrer.
Cliquez sur le bouton ShowImage.
À présent, le texte s'affiche dans la police correcte.
Maintenant que l'application équivaut à l'application Visual Basic 6.0 d'origine, vous pouvez ajouter du code pour l'améliorer. Après tout, il est inutile de mettre à niveau l'application si vous ne souhaitez pas tirer parti de Visual Basic 2008.
L'étape suivante vous permet d'ajouter des fonctionnalités pour obtenir une fermeture en fondu du formulaire lors de sa fermeture.
Remarque : |
---|
L'effet de fondu n'est pas visible sur des écrans 256 couleurs ; pour un résultat optimal, vous devez attribuer à la profondeur chromatique la valeur 65536 couleurs ou Couleurs vraies 24 bits. La propriété Opacity fonctionne uniquement sur Windows XP. |
Pour améliorer l'application
Dans l'éditeur de code, sélectionnez la liste déroulante Nom de la classe et choisissez (Form1 Events).
Dans la liste déroulante Nom de la méthode, sélectionnez l'événement FormClosing.
Dans la procédure Form1_FormClosing, ajoutez le code suivant :
Dim i As Single For i = 1 To 0 Step -0.1 Me.Opacity = i Application.DoEvents() System.Threading.Thread.Sleep(100) Next
Dans le menu Déboguer, cliquez sur Démarrer.
Fermez le formulaire et observez la façon dont il disparaît de l'écran.
Vous pouvez contrôler la vitesse de fermeture en fondu en augmentant la taille de la variable Step (ou en réduisant le délai Sleep).
Voir aussi
Concepts
Éléments graphiques pour les utilisateurs de Visual Basic 6.0
Référence
Vue d'ensemble des Windows Forms