spheris | #1 Posté le 1/2/2012 à 13:21:59 |
---|
| Bonjour, Je souhaite creer un timer, le paramétrer avec un temps A (45secondes par exemple) et quand il a atteind sa valeur, avoir un retour d'info dans une variable B ("timer arrété" ou 0 par exemple) puis le détruire. a) Pourriez-vous m'indiquer quel est ce code ? b) Comme je vais m'en servir souvent, dois-je faire un module ou une classe ? Merci pour vos réponses.
|
linuxos | #2 Posté le 1/2/2012 à 16:37:36 |
---|
Un peu de sel, de poivre et la crevette sera... | Bonjour,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| PUBLIC MonTimer AS Timer
PUBLIC SUB Demarrer_Timer()
MonTimer = NEW Timer AS "MonTimer1" MonTimer.Delay = 10000 <--- 10 Secondes MonTimer.Enabled = TRUE MonTimer.Start()
END
PUBLIC SUB MonTimer1_Timer()
' Evenement quand le Timer arrive a son terme
' Arret du Timer MonTimer.Stop MonTimer.Enabled = FALSE
' Destruction du Timer MonTimer = NULL
END
|
OlivierLorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
spheris | #3 Posté le 1/2/2012 à 20:06:10 |
---|
| Merci LinuxOs mais un peu plus de precisions. Je compte demarrer 5 ou 6 timer en meme temps ou sequentiellement puis les eteindre chacun a une periode donnée. comment les repérer sanchant que si je fais ce que tu dis :
, je les perds tous non ? |
linuxos | #4 Posté le 1/2/2012 à 22:20:16 |
---|
Un peu de sel, de poivre et la crevette sera... | spheris,
Je crois que sur le coup tu n'as pas été très précis dans tes explications
Donc voila le code:
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
| PUBLIC TableauTimer AS NEW Object[]
PUBLIC SUB Demarrer_Nouveau_Timer()
DIM NouveauTimer AS Timer DIM IndexTableau AS INTEGER
NouveauTimer = NEW Timer AS "ListTimer"
TableauTimer.Add(NouveauTimer)
IndexTableau = TableauTimer.Find(NouveauTimer)
TableauTimer[IndexTableau].Delay = 10000 ' <--- 10 Secondes TableauTimer[IndexTableau].Enabled = TRUE TableauTimer[IndexTableau].Start()
END
PUBLIC SUB ListTimer_Timer()
' Evenement quand un Timer arrive a son terme
' Arret du Timer LAST.Stop LAST.Enabled = FALSE
' Destruction du Timer IF TableauTimer.Exist(LAST) THEN TableauTimer.Remove(TableauTimer.Find(LAST)) END IF
END
|
Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
spheris | #5 Posté le 2/2/2012 à 23:08:12 |
---|
| Dans la même lignée de question, un tableau peut il posséder des integer, variant, string, timer ou autres dans le même tableau vu qu'on le défini en object[] |
linuxos | #6 Posté le 3/2/2012 à 00:12:50 |
---|
Un peu de sel, de poivre et la crevette sera... | Spheris,
Je vois que tu n'es pas a l'aise avec la programmation objet mais cela viendra:
1 - Creer une Classe nommée: ClassInfo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| ' Gambas class file
PUBLIC UnTexte AS STRING PUBLIC UnNombre AS INTEGER PUBLIC UnTableauTexte AS String[] PUBLIC UnTableauNombre AS Integer[]
PUBLIC SUB _new()
UnTableauTexte = NEW String[] UnTableauNombre = NEW Integer[]
END
|
2 - Le code
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
| PUBLIC TableauTimer AS NEW Object[] PUBLIC TableauInfo AS NEW Collection
PUBLIC SUB Form_Open()
Lancer_les_Timer()
END
PUBLIC SUB Lancer_les_Timer()
' Procedure pour lancer quelques Timer avec des paramètres différents
Demarrer_Nouveau_Timer(5000, "Timer1", 1, ["45", "12", "48"], [1, 56, 24])
Demarrer_Nouveau_Timer(2000, "Timer2", 2, ["19", "43", "65"], [9, 8, 10])
Demarrer_Nouveau_Timer(12000, "Timer3", 3, ["61", "68", "29"], [12, 6, 74])
Demarrer_Nouveau_Timer(10000, "Timer4", 4, ["82", "52", "99"], [16, 13, 52])
Demarrer_Nouveau_Timer(8000, "Timer5", 5, ["27", "14", "100", "41"], [20, 19, 63])
END
PUBLIC SUB Demarrer_Nouveau_Timer(UnDelais AS INTEGER, UnTexte AS STRING, UnNombre AS INTEGER, UnTableauTexte AS String[], UnTableauNombre AS Integer[])
DIM NouveauTimer AS Timer DIM IndexTableau AS INTEGER DIM NouvelleInfo AS ClassInfo
NouveauTimer = NEW Timer AS "ListTimer" NouvelleInfo = NEW ClassInfo
' Configuration de la nouvelle ficher Info du Timer NouvelleInfo.UnTexte = UnTexte NouvelleInfo.UnNombre = UnNombre NouvelleInfo.UnTableauTexte = UnTableauTexte NouvelleInfo.UnTableauNombre = UnTableauNombre
' Ajout du nouveau Timer dans le tableau des Objets TableauTimer.Add(NouveauTimer) ' Stockage du nouveau Timer dans le tableaur des Objets
' Ajout de la fiche Info du Timer dans la Collection des Infos TableauInfo.Add(NouvelleInfo, Str(NouveauTimer)) ' Stockage de la nouvelle fiche liée au nouveau Timer
IndexTableau = TableauTimer.Find(NouveauTimer)
' Démarrage du nouveau Timer TableauTimer[IndexTableau].Delay = UnDelais ' <--- Delais en ms TableauTimer[IndexTableau].Enabled = TRUE TableauTimer[IndexTableau].Start()
PRINT "Nouveau Timer lancé: " Str(TableauTimer[IndexTableau] " Delais: UnDelais
END
PUBLIC SUB ListTimer_Timer()
' Evenement quand un Timer arrive a son terme
DIM sNumTimer AS STRING
' Arret du Timer LAST.Stop LAST.Enabled = FALSE
sNumTimer = Str(LAST)
' Destruction du Timer IF TableauTimer.Exist(LAST) THEN TableauTimer.Remove(TableauTimer.Find(LAST)) END IF
PRINT "Fin d'un Timer. (Nbre de Timer Restants: " & TableauTimer.Count & ")"
' Affichage des Infos du Timer qui vient de se terminer IF TableauInfo.Exist(sNumTimer) THEN PRINT "Timer: " & sNumTimer PRINT " - UnTexte : " & TableauInfo[sNumTimer].UnTexte PRINT " - UnNombre : " & TableauInfo[sNumTimer].UnNombre PRINT " - UnTableauTexte : " & TableauInfo[sNumTimer].UnTableauTexte.Count & " Element(s)" PRINT " - UnTableauNombre: " & TableauInfo[sNumTimer].UnTableauNombre.Count & " Element(s)"
' Destruction du Timer TableauInfo.Remove(sNumTimer) END IF
END
|
Voila, OlivierLorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
spheris | #7 Posté le 3/2/2012 à 08:27:36 |
---|
| Linuxos, Merci pour ta réponse. Tu as bien raison, la poo me dépasse de beaucoup trop loin, Je saisi le sens de ton code mais tout se mord la queu et tout est imbriqué l'un dans l'autre. Je suis simplement fait pour du Basic de 1ere catégorie. Je vais essayer de me dépatouiller avec ton code qui est, certainement, très réussi. Merci pour ton aide. |
manu | #8 Posté le 3/2/2012 à 08:44:04 |
---|
Avec Gambas ca roule ! | je compatis.... C'est perturbant la POO, il y a pas de début ni de fin. J'ai beaucoup de mal, moi aussi à m'y faire, ce qui est incontestablement limitant. On fait avec, ou plutôt sans Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) |
spheris | #9 Posté le 3/2/2012 à 09:46:08 |
---|
| Yeeeesss ! Mon programme fonctionne maintenant. J'y ai juste apporté 2 ou 3 modifs :
pour le demarrage de mon timer, il me manquait l'index de qui envoi la demande de demarrage.
1
2
3
4
5
6
| DIM NouveauTimer AS Timer NouveauTimer = NEW Timer AS "listdestimers" lestimers[lindex] = NouveauTimer lestimers[lindex].Delay = 2500 lestimers[lindex].Enabled = TRUE lestimers[lindex].Start()
|
ensuite j'ai compris aussi comment récupérer le numero de l'index du timer en cours par la commande :
ainsi je peux arréter mon timer par cette commande :
1
| tablotimer[lestimers.Find(LAST)].Stop
|
Merci Linuxos pour ton aide précieuse. Et oui tu as raison manu, nous sommes des Procéduraux et non des P.O.O.man. Pourtant ce n'est pas faute de vouloir y arriver. Il manque le déclic... |