Bonjour
Bonjour à tous
Je me suis acharné, et j'ai finit de trouver une solution
Grace à vos conseils et surtout à ChatGPT ..
Un utilisateur veut visualiser plusieurs informations Pour cela, il clique sur un bouton qui lance une longue procédure avant d'ouvrir la fenêtre qui présente ces informations
Le problème : permettre à l'utilisateur d'annuler sa demande pendant cette longue procédure
La solution : avoir un bouton "Stop" qui passe une variable booléen à vrai, et dans la longue procédure tester régulièrement cette variable et si elle est "vrai" arrêter la procédure
La logique est simple, mais le code à utiliser pour cela n'a pas été facile pour moi de le trouver ..
La variable : gbArretDemande est un booléen = Faux
Le bouton "Stop" (Il est invisible par construction, passé à visible lors du lancement de la procédure) : gbArretDemande = Vrai
Le bouton qui demande la visualisation lance procédure : gbArretDemande = Faux
BoutonArret_Affiche()
Sablier(Faux)
ThreadExecute("Mon_THREAD", threadNormal, ProcedureLongue)
Dans la "ProcedureLongue", on test régulièrement si "gbArretDemande" est à Vrai, dans ce cas on arrête la demande de visualisation : Procedure ProcedureLongue()
gsMessageErreur = ""
gsMessage1 = ""
gsMessage1 = "Création de la liste du contenu de la sauvegarde"
ExécuteThreadPrincipal(ToastAffiche)
ThreadPause(200)
SI gbArretDemande = Vrai ALORS
ExécuteThreadPrincipal(BoutonArret_Cache)
ExécuteThreadPrincipal(ProcedureLongue_FinThread, Faux)
RETOUR
FIN
SI gbOK = Faux ALORS
gsMessageErreur = "Erreur dans la procédure"+RC+ErreurInfo(errComplet)
gbOK=Faux
ExécuteThreadPrincipal(ProcedureLongue_FinThread, Faux)
RETOUR
FIN
ThreadPause(200)
SI gbArretDemande = Vrai ALORS
ExécuteThreadPrincipal(BoutonArret_Cache)
ExécuteThreadPrincipal(ProcedureLongue_FinThread, Faux)
RETOUR
FIN
ExécuteThreadPrincipal(ProcedureLongue_FinThread, Vrai)
RETOUR
"BoutonArret_Cache" masque le bouton "Stop" qui demande l'arrêt :BTN_Arret.Visible = Faux
RENVOYER Vrai
La "ProcedureLongue_FinThread" qui demande l'arrêt de la procédure longue Elle reçoit en paramètre Faux si l'arrêt est demandé par l'utilisateur, sinon Vrai en fin de la procédure longue :Procedure ProcedureLongue_FinThread(bSuccès est un booléen)
FEN_Gestion.BTN_Arret.Visible = Faux
gbArretDemande = Faux
SI gsMessageErreur <> "" ALORS Erreur(gsMessageErreur)
SI bSuccès = Vrai ALORS
ThreadDemandeArrêt("Mon_THREAD")
ThreadAttend("Mon_THREAD", 300)
Ouvre(FEN_Visualisation_Information)
SINON
gsFicSauveRes = ""
Avertissement("Vous avez annulé votre demande")
FIN
La procédure qui exécute le ToastAffiche : Procedure ToastAffiche()
ToastAffiche(gPoliceGras() + gPolice("Batang") + gPoliceTaille(12) + gStylo(Blanc) + gsMessage1,toastLong, cvMilieu, chDroite, BleuFoncé)
Voila, j'espère que cela pourra aider ceux qui ont ce même besoin
Bien sur, on peut certainement améliorer tous ces codes .......
Cordialement
SC
--
Cordialement
SC