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

Langage Delphi Discussion :

Afficher un message sans bloquer les autres traitements??


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 245
    Points : 154
    Points
    154
    Par défaut Afficher un message sans bloquer les autres traitements??
    Bonjour,

    Je voudrai afficher un message sans bloquer les autres traitements de mon application. Or MessageDlg et ShowMessage, bloque tout jusqu'à ce que je clique sur le bouton du message.
    Y a t-il une solution, à part de créer un form spécialement pour afficher ces messages??
    Voici un exemple:
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var i: Integer;
    begin
      i:=0;
      While i<=50000 do
        Begin
          Label1.Caption:=IntToStr(i);
          Inc(i);
          Application.ProcessMessages;
        End;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage('attente');
    end;
    Quand je clique sur Button2, le traitement lancé par Button1 s'arrête.

    Merci.

    ::

  2. #2
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,
    tu ne nous donnes pas beaucoup de précisions sur tes traîtements d'arrière plan.
    As-tu pensé à utiliser les TThreads dans ton appli?
    Si non, tu trouveras ton bonheur en bas de cette page
    Cordialement,
    Hauwke

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    ShowMessage et MessageDlg affichent en effet des boites Modales, donc le déroulement du code est effectivement suspendu. Le mieux que tu ais à faire, c'est de construire ta boite de message avec une TForm que tu appelles avec Form1.Show par exemple. comme ça, le message est affiché, mais le code continue à se dérouler.

    N'oublie pas de mettre la propriété FormStyle à fsStayOnTop pour qu'elle reste au dessus de ta fenêtre principale.
    Bidouilleuse Delphi

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Hauwke
    As-tu pensé à utiliser les TThreads dans ton appli?
    +1
    Si tu fais un TThread, tu rends le traitement indépendant... Donc un affichage Modal ne bloquera pas le traitement...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Sinon, je viens de voir ça :
    CreateMessageDialog(constMsg:string;DlgType:TMsgDlgType;Buttons:TMsgDlgButtons):TForm;

    Ca te crée automatiquement une boite de Dialogue à partir d'une TForm et au lieu d'utiliser ShowModal, tu utilse Show; tout court
    Bidouilleuse Delphi

  6. #6
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 152
    Points
    10 152
    Par défaut
    Regarde aussi et plus simplement l'API MessageBox. Il y a un flag à passer pour que ce ne soit pas modal. Voir l'aide pour plus d'infos.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #7
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut Re: Afficher un message sans bloquer les autres traitements?
    Citation Envoyé par Ben_Le_Cool
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var i: Integer;
    begin
      i:=0;
      While i<=50000 do
        Begin
          Label1.Caption:=IntToStr(i);
          Inc(i);
          Application.ProcessMessages;
        End;
    end;
    si tu remplasse ce bout de code dans un timer au lieu de mettre une boucle je pance qu'avec un timer sa sebloq pas , non??
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  8. #8
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Tu t'y prend mal, si tu veux faire un système d'attente, commence par créer un fiche qui va te servir de dialogue d'attente en dérivant de TForm par exemple.
    Puis utilise les threads si tu as des calculs ou autre qui peuvent durer longtemps.
    Sinon pour faire plus simple, crée une autre fiche dans ton projet que tu va appeler frmStandBy par exemple et affiche là avant les calculs et cache la à la fin des calculs.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

Discussions similaires

  1. ouvrir un Dialog sans bloquer les autres
    Par ____22 dans le forum MFC
    Réponses: 1
    Dernier message: 17/07/2009, 14h13
  2. Afficher un message sans arrêter la macro
    Par jacklem dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2007, 05h29
  3. Afficher un message sans arrêter une macro
    Par bybelos33 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/06/2007, 14h03
  4. Réponses: 10
    Dernier message: 30/01/2007, 15h29
  5. afficher un message sans empêcher l'exécution
    Par n_moalla dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/11/2006, 21h11

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