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

Composants VCL Delphi Discussion :

ProgressBar dans un SplashScreen


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut ProgressBar dans un SplashScreen
    Salut tout le monde.
    Pourquoi les composant ProgressBar personnalisés (comme le JVXPProgrssBar de la JVCL et plein d'autres) ne fonctionnent pas dans un SplashScreen (aucune progression de la barre), au moment que le composant natif de Delphi fonctionne parfaitement avec le même code source ????

  2. #2
    Membre émérite Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Par défaut
    Bonjour

    As-tu essayé de mettre un Application.ProcessMessage après ton StepIt ?

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut
    Citation Envoyé par DOLPat® Voir le message
    Bonjour

    As-tu essayé de mettre un Application.ProcessMessage après ton StepIt ?
    Oui j'ai déjà essayé Application.ProcessMessage mais sans succès, la barre de progression ne bouge pas (sa position reste à zéro), contrairement au TProgressBar de Delphi qui fonctionne parfaitement (même sans Application.ProcessMessage) !!

    Voici le code que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    {$R *.res}
     
    begin
    Application.Initialize;
    with TSplashScreen.Create(nil) do
    try
    ProgressBar1.Max := 99;
    progressbar1.Step:=33;
    Show;
    Update;
    Application.Title := 'My Application';
    Application.CreateForm(TForm1, Form1);
    ProgressBar1.StepIt;
    Application.CreateForm(TDataModule, DataModule);
    ProgressBar1.StepIt;
    Application.CreateForm(TForm2, Form2);
    ProgressBar1.StepIt;
    finally
    Release;
    end;

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    La progress bar se redessine mais c'est une mauvaise chose car la fenêtre elle est figée. si tu invalides la fenêtre tu verras que seule la barre se redessine.

    le mieux c'est encore de mettre le traitement dans un Thread qui utilise PostMessage() pour informer la fenêtre de l'état d'avancement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.WMUser(var Msg: TMessage); // message WM_USER
    begin
      ProgressBar1.Max := Msg.lParam;
      ProgressBar1.Position := Msg.wParam;
    end;
    et cela fonctionne avec toutes les barres.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    La progress bar se redessine mais c'est une mauvaise chose car la fenêtre elle est figée. si tu invalides la fenêtre tu verras que seule la barre se redessine.

    le mieux c'est encore de mettre le traitement dans un Thread qui utilise PostMessage() pour informer la fenêtre de l'état d'avancement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.WMUser(var Msg: TMessage); // message WM_USER
    begin
      ProgressBar1.Max := Msg.lParam;
      ProgressBar1.Position := Msg.wParam;
    end;
    et cela fonctionne avec toutes les barres.
    Merci pour votre réponse.
    Sincèrement j'ai pas très bien compris votre approche car j'ai pas eu l'occasion de travailler avec les Threads .
    je vous serais reconnaissant si vous aurais le temps de m'expliquer un peut plus le fonctionnement et l'implémentation de cette procédure

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Le point de départ serait ceci qui propose d'afficher un "veuillez patienter" sur une tâche un peu longue.

    Le code utilise déjà PostMessage() pour signaler à la fenêtre que la tâche est terminée.

    le code exécuté dans Form1 (GetFileList) ne se prête pas à une barre de progression puisqu'on ne connait pas le nombre de fichiers présents à l'avance...mais le principe serait d'ajouter un PostMessage dans ce code...
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    procedure TForm1.GetFileList;
    var
      f: TSearchRec;
    begin
      AllocConsole;
      WriteLn('Recherche en cours...');
      if FindFirst('C:\*.*', faAnyFile, f) = 0 then
      begin
        repeat
          PostMessage(WaitForm.Handle, WM_USER + 1, FList.Count, 100); // wParam = Numéro de Fichier lParam = Nombre Total (100 est bidon ici)
          WriteLn('Found ', f.Name, '...');
          FList.Add(f.Name);
          Sleep(FSlow);
        until FindNext(f) <> 0;
        FindClose(f);
      end;
    end;

    qui sera interprété dans la WaitForm dans laquelle on ajoute un progressbar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TWait.WMUser1(var Msg: TMessage); // message WM_USER + 1
    begin
      ProgressBar.Max := Msg.lParam; // 100
      ProgressBar.Position := Msg.wParam; // FList.Count
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Probleme d'ajout d'un image dans un splashscreen
    Par laurentdb dans le forum Windows Forms
    Réponses: 1
    Dernier message: 30/03/2007, 21h39
  2. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  3. Label et progressbar dans formulaire
    Par jean-pierre96 dans le forum IHM
    Réponses: 2
    Dernier message: 03/05/2006, 12h58
  4. [VB.Net] Une progressbar dans une statusbar
    Par tomnie dans le forum Windows Forms
    Réponses: 6
    Dernier message: 14/12/2005, 10h13
  5. [SWT] ProgressBar dans une Table
    Par spi dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 12/01/2005, 13h58

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