[Résolu][Calc] Multi-Chronos
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Membre OOrganisé
- Messages : 83
- Inscription : 09 févr. 2018 09:55
[Résolu][Calc] Multi-Chronos
Bonsoir,
J'aimerais avoir sur une feuille plusieurs chronomètres indépendants les-uns des autres. Le but est de pouvoir prendre les temps de plusieurs personnes en départs différés (une sorte de contre la montre dans le tour de France).
J'ai suivi au paravent une piste (dialogbox) qui s'est avérée être sans issue. Sous les conseils avisés d'un des intervenants du forum, j'ai repris le concept depuis sa base et me revoilà plus déterminé que jamais. J'ai donc explorer les différents fils du forum et notamment les exemples évoqués dans le fil suivant https://forum.openoffice.org/fr/forum/v ... es#p174417. Pourtant, je n'arrive toujours pas à adapter ces exemples au mien.
(Comme le montre le document ci-joint, seul, le premier est fonctionnel les autres sont totalement inactifs.)
Merci de votre attention, toutes suggestions, pistes, recommandations, encouragements sont les bienvenus
Amicalement, Marc
J'aimerais avoir sur une feuille plusieurs chronomètres indépendants les-uns des autres. Le but est de pouvoir prendre les temps de plusieurs personnes en départs différés (une sorte de contre la montre dans le tour de France).
J'ai suivi au paravent une piste (dialogbox) qui s'est avérée être sans issue. Sous les conseils avisés d'un des intervenants du forum, j'ai repris le concept depuis sa base et me revoilà plus déterminé que jamais. J'ai donc explorer les différents fils du forum et notamment les exemples évoqués dans le fil suivant https://forum.openoffice.org/fr/forum/v ... es#p174417. Pourtant, je n'arrive toujours pas à adapter ces exemples au mien.
(Comme le montre le document ci-joint, seul, le premier est fonctionnel les autres sont totalement inactifs.)
Merci de votre attention, toutes suggestions, pistes, recommandations, encouragements sont les bienvenus
Amicalement, Marc
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par markotxe le 14 mai 2019 08:35, modifié 2 fois.
LibO 7.5.2 et Open Office 4.1.14
Window11 (Obligation de version).
Window11 (Obligation de version).
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Multi-Chronos
Bonjour,
Il faut savoir qu'il n'est pas possible de lancer plusieurs macro en même temps avec AOO ou LO. Ce que tu souhaites faire, revient en gros à lancer une nouvelle macro à chaque fois que tu démarres un chrono , ce n'est donc pas envisageable.
Avant d'étudier l'aspect visuel ou esthétique de la chose, il faut se pencher sur son fonctionnement et sa faisabilité.
Comme les départs son différés, on peut facilement enregistrer dans un tableau (virtuel) l'heure de départ d'un chrono et ainsi de suite pour les autres. Ensuite lorsque le bouton pose ou stop est activé, on mémorise encore une fois dans le tableau l'action et l'heure. Ainsi il devient facile de connaître les temps réalisés en nage et en pause.
Après la difficulté réside dans l'affichage d'un temps qui défile dans plusieurs chrono, simultanément, puisqu'il n'est pas possible de lancer plusieurs macro en même temps.
Utiliser des bouton pour lancer ou arrêter le chrono complique les choses car il faut que chaque bouton ait un nom spécifique pour pourvoir le distinguer des autres. Là dans ton fichier il ont tous le même nom car tu as fait du copier/coller.
Bref, J'ai déjà une petite idée de comment aborder la chose, mais pas sûr d'être suffisamment disponible pour m'y atteler. Il y a ici des spécialistes du langage Python, langage à mon avis plus approprié pour réaliser ton projet. Attendons un peu pour voir.
A+
Il faut savoir qu'il n'est pas possible de lancer plusieurs macro en même temps avec AOO ou LO. Ce que tu souhaites faire, revient en gros à lancer une nouvelle macro à chaque fois que tu démarres un chrono , ce n'est donc pas envisageable.
Avant d'étudier l'aspect visuel ou esthétique de la chose, il faut se pencher sur son fonctionnement et sa faisabilité.
Comme les départs son différés, on peut facilement enregistrer dans un tableau (virtuel) l'heure de départ d'un chrono et ainsi de suite pour les autres. Ensuite lorsque le bouton pose ou stop est activé, on mémorise encore une fois dans le tableau l'action et l'heure. Ainsi il devient facile de connaître les temps réalisés en nage et en pause.
Après la difficulté réside dans l'affichage d'un temps qui défile dans plusieurs chrono, simultanément, puisqu'il n'est pas possible de lancer plusieurs macro en même temps.
Utiliser des bouton pour lancer ou arrêter le chrono complique les choses car il faut que chaque bouton ait un nom spécifique pour pourvoir le distinguer des autres. Là dans ton fichier il ont tous le même nom car tu as fait du copier/coller.
Bref, J'ai déjà une petite idée de comment aborder la chose, mais pas sûr d'être suffisamment disponible pour m'y atteler. Il y a ici des spécialistes du langage Python, langage à mon avis plus approprié pour réaliser ton projet. Attendons un peu pour voir.
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- Membre OOrganisé
- Messages : 83
- Inscription : 09 févr. 2018 09:55
Re: [Calc] Multi-Chronos
Merci OOotremer,
Je vais suivre vos recommandations en m'appuyant sur les exemples précités (qui reprennent le concept que vous décrivez).
Merci encore.
Je vais suivre vos recommandations en m'appuyant sur les exemples précités (qui reprennent le concept que vous décrivez).
Merci encore.
LibO 7.5.2 et Open Office 4.1.14
Window11 (Obligation de version).
Window11 (Obligation de version).
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Multi-Chronos
Dans le fichier joint, réduit à sa plus simple expression, un exemple du principe que j'envisage pour solutionner ta requête.
Le principe :
1)Lorsqu'une cession va commencer on sélectionne GO en A1. Un chrono se mets en marche (on verra après à quoi il peut servir.) Désormais la macro est en marche et elle boucle sur elle même jusqu'à ce que A1 affiche STOP ou RESET
2) dans les tableaux en dessous, lorsqu’un nageur plonge, On sélectionne GO dans la colonne A sous son nom. Un chrono se met en marche à coté du nom et s'arrête si on sélectionne PAUSE ou STOP toujours sous son nom
et ainsi de suite pour les autres nom.
Là il s'agit d'une ébauche pour te permettre de valider ou non le principe. Après on verra pour d'autre fonctionnalité et présentation :
et le fichier pour tester :
A+
Le principe :
1)Lorsqu'une cession va commencer on sélectionne GO en A1. Un chrono se mets en marche (on verra après à quoi il peut servir.) Désormais la macro est en marche et elle boucle sur elle même jusqu'à ce que A1 affiche STOP ou RESET
2) dans les tableaux en dessous, lorsqu’un nageur plonge, On sélectionne GO dans la colonne A sous son nom. Un chrono se met en marche à coté du nom et s'arrête si on sélectionne PAUSE ou STOP toujours sous son nom
et ainsi de suite pour les autres nom.
Là il s'agit d'une ébauche pour te permettre de valider ou non le principe. Après on verra pour d'autre fonctionnalité et présentation :
Code : Tout sélectionner
Sub Main(oEvt)
'xray oEvt
v = GetSystemTicks
oDoc = Thiscomponent
sheet = oEvt.Spreadsheet
dl = Ubound(oEvt.Spreadsheet.RowDescriptions)
Select Case oEvt.AbsoluteName
Case "$Feuille1.$A$1"
cel = sheet.getCellRangeByName("B1")
Temps = Cel.value
Select Case oEvt.String
Case "GO"
For x = 4 To dl step 7
action = sheet.GetCellByPosition(0,x).String
chrono = sheet.GetCellByPosition(1,x)'.Value
Select Case Action
Case "GO"
TempsIndv = chrono.Value
TempsIndv = TempsIndv+1
chrono.Value = TempsIndv
'Case "PAUSE"
'Case "STOP"
end Select
next
Do While (GetSystemTicks-v)<1000
Wait 1
Loop
Temps = Temps+((GetSystemTicks-v)/1000)
Cel.value = Temps
Main(oEvt)
Case "STOP"
Exit Sub
Case "RESET"
Cel.Value = ""
For x = 4 To dl step 7
chrono = sheet.GetCellByPosition(1,x)
chrono.Value = ""
next
End Select
End Select
End Sub
A+
Ajout : Fichier remplacé. Désolé pour ceux qui ont téléchargé le précédent qui ne fonctionnait pas |
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Multi-Chronos
Bonjour à tous,
D'abord un grand bravo à OOotremer971 pour avoir brillamment contourné le problème en basic !
Il est en effet possible en python de lancer plusieurs macros en parallèle (la formule magique est "thread"). Je joins un exemple très rapide pour illustrer la chose, avec le code suivant :
Cordialement.
D'abord un grand bravo à OOotremer971 pour avoir brillamment contourné le problème en basic !
Il est en effet possible en python de lancer plusieurs macros en parallèle (la formule magique est "thread"). Je joins un exemple très rapide pour illustrer la chose, avec le code suivant :
Code : Tout sélectionner
import pythonscript
from time import sleep
from threading import Thread
def START(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
if hasattr(pythonscript, "kro{}".format(ligne)):
return
cell = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne)
duree = 10
t1 = Thread(target=kro, args=(cell, ligne, duree))
t1.start()
def kro(cell, ligne, t):
setattr(pythonscript, "kro{}".format(ligne), True)
v = cell.Value
centisec = float(1)/(60*60*24*100)
while getattr(pythonscript, "kro{}".format(ligne)):
v += centisec
cell.setValue(v)
sleep(1./100)
delattr(pythonscript, "kro{}".format(ligne))
def STOP(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
if hasattr(pythonscript, "kro{}".format(ligne)):
setattr(pythonscript, "kro{}".format(ligne), False)
else:
doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).setValue(0)
Ajout : Pour ajouter un chrono, il suffit d'en copier un et de le coller à la suite. |
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- Membre OOrganisé
- Messages : 83
- Inscription : 09 févr. 2018 09:55
Re: [Calc] Multi-Chronos
Bonjour,
J'étais si plongé sur ce nouveau programme que je suis complétement passé à côté de vos messages… Et on peut dire que vos deux propositions balayent d'un revers de la main tout ce que j'ai pu faire cette après-midi
D'abord OOotremer971, effectivement votre approche est tout à fait ingénieuse. Bravo! Très malin même. J'ai essayé en vain de reproduire le même cheminement, à savoir prendre un chrono de référence pour donner en quelque sorte le tempo aux autres. Vous y arrivez avec une facilité presque déconcertante...
Comme vous l'aviez annoncé, il s'agit d'une base de travail perfectible mais j'ajoute solide.
Plusieurs questions se bousculent dans ma tête mais avant de me lancer je vais essayer de bien digérer ce qui se présente sous mes yeux.
Ensuite Hubert Lambert, votre proposition est tout simplement magnifique, on pourrait presque l'utiliser dès à présent. Très maniable et instinctive, j'apprécie particulièrement le fait qu'on puisse voir défiler le temps de chaque chrono . C'est beau et très proche de ce que j'imaginais dans mes rêves.
Le seul problème et je m'excuse de le soulever, c'est que les secondes défilent de manière saccadées ce qui provoque une perte. (Pour un temps réel de 20 secondes on perd environ 9 secondes).
Vous l'aviez compris entre ces deux pistes mon coeur balance, je ne peux donc pas choisir entre l'une ou l'autre et vais essayer de m'agripper fermement aux deux perches que vous m'avez lancées.
mais d'abord, il me faudra bien assimiler tout ça.
Je vous tiendrais au courant. Merci, merci, merci.
J'étais si plongé sur ce nouveau programme que je suis complétement passé à côté de vos messages… Et on peut dire que vos deux propositions balayent d'un revers de la main tout ce que j'ai pu faire cette après-midi
D'abord OOotremer971, effectivement votre approche est tout à fait ingénieuse. Bravo! Très malin même. J'ai essayé en vain de reproduire le même cheminement, à savoir prendre un chrono de référence pour donner en quelque sorte le tempo aux autres. Vous y arrivez avec une facilité presque déconcertante...
Comme vous l'aviez annoncé, il s'agit d'une base de travail perfectible mais j'ajoute solide.
Plusieurs questions se bousculent dans ma tête mais avant de me lancer je vais essayer de bien digérer ce qui se présente sous mes yeux.
Ensuite Hubert Lambert, votre proposition est tout simplement magnifique, on pourrait presque l'utiliser dès à présent. Très maniable et instinctive, j'apprécie particulièrement le fait qu'on puisse voir défiler le temps de chaque chrono . C'est beau et très proche de ce que j'imaginais dans mes rêves.
Le seul problème et je m'excuse de le soulever, c'est que les secondes défilent de manière saccadées ce qui provoque une perte. (Pour un temps réel de 20 secondes on perd environ 9 secondes).
Vous l'aviez compris entre ces deux pistes mon coeur balance, je ne peux donc pas choisir entre l'une ou l'autre et vais essayer de m'agripper fermement aux deux perches que vous m'avez lancées.
mais d'abord, il me faudra bien assimiler tout ça.
Je vous tiendrais au courant. Merci, merci, merci.
LibO 7.5.2 et Open Office 4.1.14
Window11 (Obligation de version).
Window11 (Obligation de version).
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Multi-Chronos
Selon l'orientation que tu souhaites donner à ton projet, pense à la possibilité d'ouvrir un nouveau sujet justement dans la section projet de ce forum. L'avantage de cette section contrairement à celle-ci, est que l'on peut y poser plusieurs questions par fil, débattre du bien fondé de telle ou telle décision. Elle permet aussi de définir dès le départ un cahier des charges détaillé, décrivant toutes les fonctionnalités souhaitées pour ce projet. Cela évite souvent les "reproches" du genre : il eut été préférable de le dire avant car cela remet en question la logique de base sur laquelle s'étaye la réalisation du projet. et du coup tout est à refaire...markotxe a écrit :Plusieurs questions se bousculent dans ma tête mais avant de me lancer je vais essayer de bien digérer ce qui se présente sous mes yeux.
A+
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Multi-Chronos
Vous faites bien .markotxe a écrit :Le seul problème et je m'excuse de le soulever...
En effet, le temps d'exécution de la macro est trop lent. Il doit être possible de l'implémenter de manière plus rationnelle, ou se contenter d'une précision à la seconde, qui semble fonctionner correctement.markotxe a écrit :..., c'est que les secondes défilent de manière saccadées ce qui provoque une perte. (Pour un temps réel de 20 secondes on perd environ 9 secondes).
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Multi-Chronos
Bonjour,
Une nouvelle mouture légèrement améliorée : 1) La cellule A1 permet de lancer le chrono principal, de l'arrêter ou de remettre les compteur à zéro.
2) La cellule G1 permet, en sélectionnant "Ajouter", d'ajouter un nouveau tableau vierge à la suite des autres . Le tableau modèle est situé en H1:S4. Si il est paramétré sur Go et son chrono démarrera dés qu'il aura été ajouté à la suite des autres.
3) Chacun des tableau dispose d'un bouton Go pour lancer le chrono, d'un bouton PAUSE pour enregistrer le temps de pause dans une cellule la première fois puis dans une autre cellule à la prochaine pause etc... d'un bouton REPRISE basé sur le même principe de mémorisation une ligne en dessous, et pour finir d'un bouton STOP pour arrêter le chrono d'un tableau
4) Le bouton STOP de la cellule A1 arrête tous les chrono de tous les tableaux.
et le fichier pour tester :
Une nouvelle mouture légèrement améliorée : 1) La cellule A1 permet de lancer le chrono principal, de l'arrêter ou de remettre les compteur à zéro.
2) La cellule G1 permet, en sélectionnant "Ajouter", d'ajouter un nouveau tableau vierge à la suite des autres . Le tableau modèle est situé en H1:S4. Si il est paramétré sur Go et son chrono démarrera dés qu'il aura été ajouté à la suite des autres.
3) Chacun des tableau dispose d'un bouton Go pour lancer le chrono, d'un bouton PAUSE pour enregistrer le temps de pause dans une cellule la première fois puis dans une autre cellule à la prochaine pause etc... d'un bouton REPRISE basé sur le même principe de mémorisation une ligne en dessous, et pour finir d'un bouton STOP pour arrêter le chrono d'un tableau
4) Le bouton STOP de la cellule A1 arrête tous les chrono de tous les tableaux.
Code : Tout sélectionner
Sub Main(oEvt)
oDoc = Thiscomponent
sheet = oEvt.Spreadsheet
cel = oEvt.AbsoluteName
v = GetSystemTicks
dl = (sheet.getCellRangeByName("B2").value*6)
Select Case oEvt.AbsoluteName
Case "$Feuille1.$A$1"
cel = sheet.getCellRangeByName("B1")
Temps = Cel.value
Select Case oEvt.String
Case "STOP"
For x = 4 To dl step 6
action = sheet.GetCellByPosition(0,x)
action.String = "STOP"
next
Exit Sub
Case "GO"
Do While (GetSystemTicks-v)<1000
Wait 1
Loop
Temps = Temps+(((GetSystemTicks-v)/1000)/86400)
Cel.Value = Temps
For x = 4 To dl step 6
action = sheet.GetCellByPosition(0,x)
Select Case Action.String
Case "GO"
chrono = sheet.GetCellByPosition(1,x)
TempsIndv = chrono.Value
TempsIndv = TempsIndv+(((GetSystemTicks-v)/1000)/86400)
chrono.Value = TempsIndv
Case "PAUSE"
for y = 11 to 1 step -1
cell = sheet.GetCellByPosition(y,x+2)
if cell.String <>"" Then
y=y+1
exit for
end if
next
chrono2 = sheet.GetCellByPosition(y,x+1)
TempsIndv2 = chrono2.Value
TempsIndv2 = TempsIndv2+(((GetSystemTicks-v)/1000)/86400)
chrono2.Value = TempsIndv2
Case "REPRISE"
for y = 11 to 1 step -1
cell = sheet.GetCellByPosition(y,x+1)
if cell.String <>"" Then
y=y
exit for
end if
next
chrono3 = sheet.GetCellByPosition(y,x+2)
TempsIndv3 = chrono3.Value
TempsIndv3 = TempsIndv3+(((GetSystemTicks-v)/1000)/86400)
chrono3.Value = TempsIndv3
'Case "STOP"
end Select
next x
Select Case sheet.getCellByPosition(6,0).String
Case "Ajouter"
sheet.getCellByPosition(6,0).SetString("")
Source = sheet.getCellRangeByName("H1:S4")
Destination = sheet.getCellByPosition(0,dl+3)
sheet.copyRange(Destination.CellAddress, Source.RangeAddress)
End Select
Main(oEvt)
Case "RESET"
Cel.Value = ""
For x = 4 To dl step 6
chrono = sheet.GetCellByPosition(1,x)
chrono.Value = ""
plagepropre = sheet.GetCellRAngeByName("H3:S4").FormulaArray
plage = sheet.GetCellRangeByPosition(0,x+1,11,x+2)
plage.FormulaArray = plagepropre
next
End Select
End Select
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Multi-Chronos
Et pour alimenter la réflexion, la version python qui corrige le problème de latence .
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- Membre OOrganisé
- Messages : 83
- Inscription : 09 févr. 2018 09:55
Re: [Calc] Multi-Chronos
Bonjour,
Tout d'abord un grand merci à tous les deux pour tout le mal et le temps que vous dédiez pour mener à bien ce projet. Je le fais en mon nom bien entendu mais aussi en celui de mes compagnons de travail ainsi que tous les jeunes que nous encadrons.
J'avoue être un peu embêter de constater que vous avancez bien plus vite que moi. Je me sens pas très à l'aise dans le role du critique qui dit "ça c'est pas bien, c'est comme ça que je veux… ". C'est pourquoi, je voudrez insister sur le fait que je vous suis extrêmement reconnaissant et que je trouve vous deux approches tout simplement magnifique!
Hubert Lambert,
Les chronos sont parfaitement synchroniser. (plus de latence) Bravo!
J'ai déchargé Python hier soir et je suis, depuis, plus plongé dans les tutos, videos, sujets du forum que sur le projet en lui-même. Je ne désespère pas écrire "Hello world" ce soir après le travail.
Si je me lance dans le monde de python, c'est que j'aimerais:
- Ajouter un bouton "Pause", qui stopperait le Chrono, le mettrait à zéro et le relancerait automatiquement.
- À appuyer sur ce bouton "Pause", enregistrer les temps dans une cellule à coté du chrono. (comme l'exemple d'OOotremer)
Avec ce que m'a appris OOotremer971, je serais capable de pouvoir les répartir là où il faut. Ces deux points atteints, le projet serait alors définitivement clos.
OOotremer,
Les temps de chaque chrono qui apparaissent, était vraiment un détail important. Vous l'avez fait très bien. Chapeau bas monsieur!
- La gestion des boutons est moins agile que l'exemple proposé par Hubert, un clic pour ouvrir la fenêtre, un clic pour faire "pause" ou "Relancer" etc... Parfois des nageurs arrivent pratiquement en même temps et dans ce cas, cette approche peut être problématique.
Mais vous m'aviez averti, la gestion par bouton supposerait renommer chacun d'eux ce qui serait lourd. Peut-être arrive t'on aux limites de ce que peut proposer BASIC.(?).
- En natation, on résonne en minutes, secondes, centiemes, c'est un détail mais je vous demanderez de ne pas me donner de réponses. J'aimerais si possible trouver moi-même la solution et apporter quelques chose de productif.
Encore une fois, je m'excuse de paraitre si insatisfait et exigent d'autant que je suis vraiment admiratif du travail que vous fournissez.
Merci, merci, merci.
Tout d'abord un grand merci à tous les deux pour tout le mal et le temps que vous dédiez pour mener à bien ce projet. Je le fais en mon nom bien entendu mais aussi en celui de mes compagnons de travail ainsi que tous les jeunes que nous encadrons.
J'avoue être un peu embêter de constater que vous avancez bien plus vite que moi. Je me sens pas très à l'aise dans le role du critique qui dit "ça c'est pas bien, c'est comme ça que je veux… ". C'est pourquoi, je voudrez insister sur le fait que je vous suis extrêmement reconnaissant et que je trouve vous deux approches tout simplement magnifique!
Hubert Lambert,
Les chronos sont parfaitement synchroniser. (plus de latence) Bravo!
J'ai déchargé Python hier soir et je suis, depuis, plus plongé dans les tutos, videos, sujets du forum que sur le projet en lui-même. Je ne désespère pas écrire "Hello world" ce soir après le travail.
Si je me lance dans le monde de python, c'est que j'aimerais:
- Ajouter un bouton "Pause", qui stopperait le Chrono, le mettrait à zéro et le relancerait automatiquement.
- À appuyer sur ce bouton "Pause", enregistrer les temps dans une cellule à coté du chrono. (comme l'exemple d'OOotremer)
Avec ce que m'a appris OOotremer971, je serais capable de pouvoir les répartir là où il faut. Ces deux points atteints, le projet serait alors définitivement clos.
OOotremer,
Les temps de chaque chrono qui apparaissent, était vraiment un détail important. Vous l'avez fait très bien. Chapeau bas monsieur!
- La gestion des boutons est moins agile que l'exemple proposé par Hubert, un clic pour ouvrir la fenêtre, un clic pour faire "pause" ou "Relancer" etc... Parfois des nageurs arrivent pratiquement en même temps et dans ce cas, cette approche peut être problématique.
Mais vous m'aviez averti, la gestion par bouton supposerait renommer chacun d'eux ce qui serait lourd. Peut-être arrive t'on aux limites de ce que peut proposer BASIC.(?).
- En natation, on résonne en minutes, secondes, centiemes, c'est un détail mais je vous demanderez de ne pas me donner de réponses. J'aimerais si possible trouver moi-même la solution et apporter quelques chose de productif.
Encore une fois, je m'excuse de paraitre si insatisfait et exigent d'autant que je suis vraiment admiratif du travail que vous fournissez.
Merci, merci, merci.
Dernière modification par markotxe le 13 mai 2019 21:17, modifié 1 fois.
LibO 7.5.2 et Open Office 4.1.14
Window11 (Obligation de version).
Window11 (Obligation de version).
-
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 07:26
Re: [Calc] Multi-Chronos
Voici matière à étude :
Code : Tout sélectionner
from datetime.datetime import now
from time import sleep
from threading import Thread
STARTCOL = 0
ENDCOL = 6
chronos = {}
def START(*args):
try:
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
if nom and not nom in chronos:
doc.CurrentController.ActiveSheet.getCellByPosition(3, ligne).setString("STOP")
doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PAUSE")
cell = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne)
t1 = Thread(target=kro, args=(cell, nom))
t1.start()
except:
traceback.print_exc()
def kro(cell, nom):
try:
zero = now()
chronos[nom] = "run"
v = startvalue = cell.Value
while chronos[nom]:
if chronos[nom] == 'reset':
zero = now()
chronos[nom] = 'run'
startvalue = 0
cell.setValue(v)
v = startvalue + (now() - zero).total_seconds()/(60*60*24)
sleep(1./100)
finally:
del chronos[nom]
def STOP(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
chronos[nom] = ""
doc.CurrentController.ActiveSheet.getCellByPosition(3, ligne).setString("START")
doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("RESET")
def RESET(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).setValue(0)
def PLAY(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
temps = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).Value
chronos[nom] = "reset"
doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PAUSE")
f = doc.CurrentController.ActiveSheet
col = dernierecolonne(f, ligne+1)
doc.CurrentController.ActiveSheet.getCellByPosition(col, ligne+1).setValue(temps)
def PAUSE(*args):
cmd = args[0]
ligne = int(cmd.split('&')[-1].split('=')[-1]) -1
doc = XSCRIPTCONTEXT.getDocument()
nom = doc.CurrentController.ActiveSheet.getCellByPosition(0, ligne).String.encode('utf-8')
temps = doc.CurrentController.ActiveSheet.getCellByPosition(1, ligne).Value
chronos[nom] = "reset"
doc.CurrentController.ActiveSheet.getCellByPosition(4, ligne).setString("PLAY")
f = doc.CurrentController.ActiveSheet
col = dernierecolonne(f, ligne)
doc.CurrentController.ActiveSheet.getCellByPosition(col, ligne).setValue(temps)
def ajout(event=None):
doc = XSCRIPTCONTEXT.getDocument()
doc.lockControllers()
undomanager = doc.UndoManager
undomanager.enterUndoContext("Ajouter chrono)")
try:
f = doc.CurrentController.ActiveSheet
c = f.createCursor()
c.gotoEndOfUsedArea(False)
dest = f.getCellByPosition(STARTCOL, c.RangeAddress.StartRow +2)
copiechrono(f, 1, dest.CellAddress.Row)
dest.setString('')
f.getCellByPosition(STARTCOL+1, dest.CellAddress.Row).setValue(0)
f.Rows.getByIndex(dest.CellAddress.Row).Height = f.Rows.getByIndex(1).Height
finally:
undomanager.leaveUndoContext()
doc.unlockControllers()
def copiechrono(f, lignesource, lignedest):
chrono = f.getCellRangeByPosition(STARTCOL, lignesource, ENDCOL, lignesource+2).RangeAddress
dest = f.getCellByPosition(STARTCOL, lignedest)
f.copyRange(dest.CellAddress, chrono)
def dernierecolonne(f, index):
ligne = f.Rows.getByIndex(index)
emptyranges = ligne.queryEmptyCells()
return emptyranges.getByIndex(emptyranges.Count-1).RangeAddress.StartColumn
Ajout : 15.5.2019. Si quelqu'un repasse par ici, une version 2.2 améliorée : possibilité d'effacer ou de déplacer un chrono, même actif. |
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Hubert Lambert le 15 mai 2019 16:41, modifié 2 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
▼ | « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
-
- ManitOOu
- Messages : 2744
- Inscription : 16 avr. 2010 13:31
Re: [Calc] Multi-Chronos
J'ai essayé pendant deux plombes de contourner avec des boutons radio en guise de bouton et j'ai jeté l'éponge.
Par contre à ma grande stupéfaction, lorsque ma Sub Main() tourne en boucle, un clic sur un Hyperlien de type vnd.sun.star.script:Standard.Module1.sStop est parfaitement intercepté sans délais, effectue son traitement et redonne la main à la Sub Main() en lui passant les arguments nécessaires pour rattraper le retard qu'elle aurait éventuellement pu prendre et lui donner les bon paramètres. Du coup le principe demeure fonctionnel en Basic avec des pseudo bouton à la place des listes déroulantes. Je suis ravi.
Si je trouve le temps nécessaire ce Week-end j'essaierai de joindre un exemple fonctionnel pour ceux qui ne pratiquent pas le Python ou ont du mal à l'appréhender.
Encore bravo
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
AOO
LibreOffice
Debian 10 et 11
-
- Membre OOrganisé
- Messages : 83
- Inscription : 09 févr. 2018 09:55
Re: [Résolu][Calc] Multi-Chronos
Bonjour à tous,
Écoutez, c'est formidable!
Vos deux versions sont magnifiques et on peut dès à présent clore ce sujet par un [Résolu] et d'ajouter avec BRIO!
Je ne peux être qu'admiratif devant l'implication et la dextérité à laquelle vous avez surmonté les embuches- Chapeau bas messieurs- C'est on nom de tout le club que je vous adresse les plus chaleureux remerciements, l'outil que vous avez conçu nous fait désormais rentrer dans le 21 eme siècle. Dés demain, il sera en action aux abords des eaux chlorées pour le bénéfice de tous et toutes.
Les mots semblent faible pour exprimer toute la reconnaissance et remerciements que j'aimerais vous transmettre.
Merci, merci encore, mille mercis! Vous êtes des génies!!!
Écoutez, c'est formidable!
Vos deux versions sont magnifiques et on peut dès à présent clore ce sujet par un [Résolu] et d'ajouter avec BRIO!
Je ne peux être qu'admiratif devant l'implication et la dextérité à laquelle vous avez surmonté les embuches- Chapeau bas messieurs- C'est on nom de tout le club que je vous adresse les plus chaleureux remerciements, l'outil que vous avez conçu nous fait désormais rentrer dans le 21 eme siècle. Dés demain, il sera en action aux abords des eaux chlorées pour le bénéfice de tous et toutes.
Les mots semblent faible pour exprimer toute la reconnaissance et remerciements que j'aimerais vous transmettre.
Merci, merci encore, mille mercis! Vous êtes des génies!!!
LibO 7.5.2 et Open Office 4.1.14
Window11 (Obligation de version).
Window11 (Obligation de version).