Spaceman a écrit :maintenant c'est à moi de décortiquer tout ça et je te promets que des questions vont jaillirent.
encore merci et bon après midi à toi
Je t'en prie. J'attends sereinement tes questions. Si tu veux décortiquer quelquechose, commence par le
premier code, notamment la procédure AlarmCheckAll() et la Structure Alarm.
Aspect programmeur
Code : Tout sélectionner
Structure Alarm
*ResetAll ; Pointeur de procédure/Procédure de réinitialisation
*CheckSyntax ; Idem/Vérifie la syntaxe de la date saisie
*Ack ; Idem/Acquitte une alarme
*AckAll ; Idem/Acquitte toutes les alarmes signalées
*InputDate ; Idem/Saisie une date
*CheckAll ; Idem/Boucle principale de vérification des alarmes
*CloseAll ; Idem/Procédure de fermeture du programme
*AvailableOne ; Idem/Retourne l'Index d'une alarme inutilisée
*Set ; Idem/Modifie les caractéristiques d'une alarme
*Reset ; Idem/Désactive une alarme
*NewOne ; Idem/Ajoute une nouvelle alarme
Start.L ; Mis à un : effectue une boucle d'affichage de toutes les alarmes
; Passe automatiquement à zéro pour vérifier les alarmes
ListWin.L ; Numéro attribué à la fenêtre contenant les alarmes
ListGdt.L ; Numéro attribué au gadget contenant les alarmes
AckGdt.L ; Numéro attribué au gadget du bouton d'acquittement général
Menu.L ; Numéro attribué au menu popup d'interface des alarmes
MenuItem.L ; Item sélectionné par l'utilisateur
Event.L ; Evénement en temps réel
EventGdt.L ; Gadget subissant l'événement
EventType.L ; Type d'événement produit
HourSet.S ; Chaîne contenant la date et l'heure d'une alarme à modifier
; (avec AlarmSet() )
StatSet.L ; Etat d'une alarme à modifier ( avec AlarmSet() )
DateSys.L ; Heure (et date) système en secondes
HmsSys.S ; Chaîne contenant l'heure système
HourSys.L ; Heure système (en heures)
MinuteSys.L ; Minutes système (en minutes)
SecondSys.L ; Secondes système (en secondes)
MaxQty.L ; Quantité maximum d'alarmes disponibles
Index.L ; Dans le traitement individuel d'une alarme, n° de l'alarme traitée
DateError.L ; Si =1 alors la syntaxe de la date saisie est mauvaise
RequestFlag.L ; Si =0 alors aucune requête ne fonctionne (pas de signalement, pas de modification d'alarmes possibles)
*Hours ; Pointeurs vers la table des alarmes
EndStructure
La table des alarmes contient les données nécessaires pour chaque alarme:
Code : Tout sélectionner
Structure AlarmSet
Ymd.S ; (Y+m+d = Year+Month+Day = Année+Mois+Jour
; sous la forme JJ/MM/AA)
Year.L ; N° de l'année sous la forme AAAA (ex:2009)
Month.L ; N° du mois
Day.L ; N° du jour
Hms.S ; (H+m+s = Heure + Minute + Seconde
; sous la forme HH:MM:SS)
Hour.L ; N° de l'heure
Minute.L ; N° de la minute
Second.L ; N° de la seconde
Stat.L ; Etat de l'alarme
; 0 = Inactive
; 1 = Active
; 2 = Signalée (L'utilisateur devra l'acquitter pour qu'elle soit à nouveau active)
EndStructure
La procédure AlarmMain() contient quelque exemples d'alarme pré-programmées. ça te donne une idée de la manière simplissime de rajouter une alarme depuis le programme :
Code : Tout sélectionner
; Rajout d'une alarme
Alarm\HourSet = "21/02/09 21:02:00"
Alarm\StatSet = 0 ; Alarme inactive
AlarmNewOne(Alarm)
Cette intervention peut avoir lieu
N'IMPORTE OU dans ton programme. Tu peux appeler la procédure AlarmNewOne() de toutes les manière possibles:
AlarmNewOne(Alarm) ; Direct
CallFunctionFast(Alarm\NewOne, Alarm) ; Indirect
CreateThread(Alarm\NewOne, Alarm) ; Parallèle
Toutes les procédures peuvent être accessibles de cette manière si bien que ce programme est compatible avec une compilation en DLL.
Pour modifier une alarme:
Code : Tout sélectionner
; Modifier une alarme
Alarm\Index = 3 ; On modifie l'alarme n°3
Alarm\HourSet = "21/02/09 21:02:00"
Alarm\StatSet = 1 ; Alarme active
AlarmSet(Alarm)
Au démarrage, tu peux augmenter le nombre d'alarmes jusqu'à 256:
Code : Tout sélectionner
; Initialisation
Alarm\MaxQty = 256 ; 256 alarmes disponibles
AlarmResetAll(Alarm)
Il y a d'autres options avec chacunes des procédures. Tu me questionneras si besoin.
Aspect utilisateur
Au démarrage, s'ouvre la fenêtre avec la liste des alarmes et un bouton d'acquittement général. Ce programme permet de régler et surveiller 16 alarmes différentes.
Process d'une alarme:
A) Inactive >>(Activer)>> Active
B) Active >>[SONNER]>> Signalée
C) Signalée >>(Acquitter)>> Active
D) Active >>(Désactiver)>> Inactive
Légende du process:
Etat initial >>(Action de l'utilisateur)>> Etat final
Etat initial >>[ACTION DE LA MACHINE]>> Etat final
Modifier une alarme:
1) Choisisr l'alarme à modifier
2) Clic bouton droit
3) Clic sur « Modifier l'horaire »
4) Une fenêtre s'ouvre et invite à saisir un horaire
>> Il respecter la syntaxe JJ/MM/AA HH:MM:SS
>> Syntaxe = Jour slash mois slash année espace heure 2points minutes 2points secondes
>> chaque nombre doit toujours avoir 2 chiffres. Rajouter un chiffre zéro à gauche si nécessaire. 1/1/9=Mauvais 01/01/09=Bon
5) Clic sur Ok
6) Si la syntaxe de la date est invalide, une fenêtre s'ouvre et indique une erreur de syntaxe de la date. Il faut alors revenir à l'étape 1
Si la date de la syntaxe est valide, cette date s'affiche désormais dans la liste.
Activer une alarme:
1) Choisir l'alarme à activer
2) Clic bouton droit
3) Clic sur « Activer »
Une alarme s'est mise en route
Dans ce cas, une fenêtre s'ouvre et indique quel est le numéro de l'alarme concernée. Cliquer sur Ok.
L'alarme n'est plus active. Elle est désormais
Signalée.
Acquitter une alarme signalée:
1) Choisir l'alarme à acquitter
2) Clic bouton droit
3) Clic sur « Acquitter »
L'horaire de l'alarme est reporté à 24H (incrémentation d'une journée)
L'alarme est à nouveau active.
Acquitter toutes les alarmes signalées:
Pour éviter une action trop laborieuse pour acquitter toutes les alarmes, cliquer sur le bouton « Acquitter toutes les alarmes signalées »
Toutes les alarmes signalées sont à nouveau actives après une incrémentation automatique de 24 heures.
Désactiver une alarme:
1) Choisir l'alarme à désactiver
2) Clic bouton droit
3) Clic sur « Désactiver »
L'alarme est désormais inactive.