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 :

Une fenêtre de démarrage pour un prog un peu long à démarrer


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut Une fenêtre de démarrage pour un prog un peu long à démarrer
    Bonjour à tous

    J'ai un module EXE, ds un prog, chargeant un fichier un peu lourd. Ca prend 3 secondes, mais ça va augmenter avec la taille du fichier. Il me faudrait afficher une fenêtre de démarrage pendant ce temps-là.

    J'avais vu passer la technique sur le site de Michel Bardou il il y a... des années, et maintenant que j'en ai besoin, plus moyen de la retrouver !

    Je préfère ça pr l'instant plutôt que retaper un peu un autre module EXE , celui générant le fichier en question.

    Même Google ne me renvoie rien là-dessus...

  2. #2
    Membre chevronné
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    tu veux un splashscreen en fait ?

    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
     
    program Project1; 
    uses
    Forms,
    Windows, //Ajout de l'unité "Windows" pour la fonction sleep
    Unit1 in 'Unit1.pas' {Form1},
    Unit2 in 'Unit2.pas' {Form2};
    {$R *.RES}
    begin
     Form2:= TForm2.Create(Application); //Crée la fenêtre Form2
    try 
     Form2.Show; //Affiche Form2
     Application.Initialize; 
     Form2.Refresh; //Redessine Form2
     Sleep(3000); //Attend 3 secondes
     Application.CreateForm(TForm1, Form1);
     Form2.Hide; //Cache la form2
    finally
     Form2.Free; //Libère Form2
    end; 
    Application.Run; 
    end.

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Michel Bardou de Phidels, ça se trouve tout seul pourtant !
    Google "Michel Bardou" renvoie en 1er Lien Phidels, après suffit d'ouvrir les yeux !

    Sinon, la FAQ de Developpez.com
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Archimède Voir le message
    tu veux un splashscreen en fait ?

    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
     
    program Project1; 
    uses
    Forms,
    Windows, //Ajout de l'unité "Windows" pour la fonction sleep
    Unit1 in 'Unit1.pas' {Form1},
    Unit2 in 'Unit2.pas' {Form2};
    {$R *.RES}
    begin
     Form2:= TForm2.Create(Application); //Crée la fenêtre Form2
    try 
     Form2.Show; //Affiche Form2
     Application.Initialize; 
     Form2.Refresh; //Redessine Form2
     Sleep(3000); //Attend 3 secondes
     Application.CreateForm(TForm1, Form1);
     Form2.Hide; //Cache la form2
    finally
     Form2.Free; //Libère Form2
    end; 
    Application.Run; 
    end.
    @ShaiLeTroll : j'ai fini par trouver.
    @Archimède : OK ! Je me débattais en partant du code de M. Bardou en le modifiant. Mais pas si bien que toi. Je vais tester ça

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Archimède Voir le message
    tu veux un splashscreen en fait ?

    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
     
    program Project1; 
    uses
    Forms,
    Windows, //Ajout de l'unité "Windows" pour la fonction sleep
    Unit1 in 'Unit1.pas' {Form1},
    Unit2 in 'Unit2.pas' {Form2};
    {$R *.RES}
    begin
     Form2:= TForm2.Create(Application); //Crée la fenêtre Form2
    try 
     Form2.Show; //Affiche Form2
     Application.Initialize; 
     Form2.Refresh; //Redessine Form2
     Sleep(3000); //Attend 3 secondes
     Application.CreateForm(TForm1, Form1);
     Form2.Hide; //Cache la form2
    finally
     Form2.Free; //Libère Form2
    end; 
    Application.Run; 
    end.

    Ca marche, mais pas comme je le voulais. Impossible d'exécuter des instructions de Unit1 pendant l'affichage du SplashScrean .

    Voici le code de project1.DPR :
    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
     
    program Project1;
     
    uses
      Forms,
      Windows,  //Ajout de l'unité "Windows" pour la fonction sleep
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};
     
    {$R *.res}
     
     
    begin
      Form2 := TForm2.Create(Application); //Crée la fenêtre Form2
      try
          Form2.Show; //Affiche Form2
           Application.Initialize;
           Form2.Refresh; //Redessine Form2
           Sleep(3000); //Attend 3 secondes
                        // Mais pendant ce temps-là les instructions de Unit1 ne s'exécutent pas.
                        // Or, c'est ce que je voulais : ce n'était pas simplement décoratif...
           Application.CreateForm(TForm1, Form1);
           Form2.Hide; //Cache la form2
     
      finally
         Form2.Free; //Libère Form2
     
    end;
     
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.CreateForm(TForm2, Form2);
      Application.Run;
    end.
    Voici l'erreur que me retourne Windows sitôt que j'appelle les premières instructions de Unit1 :


  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 289
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 289
    Points : 1 940
    Points
    1 940
    Par défaut
    Le sleep est de trop. Il fait attendre le programme jusqu'à ce que le temps soit écoulé.

    Pour le message d'erreur, tu essayes de faire un SetFocus, alors que Form1 n'est pas encore visible.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

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

    @bvsud
    Il est bancale ce .dpr.

    Tu as 2 Application.Initialize, et tu crées deux fois Form1 et Form2.
    Tu te retrouves avec 2 instances de TForm1.

    @+ Claudius

Discussions similaires

  1. [AC-2007] Tutoriel comment créer une fenêtre d'activation pour votre base
    Par robyseb dans le forum Contribuez
    Réponses: 27
    Dernier message: 12/07/2020, 23h38
  2. Lancer une fenêtre au démarrage de Windows
    Par allouchi dans le forum Windows
    Réponses: 12
    Dernier message: 10/03/2013, 11h17
  3. Réponses: 0
    Dernier message: 13/11/2010, 18h20
  4. mettre une fenêtre d'attente pour l'utilisateur
    Par kwich-bow dans le forum Interfaces Graphiques
    Réponses: 12
    Dernier message: 15/05/2009, 16h33
  5. Réponses: 0
    Dernier message: 24/03/2009, 18h27

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