Testez vos aptitudes à
développer
MOON
- Une application sur
les phases lunaires
Cette application présente d’intéressantes
caractéristiques de Visual Basic, comme le graphisme et la
manipulation directe de la feuille. En la
construisant, vous apprendrez de nouveaux concept de
programmation
Visual Basic.
L’application [MOON] montre graphiquement l’état de la
lune à une date donnée, choisie entre 1753 et
2078 (l’intervalle de dates géré par Visual Basic.
Début du programme(Begin)
Choisissez la commande " Nouveau projet "
du menu " Fichier ".
Dimensionnez la feuille avec la souris, de façon à ce qu’elle
soit à peu près carrée. Ainsi l’image circulaire de
la lune apparaîtra ronde et non ovale.
Une largeur de 4170 et une hauteur de 5160 devraient convenir.
Les nombres indiquant la largeur et la hauteur sont affichés
à l’extrémité droite de la barre de propriétés.
L’emplacement exact de la feuille à l’écran n’est pas
important car nous ajouterons au code les instructions
nécessaires pour qu’elle soit centrée au
chargement.(Instruction [CenterForm] ).
Avant de commencer à taper du code, nous créerons une barre
de menus, ajouterons une étiquette et initialiserons
les propriétés.
1)- Ouvrez le menu " Fenêtre(Window) "
dans la barre de menus et choisissez la commande
" Création de
menu (Menu Design)".
L’application MOON a un seul menu déroulant,
" Options ", qui comprend deux commandes.
Tapez " &Options " dans le champ de
saisie Caption , puis appuyez sur la touche tabulation,
pour amener
Le curseur de la souris sur la commande suivante, tapez
" mnuOptions " dans le champ Name.
Le " et commercial " (&) est
optionnel. Il souligne la lettre qui suit et permet à l’utilisateur
de choisir la commande
en tapant au clavier la combinaison de touches ALT + lettre
soulignée.
Cliquez sur le bouton " suivant(Next) pour entrer
le nom de la première commande menu.
Cliquez sur la flèche orientée à droite pour l’indenter
et indiquer qu’il s’agit d’une commande de menu.
Saisissez " &Nouvelle date " dans le
champ "Caption et " mnuDate "
comme nom de contrôle.
Cliquez encore une fois sur " Suivant(Next) et tapez
" &Quitter " et " mnuQuitter ".
Cliquez sur la flèche orientée à droite pour l’indenter.
Pour sauvegarder votre réalisation appuyer sur le bouton
" OK "
Vérifier le menu en lançant le programme par le bouton
flèche droite de la barre d’outils, ou en utilisant le
raccourci
qui est la touche " F8 ".
Nous avons créé les sous programme intitulés
" Sub mnuDate_Click ( ) " et " Sub
mnuQuitter_Click ( ) ",
Ils ne seront activés que lorsque les commandes
correspondantes auront étés choisies par l’utilisateur.
L’application " MOON " n’utilise qu’un
seul contrôle, un champ étiquette (Label) qui affiche la
date et la
Phase lunaire correspondante : montante ou descendante
(avant ou après la plaine lune).
2)- Vous sélectionnez un objet (Etiquette1 (Label)) depuis
la boite à outils, et vous le dessinez dans la
feuille de façon à ce qu’il soit centré près du sommet
de la feuille.
Donnez une largeur de 1935 et une hauteur de 375 à l’étiquette.
2 .1)- Initialisons les propriétés de la feuille
(Form1) et de l’étiquette (Label1) - (Touche de raccourci
F4 ).
Sélectionnez d’abord l’étiquette et choisissez la
propriété " Alignment " dans la fenêtre
de propriétés.
Donnez lui la valeur " 2 -
Centré ". Changez ensuite les couleurs de fond et
de premier plan de l’étiquette.
Mettez la propriété " BackColor " de l’étiquette
à &H00400000&, qui représente le bleu sombre.
Donnez ensuite la valeur &H0000FFFF(Jaune) à la
propriété " ForeColor ".
Une Application sur les phases lunaires (Suite)
Sélectionnez ensuite la feuille (Form1) et changez la
propriété " Caption " pour que le titre
de la fenêtre
soit " Phases de la lune ".
Entrez la chaîne Moon dans la propriété " Name "
et mettez " BorderStyle " à " 0
– Aucun ".
Donnez la même couleur de fond à la fenêtre, à l’étiquette
(&H00400000&) et mettez la
Propriété " ForeColor " à
&H0080FFFF&.
Laissez les autres propriétés à leur valeur par défaut.
Résumé des modifications apportées à la fenêtre des
propriétés de la feuille Moon.
Begin Form Moon
BackColor = &H00400000&
Caption = " Phases de la lune "
ForeColor = &H0080FFFF&
Begin Label1 ( Etiquette1)
Alignment = 2 ‘Centré
BackColor = &H00400000&
Caption = " Etiquette1 "
ForeColor = &H0000FFFF&
Height = 375
Width = 1935
End
Il ne vous reste qu’a ajouter du code aux sous programmes
appropriés.
Il faut déclarer une constante et deux variables globales à
la feuille.
2.2) - Choisissez le bouton " Code(View
Code) " dans la fenêtre de projet puis choisissez
" Général " dans la liste
des objets (Object) et " Déclarations "
dans la liste des procédures.
Tapez ensuite les lignes suivantes
‘Déclaration d’une constante ayant
pour nom " NBETOILES " et ayant pour
valeur le chiffre 1000
Const NBETOILES = 1000
‘Déclaration d’une variable
intitulée " Phase " Nous ne précisons
pas le type de variable, aussi VB va la
considérer par défaut à une variable
de type " Variant "
Dim Phase
’Déclaration d’une variable
intitulée " DateLune " déclarée comme
étant de type " String "
(Alphanumérique).
Dim DateLune$ ‘Nous aurions pu écrire et je cite,
" Dim DateLune As String ".
‘Le sigle Dollar ($) représente la
valeur de type String. (Se reporter aux documents fournis en
annexe).
Après avoir effectué les déclarations de variables
indispensables, nous allons développer le programme en
saisissant les instructions nécessaires au déroulement du
programme.
En effectuant un double click sur la feuille, nous faisons
apparaître les fenêtres de saisie du code.
La première fenêtre qui est ouverte par le programme est l’objet
" Form " et la procédure "
Load ".
Le curseur est en attente d’instructions sous la procédure
" Sub Form_Load ( ) " -Ecrire :
‘Centrer la feuille à l’écran (On
utilise la procédure préalablement étudiée dans le cours
précédent )
CenterForm Me ‘(Centrer la feuille
Celle-ci)
‘Obtenir la date
GetMoonDate
‘Lance des nombres aléatoires pour l’affichage
des étoiles
Randomize Timer
Une Application sur les phases lunaires (Suite)
Le sous programme Form_Load est activé une fois, lorsque
l’application se lance et que la feuille est chargée
en mémoire. Centrer la fenêtre principale, obtenir la date
de départ et lancer le générateur de nombres
aléatoires sont des tâches qui n’ont pas besoin d’être
renouvelées pendant le fonctionnement du programme.
C’est la raison pour laquelle nous les avons mises dans
le code Form_Load.
Dans l’application MOON, Form_Paint est appelé par le
sous programme menDate_Click, lui même activé
Si l’on choisi " Nouvelle date " dans le
menu principal.
Choisissez " Paint dans la liste des procédures de
la feuille " Form1 " object " Form ".
Nous visualisons la procédure du sous programme
intitulé : " Sub Form_Paint ( ) "
Sub Form_Paint ( )
‘Met à jour l’étiquette et efface
le graphique
If Phase < .5 Then ‘Traitement
conditionnel (Si Phase est plus petit que 0.5 alors…)
Etiquette1.Caption = " Lune descendante du
" + DateLune$
Else
Etiquette1.Caption = " Lune montante du "
+ DateLune$
End If
Cls ‘Effacement
‘Détermine le nombre de lignes de
pixels
ScaleMOde = 3 ‘Propriéte ScaleMOd de Form1 ayant la valeur
3-Pixels
Pixels% = ScaleHeight + 1
For i% = 1 To NBETOILES
Pset (Rnd, Rnd) ‘Randomize valeurs
aléatoires calculé par l’environnement de programmation
Next
‘Définit le système de
coordonnées pour centrer la lune
Scale (-2, -2) – ( 2,2)
‘Dessine la partie visible de la lune
For y = 0 To 1 Step 4 / Pixels%
x = sqr (1-y * y)
‘Eteint les étoiles derriere la lune
Line (-1,y) – (x,y), 0
Line (-x, -y) – (x, -y), 0
‘Détermine le coté de la partie
éclairée
r = 2 * x
If Phase < .5 Then
X1 = -x
X2 = r – 2 * Phase * r – x
Else
X1 = x
X2 = x –2 * Phase * r + r
End If
‘Dessine la partie éclairtée de
la lune
Line (x1, y) – (x2, y)
Line (x1, -y) – (x2, -y)
Next
End Sub
Sélectionnez " mnuDate dans la liste des objets
et click dans celle des procédures.
Rentrez ces quelques lignes de codes.
Sub mnuDate_Click ( )
‘Obtenir une date
GetMoonDate ‘Appel de la procédure GetMoonDate
Form_Paint ‘Appel de la procédure Form_Paint
End Sub
Une Application sur les phases lunaires (Suite)
GetMoonDate est un sous programme créé par le
développeur et non par l’environnement de développement
Il est appelé une fois à partir de " Form_Load "
et de " mnuDate_Click " à chaque fois que
l’utilisateur
Choisit une nouvelle date.
Sélectionnez la commande " Nouvelle procédure(New
Procedure " du menu " Affichage (View)",
Saisissez " GetMoonDate " dans le champ
" Nom(Name " et pressez la touche Entrée.
Visual Basic crée instantanément une nouvelle routine,
prête à être éditée.
Ajoutez-lui le code suivant :
Sub GetMoonDate ( )
‘La première fois, récupère la date
du jour
Static PasLaPremièreFois As Intéger ‘Déclaration et type
de variable
‘Ne pas demander de date à l’utilisateur
la première fois
If PasLaPremièreFois = True Then
‘Initialise les paramètres d’une
boite d’entrée de texte
Invite$ = " Entrez une date au format jj-mm-aaaa "
Titre$ = " Phases de la lune "
Defaut$ = Date$
‘Demander une date
DateLune$ = InputBox (Invite$, Titre$, Defaut$)
Else
‘Utiliser la date du jour
DateLune$ = Date$
PasLaPremièreFois = True
End If
‘A t’on appuyé sur abandon ?
If DateLune$ = " " Then
DateLune$ = Date$
End If
‘Extrait les chiffres de la date de la
chaîne
NoJour = Val (Left$(DateLune$, 2))
NoMois = Val (Mid$(DateLune$, 4, 2))
NoAnnée = Val (Mid$(DateLune$, 7, 2))
‘Obtient le numéro de série de la
date entrée
On Error GoTo PiègeAErreurs ‘Si
erreur renvoie vers la variable nommée PiègeAErreur
NoSérie = DateSerial (NoAnnée, NoMois, NoJour)
‘Extrait les chiffres de la date à
partir du numéro de série
MTst = Month(NoSérie)
JTst = Day(NoSérie)
Atst = Year(NoSérie)
‘Calcule le jour julien astronomique
JourJulien = NoSérie + 2415019
‘Calcule la phases de la lune
Phase = (JourJulien + 4.867) / 29.53059
Phase = Phase – Int(Phase)
‘Vérifie la date d’entrée
If MTst <> NoMois Or JTst <> NoJour Or Atst
<> NoAnnée Then
Error 1
End If
Exit SubPiègeAErreur :
Beep
MsgBox " Date invalide… " + DateLune$,
48, " Phases de la lune "
Resume Encore
End Sub
Une Application sur les phases lunaires (Suite)
Encore un sous programme qui a besoin de très peu de
code ! Le sous programme " mnuQuitter _Click "
Qui est activé lorsque l’on choisit l’option
" Quitter ".
Il ne comporte qu’une seule ligne de code
Sub mnuQuitter_Click ( )
‘Quitter le programme
Unload Moon
End Sub
Note : Ce programme ne comportant qu’une seule
feuille de travail, il est évident qu’ en employant
l’instruction " Unload " suivi du nom de
la feuille, nous fermons le programme.
L’instruction Unload ne retire que la feuille qui est
stockée en mémoire.
Néanmoins il est bon de savoir que pour un programme
comportant de nombreux fichiers, nous emploierons
L’instruction " End " qui ferme
absolument tous les fichiers ouverts.
On peut également utiliser l’instruction " Unload
Me " qui veut dire fermer la feuille de travail
(fermez-moi "
sans précisez le nom de la feuille.(Elle ne retire de la
mémoire que la feuille en cours d’ utilisation)
Le programme est prêt à fonctionner.
Choisissez la commande " Lancer " du menu
" Exécution " ou pressez la touche F5.
Cette application a été développée initialement en Visual
Basic 3.0 et réécrite en Visual Basic 6.0.
Si vous rencontrez des difficultés pour la déboguer, faites
moi le savoir en écrivant à :
webmaster @langlade-informatique.com
|