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

Windows Forms Discussion :

[c#] Splash Screen


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Points : 78
    Points
    78
    Par défaut [c#] Splash Screen
    Bonjour à tous,
    J'ai un sérieux problème de gestion de splash screen. Je m'explique :

    J'ai une application App qui lance un splash screen, qui n'est autre qu'une form. Je clos le splashScreen dans le App.Shown (et pas dans le constructeur ou au bout de x millisecondes, car je veux être certain que tout est prêt avant de clore le splash).

    Ce splash screen à les propriétés suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
                    SplashScreen.TopMost = true;
                    SplashScreen.ShowInTaskbar = false;
                    SplashScreen.StartPosition = FormStartPosition.CenterScreen;
                    SplashScreen.MaximizeBox = false;
                    SplashScreen.MinimizeBox = false;
                    SplashScreen.Opacity = 1;
                    SplashScreen.Show();
    (Je tiens au TopMost)

    Le problème c'est que lors de l'initialisation de App, il se peut que des boîtes de dialog Message box (modales) apparaissent pour prévenir l'utilisateur qu'un problème est survenu, alors que le splashScreen est toujours visible.

    Vous aurez deviné, le splashScreen étant à TopMost = true, et le MessageBox étant modal, je me retrouve coincé, puisque ce dernier attend d'être validé, mais est caché par le splashScreen : App est donc bloqué.

    J'ai essayé plusieurs choses dont :
    - Intercepter l'event "click" sur le splash screen et le fermer, mais le MessageBox prend le focus, et même si c'est le splashScreen qui est visible, "Click" n'est jamais intercepté.
    - Essayer de traiter le splashScreen dans un thread à part, sans succès
    - Jouer avec l'event "LostFocus" du splashScreen, échec aussi.

    Si quelqu'un à une idée, je suis prêt à revoir complètement la façon de faire ce splash, les conditions étants :
    - TopMost
    - Disparait dans le App.Shown
    - Ne bloque pas l'application si un MessagBox modal apparait

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Il faut que tu passes le splashscreen en topmost juste avant de l'afficher et qu'ensuite tu le remette en normal. Ainsi au moment de l'affichage il sera affiché par dessus tout le reste et si jamais il y a un msgbox il apparaitra puisque la fenêtre sera à nouveau normal. Je ne sais pas si tu peux modifier la propriété TopMost en cours d'exécution, dans ce cas il faut utiliser l'API SetWindowPos.

    Personnellement je préfère toujours utiliser cette API car la propriété TopMost de l'application n'est valable que pour les fenêtres du projet, alors que l'API fait passer la fenêtre par dessus tout, y compris les fenêtres d'autres applications.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2004
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 224
    Points : 78
    Points
    78
    Par défaut
    En effet, pour le moment c'est la solution que j'ai mis en place.
    La propriété TopMost est accessible pendant l'exécution donc juste avant que des msgBox soient potentiellement affichés, je mets TopMost à false.

    Ce n'est pas totalement satisfaisant, mais ça a le mérite d'être simple.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Points : 214
    Points
    214
    Par défaut
    Oui c'est sûr que si l'utilisateur clique sur une autre fenêtre elle passe par dessus le splashscreen. Mais bon ce n'est qu'un splashscreen

Discussions similaires

  1. Comment faire un splash screen pour son application?
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/04/2007, 14h28
  2. Splash screen transparent
    Par max63 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 24/02/2005, 16h13
  3. affichage texte style splash screen
    Par scorbo dans le forum MFC
    Réponses: 4
    Dernier message: 13/06/2004, 12h03
  4. [DX9] Splash Screen
    Par delire8 dans le forum DirectX
    Réponses: 6
    Dernier message: 03/06/2004, 10h30
  5. affichage de controles sur un splash screen
    Par shrek dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/11/2003, 19h59

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