Exercice VB: Éditeur simplifié d'une matrice
Rédigé par GC Team, Publié le 03 Janvier 2012, Mise à jour le Vendredi, 16 Décembre 2022 22:17
Sous Windows, une icône est constituée de petits points juxtaposés formant une image. Chacun de ces points peut avoir une couleur choisie parmi un nombre souvent limité de couleurs "standard". On appelle cette gamme de possibilités une palette. Un éditeur d'icônes a donc pour premier rôle de permettre à l'utilisateur de placer des points de différentes couleurs dans une grille agrandie représentant une matrice de points. Ils formeront plus tard l'image de l'icône.
Programme demandé :
On se propose ici de réaliser un éditeur simplifié d'une matrice de 16 x 16 carrés. On pourra en cliquant sur l'un d'entre eux y placer une couleur choisie dans une palette située à sa droite (voir exemple ci-dessous). Il ne sera pas demandé de prévoir la lecture ou la sauvegarde de ces points dans un fichier. En revanche, toutes ces valeurs seront stockées dans un tableau (nommé grille) de 256 éléments de type entiers.
- Interface (voir exemple ci-dessous):
- Une zone image (objet PictureBox – voir note en bas de page) pour y dessiner votre grille
- Une autre zone image pour y dessiner la palette
- Bouton Effacer pour effacer le pictogramme et "vider" le tableau
- Le code d'affichage initial sera placé dans Form_Activate et débutera par l'instruction DoEvents
- La grille ou image principale (nommée par défaut Picture1) devra être quadrillée à l'aide de petits carrés représentant chacun un pavé de couleur. Pour obtenir ce type de carrés, on utilisera l'instruction line précédée de deux autres commandes ayant pour but de changer le mode de remplissage des rectangles (propriété .FillStyle = 0) et d'en spécifier la couleur (propriété .FillColor). Le cadre est dessiné par défaut en noir, avec par exemple: Picture1.line (x1,y1)-(x2,y2) , , B
- Pour choisir une couleur dans la palette, cliquez simplement sur le carré rempli avec la couleur correspondante. A l'aide de l'événement MouseDown de chacun des objets Picture, vous pourrez repérer les positions X et Y de la souris pour déterminer la case visée. Un choix judicieux de la propriété Scale vous simplifiera grandement la tâche. Les 16 couleurs de la palette correspondent aux 16 valeurs possibles pour la fonction QBColor.
- Le bouton Effacer aura pour but de réinitialiser le tableau (nommé grille) et d'effacer les cases de la grille en les remplissant de blanc.
Note:
Pour dessiner dans un objet Picture, on peut utiliser les instructions classiques précédées du nom de l'objet en question. Par exemple : |
Picture1.Scale (Xmin,Ymax)-(Xmax,Ymin) |
Conseil:
Pour la gestion de la souris, essayez donc d'utiliser les événements MouseDown et MousMove sur les objets Picture1 ou Picture2, plutôt que l'événement Click
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Dim grille (1 To 16, 1 To 16) As Integer Dim pal (1 To 16) As Integer Dim couleur As Integer Private Sub Bouton_Effacer_Click() Form_Activate End Sub Private Sub Form_Activate() Dim i As Integer, j As Integer DoEvents '1) Echelle de la grille Picture1.Scale (0, 16)-(16, 0) '2) Initialisation de la grille et affichage initial Picture1.FillStyle = 0 couleur = 15 'Blanc Picture1.FillColor = QBColor(couleur) 'On pourrait aussi utiliser VBWhite avec VB5 For i = 1 To 16 'pour X For j = 1 To 16 'pour Y grille(i, j) = couleur Picture1.Line (i - 1, j - 1)-(i, j), , B Next j Next i 'Définition de l'échelle de la palette Picture2.Scale (0, 16)-(1, 0) Picture2.FillStyle = 0 For i = 1 To 16 Picture2.FillColor = QBColor(i - 1) Picture2.Line (0, i - 1)-(1, i), , B Next i End Sub Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) grille(Int(X), Int(Y)) = couleur Picture1.Line (Int(X), Int(Y))-(Int(X) + 1, Int(Y) + 1), , B End Sub Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button 0 Then Picture1_MouseDown Button, Shift, X, Y End Sub Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) couleur = Int(Y) Picture1.FillColor = QBColor(couleur) End Sub |