logo Pierre AULAS
Visual Basic 6 - Régler la couleur
 Parcours  |   Réalisations  |   Cours  |   Chroniques  |   Divers
Création de l'interface graphique
Définition des propriétés
Ecrire le code du programme

Régler la couleur

Cet exercice doit permettre d'aborder les trois événements KeyPress, Change et LostFocus.
Il met en oeuvre les conversions de type, les fonctions et les appels de procédure.
Il nécessite l'usage de le propriété BackColor du formulaire et de la fonction vb intégrée RGB.

Cette image vous montre l'aspect de votre application une fois terminée.
Quatre étiquettes servent à décrire les différents éléments du formulaire. Celui-ci comporte trois cases recevant les valeurs Rouge, Verte et Bleu qui vont définir la couleur du fond du formulaire.
Le traditionnel bouton Quitter permet de quitter l'application.

1. Création de l'interface graphique

Vous avez à mettre en place:
  - 4 étiquettes: une pour le titre, trois pour commenter les zones de textes.
  - 3 zones de texte pour que l'utilisateur puisse entrer des données.
  - 1 boutons de commande pour quitter l'application.

A l'aide des options fournies par le menu Format > Uniformiser la taille ou Format > Aligner, etc., uniformisez la taille des contrôles et centrez-les de manière à ce que votre formulaire ressemble à peu près à cela:

Il ne vous reste plus qu'à Verrouiller les contrôles.

2. Définition des propriétés

Vous devez définir les propriétés des 8 contrôles présents sur votre formulaire comme indiqué dans le tableau qui suit:

Objet  Propriété  Valeur
Form1  Name  frm01
 Caption  Exercice - Couleurs
 BackColor Blanc
Label1  Name  lblTitre
 Caption  Changement de couleur
 Alignment 2 - Center
 Font  MS sans serif, 12, gras
 BackStyle 0 - Transparent
Label2  Name  lblRouge
 Caption  Rouge :
 BackStyle 0 - Transparent
Label3  Name  lblVert
 Caption  Vert :
 BackStyle 0 - Transparent
Label4  Name  lblBleu
 Caption  Bleu :
 BackStyle 0 - Transparent
Text1  Name  txtRouge
 Text  255
 Alignment 1 - Right Justify
 Font  MS sans serif, 12, gras
Text2  Name  txtVert
 Text  255
 Alignment 1 - Right Justify
 Font  MS sans serif, 12, gras
Text3  Name  txtBleu
 Text  255
 Alignment 1 - Right Justify
 Font  MS sans serif, 12, gras
Command1  Name  cmdQuitter
 Caption  &Quitter
 Cancel  True

La propriété BackColor du formulaire permet de définir la couleur de fond.

On prend soin de définir la propriété BackStyle des étiquettes afin que le changement de couleur du formulaire se voit partout.

Les zones de texte contiennent les valeurs 255 car le code rgb 255,255,255 correspond à la couleur blanche qui est celle du formulaire au démarrage.

Votre formulaire doit désormais ressembler à cela:

Pour l'instant il ne réagit pas aux sollications de l'utilisateur. Il faut donc passer à la partie programmation.

3. Ecrire le code du programme

Quelles vont être les interactions de l'utilisateur avec votre formulaire?

Lorsque l'utilisateur va rentrer une valeur dans une des trois cases, la couleur de fond du formulaire sera mise à jour en conséquence.
Autrement dit: quelque soit la case que l'utilisateur modifie, la même procédure de mise à jour de la propriété BackColor du formulaire est déclenchée.
Il est donc inutile de reproduire pour chaque zone de texte le même code. Il est plus simple, pour chaque zone de texte, d'appeler une procédure commune.

Afin de ne pas interférer avec la suite de l'exercice, la mise à jour de la couleur du formulaire se fera sur l'événement LostFocus de chacune des zones de texte.
Cet événement est déclenché lorsque l'utilisateur quitte la zone de texte sur laquelle il était pour séléctionner un autre contrôle du formulaire. La mise à jour de la couleur ne se fait ainsi que lorsque l'utilisateur a fini de rentrer sa valeur. Ce n'aurait pas été le cas avec l'événement Change qui se déclenche à chaque fois qu'un caractère est modifié dans la zone de texte (donc si vous écrivez "123" il est déclenché 3 fois).

Une fois créées vos trois procédures événementielles liées aux trois zones de texte, il vous reste à indiquer le nom de la procédure commune (nous l'avons appelée ChangerCouleur dans la correction) qui sera appelée dans chacune d'elles.


Ce qui vous donne:

Private Sub txtRouge_LostFocus()
  Call ChangerCouleur
End Sub

Private Sub txtVert_LostFocus()
  Call ChangerCouleur
End Sub

Private Sub txtBleu_LostFocus()
  Call ChangerCouleur
End Sub

Il ne reste plus qu'à écrire la procédure elle-même.
Pour cela il suffit de savoir que la fonction VB RGB(R As Integer, V As Integer, B As Integer) As Integer renvoie un code couleur qui permet de définir la propriété BackColor du formulaire.

Private Sub ChangerCouleur()

Dim bytRouge As Byte
Dim bytVert As Byte
Dim bytBleu As Byte

bytRouge = CByte(txtRouge.Text)
bytVert = CByte(txtVert.Text)
bytBleu = CByte(txtBleu.Text)

Me.BackColor = RGB(bytRouge, bytVert, bytBleu)

End Sub

En réalité il n'est pas nécessaire de typer les variables avec un type aussi restrictif que Byte (la fonction RGB admet des entiers). Mais comme un code rgb n'est de toute manière défini que par des valeurs allant de 0 à 255, nous avons choisi cette option. Elle rend du coup plus nécessaire la mise en place de fonctions vérifiant les valeurs entrées par l'utilisateur.

Pour empêcher l'utilisateur d'entrer autre chose que des chiffres, utilisez l'événement KeyPress des zones de texte. Si la valeur KeyAscii retournée est comprise entre 47 et 59, c'est qu'il s'agit d'un chiffre. Sinon il faut prévenir l'utilisateur qu'il n'a pas entré une valeur correcte.
Comme cette vérification est commune aux trois zones de texte, le plus simple est de créer une fonction qui reçoit en argument la valeur de KeyAscii et retourne sa valeur éventuellement modifiée (si vous définissez KeyAscii à 0, la frappe de l'utilisateur n'est pas prise en compte).

Private Sub txtRouge_KeyPress(KeyAscii As Integer)
  KeyAscii = Verifier(KeyAscii)
End Sub

Private Sub txtVert_KeyPress(KeyAscii As Integer)
  KeyAscii = Verifier(KeyAscii)
End Sub

Private Sub txtBleu_KeyPress(KeyAscii As Integer)
  KeyAscii = Verifier(KeyAscii)
End Sub

Function Verifier(intAscii As Integer) As Integer
  If ((intAscii > 47) And (intAscii < 59)) Then
    Verifier = intAscii
  Else
    Beep
    MsgBox "Vous ne pouvez entrer que des chiffres", vbInformation, "Rappel"
    Verifier = 0
  End If
End Function

Vous pouvez télécharger les sources de l'exercice ici en faisant un clic droit (Enregistrer sous).

Haut de page
Plan du site  |  Mentions légales  |  Crédits  |  Aide