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

Delphi Discussion :

Boîte de message sans bouton "Veuillez patienter..."


Sujet :

Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Boîte de message sans bouton "Veuillez patienter..."
    Bonjour au forum,

    Je me heurte à un problème tout bête : comment obtenir une petite boíte avec simplement une ligne de texte qui fasse patienter l'utilisateur style "Veuillez patienter..."

    Je connais les autres diverses boîtes, MessageBox, MessageDlg, mais impossible de virer le bouton

    S'il faut le placer dans un thread, je peux me débrouiller, mais je cherche simplement comment obtenir une petite boîte avec en tout et pour tout une string dedans SANS caption ni bouton...

    Mais je ne souhaite pas créer une autre form spécique à cet usage

    Merci de vos idées.

    (Il n'y a pas si longtemps j'avais testé un code qui était en rapport avec l'objet Printer, dans une procédure, ce genre d'événement était inclus. Mais je n'ai pas conservé ce code provenant d'un site US, snif... Dire qu'en Flash c'est si facile !)

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    As-tu essayé comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MessageDlg('Mon texte', mtInformation, [], 0);
    A tester !

    @+

  3. #3
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Merci Claudius, reste encore le caption de la boîte à virer...

    Citation Envoyé par Claudius40
    Salut,

    As-tu essayé comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MessageDlg('Mon texte', mtInformation, [], 0);
    A tester !

    @+

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageDlg(#13+#10+'Veuillez patienter, traitement en cours...',mtCustom,[],0)
    Voici une approche complémentaire, mais si je pouvais ne plus avoir le caption, ni sa croix à droite, ce serait impec

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Je vois pas comment ca pourrait être très différents de ca...
    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
     
    procedure TForm1.Button7Click(Sender: TObject);
    var
        Diag:TForm;
    begin
        Diag:=CreateMessageDialog( 'SVP Patience!',mtCustom	,[]);
        Diag.BorderIcons:=[];       //Eleve menu system
        Diag.Caption:='';           //Enleve le titre
        Diag.BorderStyle:=bsSingle; //No-Resize Possible
        Diag.Show();                //Montre la fenetre
        application.ProcessMessages;
        try
            //Traitements long
            sleep(2000);
        finally
            Diag.Hide();
            Diag.Release();
        end;
    end;
    l'idée c'est de créer une Form dynamiquement avec CreateMessageDialog
    qui fait un bon travaille rapidement.
    Et Faire un Show() au lieu de ShowModal() te laisse travailler en paix....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Éric Waouhhhhhhhhhhhh !

    Merci de cette idée super, j'aurais un timer en moins, oufff !

    Bravo de ce code très intéressant et instructif.

    Je considére ce blème comme résolu avec panache

    Encore

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Petit Ajout pour que la fenetre reste Tjrs visible...

    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
    21
    22
    23
    24
    25
    26
    27
     
     
    procedure TForm1.Button7Click(Sender: TObject);
    var
        Diag:TForm;
        i:integer;
    begin
        Diag:=CreateMessageDialog( 'SVP Patience!',mtCustom	,[]);
        Diag.BorderIcons:=[];       //Eleve menu system
        Diag.Caption:='';           //Enleve le titre
        Diag.BorderStyle:=bsToolWindow; //No-Resize Possible
        SetWindowPos(Diag.Handle,HWND_TOPMOST,
                     0,0,0,0,SWP_NOSIZE+SWP_NOMOVE); //Make the Window TOPMOST
        Diag.Show();                //Montre la fenetre
        Application.ProcessMessages;
        try
            //Traitements long
            for i:=0 to 200 do
            begin
                sleep(10);
                Application.ProcessMessages();
            end;
        finally
            Diag.Hide();
            Diag.Release();
        end;
    end;
    Voilà... c'est mieux ansi!
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Oki whaaaaouuuuuu super Éric, mais ça fonctionnait déjà parfaitement, merci

    Heuuuu, en effet tu illustres là parfaitement la mise en oeuvre d'un sleep non bloquant, contrairement à ton code précédent !


  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par Bruno13
    Salut,
    le post est un peu vieux mais bon il va remonter avec mon post.

    Je cherche à ajouter dans votre exemple une simple progressbar, kkun peut-il m'aider à faire cela, j'ai fait quelques tentatives mais hélas la progressbar n'apparait jamais :'(

    Amitiés,
    Bruno
    et bien voilà

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    procedure TForm1.Button7Click(Sender: TObject);
    var
        Diag:TForm;
        i:integer;
        pbFeedBack:TProgressBar;
        s:string;
    begin
        Diag:=CreateMessageDialog( PChar('SVP Patience!'),mtCustom	,[]);
        Diag.BorderIcons:=[];       //Eleve menu system
        Diag.Caption:='';           //Enleve le titre
        Diag.BorderStyle:=bsToolWindow; //No-Resize Possible
        SetWindowPos(Diag.Handle,HWND_TOPMOST,
                     0,0,0,0,SWP_NOSIZE+SWP_NOMOVE); //Make the Window TOPMOST
        pbFeedBack:=TProgressBar.Create(nil);
        pbFeedBack.Width:=(Diag.Width div 10)*8; //80% de la largeur de la fenetre
        pbFeedBack.Top:=(Diag.ClientHeight div 2)-(pbFeedBack.Height div 2);
        pbFeedBack.Left:=(Diag.ClientWidth div 2)-(pbFeedBack.Width div 2);
        Diag.InsertControl( pbFeedBack ); //Ajoute la progress bar dans la fenetre
        Application.ProcessMessages;
        Diag.Show();                //Montre la fenetre
        pbFeedBack.Max:=200;
        try
            //Traitements long
            for i:=0 to 200 do
            begin
                pbFeedBack.Position:=i;
                sleep(10);
                Application.ProcessMessages();
            end;
        finally
            pbFeedBack.Destroy();
            Diag.Hide();
            Diag.Release();
        end;
    end;
    Ca peut être utile a quelqu'un d'autre...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Bravo Éric !

    Je n'ai pas encore testé ce code, mais je suis certain qu'en effet cela fera plus d'un heureux.

    Même peut-être pourquoi pas un source et/ou à ajouter en FAQ de developpez.com ?

    Si la rédac passe par là...

    Merci !

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par J-P
    Je n'ai pas encore testé ce code, mais je suis certain qu'en effet cela fera plus d'un heureux.!
    Oui, à commencer par moi qui cherchais une boite de genre.

    Citation Envoyé par J-P
    Même peut-être pourquoi pas un source et/ou à ajouter en FAQ de developpez.com ?
    Entièrement d'accord !

    @+ et merci.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Re-Bonjour et merci pour la solution, en fait aprés mon post et quelques essais moi j'avais fait la même chose avec une toute petite variante :

    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
        Diag:=CreateMessageDialog( 'Please wait...'+#13#10+#13#10+#13#10+'you project is beeing saved !', mtInformation, []);
        Diag.BorderIcons:=[];       //Eleve menu system
        Diag.Caption:='Saving';     //Enleve le titre
        Diag.BorderStyle:=bsDialog; //No-Resize Possible;
        SetWindowPos(Diag.Handle,HWND_TOPMOST,
                     0,0,0,0,SWP_NOSIZE+SWP_NOMOVE); //Make the Window TOPMOST
        PB:=TProgressbar.Create(Diag); <== Pas nil mais Diag
        PB.parent := diag;
       ......
        Try
          ....
        finally
          Diag.Hide();
          Diag.Release();
        end;
    Le fait de faire comme cela me permet de detruire ma PBar implicitement via Diag.

    Amitiés,
    Bruno

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par J-P
    Si la rédac passe par là...
    C'est dans la boîte !

  14. #14
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Laurent


  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Heu, re-bonjour à tous

    j'ai ajouté dans cette magnifique boite un bouton "mbAbort", comment puis-je gérer cette action ? Dois-je définir une Action/procedure onAbort ? ou quelque chose de ce genre ??

    Merci de votre aide à tous,
    Amicalement,
    Bruno

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    L'idée est d'écrir une fonction à l'intérieur de notre Form principale
    mais qui sera appelée par notre bouton dans la boite de dialogue...
    c'est important qu'il y ait un appele à application.processmessages()
    regulièrement quelque par dans notre traitement long...

    Dans la procédure, on utilise le Sender pour retrouver un pointer
    vers la boite de dialogue pour simplement la cacher...

    Et dans notre traitement long, reste plus qu'a vérifier si notre boite de
    dialogue est toujours visible...si ce n'est plus le cas, l'usager désire arrêter et on doit sortir...le plus tôt possible de notre traitement long...

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    //==============================================================================
    //=== Lorsque l'usager click sur Abort, on cache simplement la fenêtre...
    //=== L'état visible=FALSE sera détecté et on arrêtera le traitement long
    //=== Même si la fonction est déclarer dans une autre fenêtre,
    //=== c'est la boite de dialogue qui l'utilisera.
    procedure TForm1.cmdAbortClick(Sender:TObject);
    begin
        //Cache la fenetre si l'usager veux faire Abort!
        TForm(TButton(Sender).Parent).Hide();
    end;
     
    //==============================================================================
    //=== Traitement long simuler par une boucle....
    procedure TForm1.Button7Click(Sender: TObject);
    var
        Diag:TForm;
        i:integer;
        pbFeedBack:TProgressBar;
        cmdAbort:TButton;
        s:string;
    begin
        Diag:=CreateMessageDialog( PChar('SVP Patience!'),mtCustom	,[]);
        Diag.BorderIcons:=[];       //Eleve menu system
        Diag.Caption:='';           //Enleve le titre
        Diag.BorderStyle:=bsToolWindow; //No-Resize Possible
     
        SetWindowPos(Diag.Handle,HWND_TOPMOST,
                     0,0,0,0,SWP_NOSIZE+SWP_NOMOVE); //Make the Window TOPMOST
        pbFeedBack:=TProgressBar.Create(nil);
        pbFeedBack.Width:=(Diag.Width div 10)*8; //80% de la largeur de la fenetre
        pbFeedBack.Top:=(Diag.ClientHeight div 2)-(pbFeedBack.Height div 2);
        pbFeedBack.Left:=(Diag.ClientWidth div 2)-(pbFeedBack.Width div 2);
        pbFeedBack.Parent:= Diag;
        cmdAbort:=TButton.Create(nil);
        cmdAbort.OnClick:= cmdAbortClick; //associe OnClick
        cmdAbort.Caption:='Abort!';
        cmdAbort.Top:=pbFeedBack.Top+pbFeedBack.Height+3;
        cmdAbort.Left:=(Diag.ClientWidth div 2)-(cmdAbort.Width div 2);
        cmdAbort.Parent:=Diag;
        Application.ProcessMessages;
        Diag.Show();                //Montre la fenetre
        pbFeedBack.Max:=200;
        try
            //Traitements long
            for i:=0 to 200 do
            begin
                pbFeedBack.Position:=i;
                sleep(10);
                Application.ProcessMessages();
                if Diag.Visible=FALSE then
                begin
                    // The user want to abort... so stop what we are doing!
                    break;
                end;
            end;
        finally
            //Pas oubligé de faire les destroy parce que la fenetre s'en charge...
            //Par contre, étant donnée que c'est moi qui les créées je les détruit
            //Aussi
            pbFeedBack.Destroy();
            cmdAbort.Destroy();
            //Question d'habitude.
     
            Diag.Hide();
            Diag.Release();
        end;
    end;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Eric,

    Comment dire..hum.. TIP TOP

    A inclure dans la F.A.Q. !

    Amitiés,
    Bruno

  18. #18
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Oui là bravo encore à Éric !

    A inclure dans la F.A.Q.
    Ainsi soit-il

  19. #19
    Membre du Club Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 61
    Points
    61
    Par défaut
    La réponse Commande MessageDialog est une fonction qui renvoie un des valeur
    Pour un clique sur mbAbort la valeur renvoyée est mrAbort
    idem pour mbOk --> mrOk

    Donc en tapant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MessageDlg('Ton texte',mtInformation,[mbAbort],0)=mrAbort then //...
    Je tourne en rond ... même dans les lignes droites !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une fenêtre-message sans bouton
    Par bvsud dans le forum Composants VCL
    Réponses: 10
    Dernier message: 04/08/2012, 17h12
  2. Message personnalisé "Veuillez patienter"
    Par jmde dans le forum Access
    Réponses: 2
    Dernier message: 27/09/2006, 12h07

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