IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Codes sources à télécharger Delphi Discussion :

ActivityIndicator dans un thread secondaire


Sujet :

Codes sources à télécharger Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut ActivityIndicator dans un thread secondaire
    Bonjour à tous !

    En général, il est préférable de déporter les tâches longues dans des threads secondaires. Ce n'est cependant pas toujours possible.

    Il arrive également que certaines opérations d'affichage requièrent un travail conséquent ou tout simplement que vous installiez votre application sur une machine relativement lente en comparaison de celle de développement et que ce qui prenait une fraction de seconde en prenne plusieurs par la suite (c'était mon cas avec des tablettes d'entrée de gamme).

    Comment informer l'utilisateur "impatient" qu'une tâche est en cours ?

    Pas de problème si elle est réalisée dans un thread secondaire. Un TActivityIndicator (introduit dans Delphi 10 Seattle) fera parfaitement l'affaire.
    Mais si elle est exécutée dans la tâches principale, l'application semble figée, y compris évidemment le TActivityIndicator.

    C'est ici qu'entre en jeu la petite unité que je vous propose aujourd'hui : un comportement comparable au TActivityIndicator mais exécuté dans son propre thread, un TActivityIndicatorThread.

    La fenêtre est créée et gérée par API (la VCL n'étant pas thread-safe) et initialisée en mode layered, un mode permettant la gestion du canal alpha ; de la transparence.
    les animations sont récupérées directement des ressources associées au TActivityIndicator, vous ne serez pas dépaysé !

    A noter:
    Il est possible de passer le handle d'une fenêtre/d'un contrôle au constructeur. Dans ce cas, l'animation sera centrée sur ce contrôle et aura le même ZOrder (ordre d'empilement des fiches).
    Mais si la tâche dure plus que 5 secondes, l'OS considère que l'application est figée, fait une copie de la fiche et l'affiche par dessus dans un rendu plus clair avec le message "ne répond pas". L'indicateur sera donc aussi masqué.
    Si aucune fenêtre "parent" n'est renseignée, l'indicateur flottera au dessus de toutes les fiches du bureau et sera toujours visible.

    En résumé, ne définissez pas de parent si la tâche dure plus de 5 secondes

    Vous trouverez dans le zip l'unité WinXIndicator.pas ainsi qu'une petite application de démo.

    Voilà, si vous avez des commentaires ou des remarques, n'hésitez pas
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Modifier ListView dans un thread secondaire
    Par prologic dans le forum VB.NET
    Réponses: 16
    Dernier message: 09/01/2013, 09h19
  2. Executer une fonction (avec paramètres) dans un thread secondaire
    Par you38 dans le forum Threads & Processus
    Réponses: 21
    Dernier message: 06/08/2010, 08h12
  3. Fenêtres enfants dans un thread secondaire
    Par greg2 dans le forum Windows
    Réponses: 7
    Dernier message: 23/12/2009, 11h05
  4. 2 pb differents : IHM dans thread secondaire et cast en classe heritee
    Par cyrmaril dans le forum Threads & Processus
    Réponses: 18
    Dernier message: 31/07/2008, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo