Gambas France BETA


Pas de compte ? Incription

Creation ,destruction d'un timer...

Ce sujet est résolu.

1
AuteurMessages
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



Olivier
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#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 :

1
montimer = NULL
, 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,
Olivier
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#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 :

1
lestimers.Find(LAST)


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...
;)
1