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 :

[TOpenDialog] - comment fermer/cacher immédiatement ?


Sujet :

Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [TOpenDialog] - comment fermer/cacher immédiatement ?
    Bonjour à tous.

    Je débute avec Delphi et je suis confronté à un problème auquel je n'ai pas trouvé la solution sur google et dans ce forum. J'espère que ma question n'est pas trop basique...

    Je suis en train d'écrire une application qui permet de choisir un fichier via TOpenDialog puis de le traiter via une routine se nommant "traiter_fichier". Le problème auquel je suis confronté est que la fenêtre utilisée pour la sélection du fichier reste visible pendant que la routine "traiter_fichier" s'exécute (le traitement peut durer jusqu'à 30 secondes).

    Mon code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    openDialog := TOpenDialog.Create(self);
    if openDialog.Execute then
       fnom := openDialog.FileName;
    openDialog.Free;           
    traiter_fichier(fnom);
    Que dois-je faire pour fermer "openDialog" avant de lancer la routine "traiter_fichier"? J'ai besoin d'une solution qui soit aussi générique que possible (lire qui n'est pas spécifique à Delphi sous Windows).

    D'avance, merci pour vos réponses.

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Désolé, mais moi ce code fonctionne parfaitement (le showmessage s'affiche après que le TOpenDialog se soit effacé) :

    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.btn1Click(Sender: TObject);
     
       procedure traiter_fichier(S: string);
       begin
          Showmessage(S);
       end;
     
    var
       openDialog: TOpenDialog;
       fnom: string;
    begin
      openDialog := TOpenDialog.Create(self);
      if openDialog.Execute then
        fnom := openDialog.FileName;
      openDialog.Free;
      traiter_fichier(fnom);
    end;
    Je suspecte un problèmes de rafraîchissement (la fenêtre du OpenDialog reste dessinée en arrière plan pendant le traitement). Est-ce que tu peux utiliser le OpenDialog durant le traitement ou est-ce qu'il est figé ? As tu essayé de faire un Refresh ou un Invalidate sur la fiche principale juste après le Free() du Dialog (question de forcer cette dernière à se redessiner) ? Peut-être un Application.ProcessMessages() ?
    -Slimjoe

  3. #3
    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,

    Je suis de l'avis de SlimJoe. Ajoute un ProcessMessages avant l'appel de ton traitement sur le fichier:

    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
    procedure TForm1.btn1Click(Sender: TObject);
     
       procedure traiter_fichier(S: string);
       begin
          Sleep(3000); // pour simuler un temps de traitement long
          Showmessage(S);
       end;
     
    var
       openDialog: TOpenDialog;
       fnom: string;
    begin
      openDialog := TOpenDialog.Create(self);
      if openDialog.Execute then
        fnom := openDialog.FileName;
      openDialog.Free;
      Application.ProcessMessages;
      traiter_fichier(fnom);
    end;
    [edit]
    Ah au fait, bienvenu sur Developpez.com
    [/edit]


    @+ Claudius

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos conseils. Application.ProcessMessages() a résolu le problème. Ca marche tiptop.

    En fait j'avais oublié d'inclure une petite précision ô combien cruciale dans mon premier message: dans "traiter_fichier" il y a un appel à un programme externe via TProcess. Je le mentionnne ici au cas ou quelqu'un d'autre aurait le même problème à l'avenir...

    Mais tout est bien qui finit bien. Merci encore.

    EDIT: N.B. Je viens de m'apercevoir que j'ai posté dans le mauvais forum...

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 559
    Points : 3 948
    Points
    3 948
    Par défaut
    Pas mal ton image, Claudius40 !

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    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
    @E-ric
    Nouvel avatar en vigueur pour les fêtes de fin d'année ....
    Qui a dit que j'avais les boules ?

  7. #7
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par e-ric
    Pas mal ton image, Claudius40 !
    Moi aussi, j'adore
    Choisir, c'est renoncer...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/09/2007, 14h51
  2. Comment fermer une fenêtre quand la souris et clavier sont inactifs ?
    Par Goldenkiller dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/12/2004, 22h09
  3. [WNetAddConnection2] Comment fermer une connection ?
    Par souch dans le forum Web & réseau
    Réponses: 3
    Dernier message: 21/10/2004, 14h41
  4. Comment fermer l'application en même temps que Windows ?
    Par semaj_james dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2004, 22h17
  5. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42

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