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

C++/CLI Discussion :

SplashScreen avec Form2


Sujet :

C++/CLI

  1. #1
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut SplashScreen avec Form2
    Bonjour, malgr� toutes mes recherches sur Google je n'arrive toujours pas a cr�er un Splashscreen pour mon application.
    Dans mon appli j'ai 2 Formulaires Form1 et SPL ,
    Dans Form1 j'ai mis :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #include "SPL.h"
    #pragma endregion
    	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
    				Form1::Hide();
    		 		SPL^ form = gcnew SPL();
    				form->Show();
    						 }
    Dans Form2:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	private: System::Void timer2_Tick(System::Object^  sender, System::EventArgs^  e) {
    	for (double dblOpacity = 1; dblOpacity > 0; dblOpacity += -0.05)
    	{
    	Opacity = dblOpacity;
    	Refresh();
    	System::Threading::Thread::Sleep(50);
    		 }
        this->Close();
    Les 2 Form s'affiche au d�marrage mais je voudrai masquer temporairement Form1 pour ne laisser que la Form2 le temps de Timer1 qui est dans Form2.
    J'ai test� plusieurs methodes dont Form1::Hide(); mais impossible de masquer Form1.
    Merci de votre aide

  2. #2
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Vous faite une attente active dans votre boucle et vous bloquez le thread graphique avec "System::Threading::Thread::Sleep(50);".

    Utilisez votre timer pour lancer plusieurs fois la mise � jour de votre Splash Screen et c'est au dernier appel que vous appelez "Close".
    Donc pas de "for" mais appels multiples � la m�thode timer2_Tick.

    Votre Spash Sceen sent un peu le bricolage.

    http://www.reflectionit.nl/Articles/Splash.aspx

  3. #3
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Pardon d'�tre novice mais je crains ne pas comprendre ce que tu me dis, aurais tu un petit exemple qui reprendrait mon mon SplashScreen de l'Espace
    Je sais sais du bricolage mais je ne suis pas encore en mesure d'en cr�er un vrais car je manque de pratique et de formation car je fais �a � titre perso en loisirs.
    Donc je fais � mon niveau
    Merci d'avance!!

  4. #4
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Vous bloquez le thread graphique avec "System::Threading::Thread::Sleep(50);" donc votre affichage de l'application.

    Utilisez l'exemple du lien que je vous ai fourni.
    Il devrait contenir le code source si vous �tes curieux du comment c'est fait.

  5. #5
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Merci pour le lien, mais il semblerai que la class SplashApplicationContext ne soit pas possible en c++ ou alors j'ai pas su trouver car j'ai impl�ment� dans toutes les formes possible mais toujours la m�me erreur:
    C2061: erreur de syntaxe*: identificateur 'SplashApplicationContext'


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SplashApplicationContext^ myContext  = gcnew SplashApplicationContext(gcnew Form1(), gcnew SplashForm(), 2000);
    Dans le lien ils remettent ce code mais avec une intervalle de 0 pour arr�ter le timer, l� je comprend pas ou enserrer cet arr�t du Timer , � la suite du pr�c�dent dans Form1.h?
    Merci

  6. #6
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    class SplashApplicationContext ne soit pas possible en c++
    Le C++/CLI permet de faire des choses que les autre langages .NET ne peuvent pas faire. Tout ce que peut faire un langage .NET est faisable en C++/CLI.

    C2061: erreur de syntaxe*: identificateur 'SplashApplicationContext'
    N'oubliez pas les r�f�rences d'assemblies et les namespaces.
    SplashApplicationContext est dans le namespace "ReflectionIT.Windows.Forms".

    Dans le lien ils remettent ce code mais avec une intervalle de 0 pour arr�ter le timer, l� je comprend pas ou enserrer cet arr�t du Timer , � la suite du pr�c�dent dans Form1.h?
    Jetez un coup d'oeil au source. Vous verrez que le fait de mettre 0 � la place de 2000, oblige le SplashSreen � se fermer lui-m�me.
    Essayez de comprendre un peu le code C# et vous pourrez faire la m�me chose en C++/CLI.
    Si vous ne voulez pas utiliser le code source C# pour en faire une assembly que vous utiliseriez directement, bien s�r.

  7. #7
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Le C++/CLI permet de faire des choses que les autre langages .NET ne peuvent pas faire. Tout ce que peut faire un langage .NET est faisable en C++/CLI.
    Ok au moins l� c'est clair!!
    Citation Envoy� par bacelar Voir le message
    N'oubliez pas les r�f�rences d'assemblies et les namespaces.
    SplashApplicationContext est dans le namespace "ReflectionIT.Windows.Forms".
    L� je patine dans la choucroute !!
    J'ai toujours la m�me erreur.
    dans Form1.h j'ai mis
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #pragma once
    # include "SplashForm.h"
    namespace Splachscreen {
     
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Reflection;
    Dans SplashForm.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #pragma once
     
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using namespace System::Reflection;

  8. #8
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    L� je patine dans la choucroute !!
    OK, on va reprendre en premi�re.

    En lisant le code C#, pensez-vous pouvoir le convertir en C++/CLI ?
    Il est tr�s simple et en le convertissant vous n'aurez plus � g�rer les probl�matiques d'utilisation d'assemblies.

  9. #9
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Citation Envoy� par bacelar Voir le message

    En lisant le code C#, pensez-vous pouvoir le convertir en C++/CLI ?
    En tant que novice pas bien malheureusement.
    Citation Envoy� par bacelar Voir le message
    Il est tr�s simple et en le convertissant vous n'aurez plus � g�rer les probl�matiques d'utilisation d'assemblies.
    En fait je n'est trouv� de convertisseur gratuit de C# to C++/Cli
    Si j'ai bien compris, Class SplashApplicationContext est une dans l'espace de nom ReflectionIT le tout dans un fichier d'ent�te SplashApplicationContext
    Pourquoi ne pas mettre la class SplashApplicationContext directement dans Form1?
    C'est pour moi un peu tordu tout �a !!

    J'ai d�bugg� le code source fournit sur le site en C# , �a fonctionne mais je n'est trouv� la diff�rence du changement de la valeur0-->2000.

  10. #10
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    mais je n'est trouv� la diff�rence du changement de la valeur0-->2000.
    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
    public SplashApplicationContext(Form mainForm, Form splashForm, int timeout) : base(splashForm)
    		{
    			myMainForm = mainForm;
    			mySplashForm = splashForm;
    
    			// Initialize the SplashForm
    			splashForm.ShowInTaskbar = false;
    			splashForm.FormBorderStyle = FormBorderStyle.None;
    			splashForm.StartPosition = FormStartPosition.CenterScreen;
    
    			// Initialize the Timer
    			if (timeout > 0) 
    			{
    				myTimer = new Timer();
    				myTimer.Interval = timeout;
    				myTimer.Tick += new EventHandler(TimerEventProcessor);
    				myTimer.Start();
    			}
    		}
    Si 0 pas de timer, si pas de timer, pas d'appel de callback qui ferme le spashscreen.
    Le code C# est extr�mement simple et donc tr�s proche du C++/CLI. Les seules diff�rences sont que le passage des param�tres est toujours "par r�f�rence" et que les variables sont toujours des r�f�rences.
    Il est donc facile de convertir la 20 de lignes de code C# en C++/CLI.
    Vous pouvez aussi vous en servir comme pseudo-code qui donne le proc�d� plut�t que du code.

    Il n'y a pas de fichier d'en-t�te en C#, c'est le compilateur qui g�n�re ces meta-donn�es.

    Pourquoi ne pas mettre la class SplashApplicationContext directement dans Form1?
    SplashApplicationContext trvailm avec n'import quel formulaire, pourquoi la mettre dans Form1 ?

    C'est pour moi un peu tordu tout �a !!
    Avec une meilleur connaissance de la plateforme .NET et Windows, vous verrez que cela n'a rien de tordu.

  11. #11
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Citation Envoy� par bacelar Voir le message
    Si 0 pas de timer, si pas de timer, pas d'appel de callback qui ferme le spashscreen.
    Ce n'est de �a que je parlais mais c'est bon j'ai compris
    Citation Envoy� par bacelar Voir le message
    Le code C# est extr�mement simple et donc tr�s proche du C++/CLI. Les seules diff�rences sont que le passage des param�tres est toujours "par r�f�rence" et que les variables sont toujours des r�f�rences.
    Je comprends qu'il est difficile pour vous de voir que je manque cruellement de formation mais croyez moi je m'investis assez comme �a.
    Je suis d�sol� de pas �tre a votre niveau, je code pour mon plaisir.
    Citation Envoy� par bacelar Voir le message
    Il est donc facile de convertir la 20 de lignes de code C# en C++/CLI.
    Heu l�, moi pas tout compris !!! lol
    Citation Envoy� par bacelar Voir le message
    Vous pouvez aussi vous en servir comme pseudo-code qui donne le proc�d� plut�t que du code.
    Effectivement dans ce cas le plus important pour moi n'est pas le SplashScreen mais plut�t l'impl�mentation de cette fonction.
    Citation Envoy� par bacelar Voir le message
    Il n'y a pas de fichier d'en-t�te en C#, c'est le compilateur qui g�n�re ces meta-donn�es.
    �a au moins c'est fait !!! lol
    Je plaisante!!

    J'ai tout traduit en C++/CLI, je compile sans erreur mais la SplashForm ne s'affiche pas comme si le Timer �tait a "0" alors qu'il doit �tre a 2000 par d�faut.
    Je vous met le projet en C++ si vous avez 5 min pour y jeter un �il.
    http://www.partage-fichiers.com/dl.p...lashScreen.zip
    Utilisateur : sh7gfafk
    Mot de passe : aen82k9w
    Merci

  12. #12
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    D�sol� de ne pas vous avoir m�ch� le travail mais je trouve que votre travail de migration est bien plus qu'honorable.

    Il marche presque votre programme.

    Vous avez juste fait une petite faute d'�tourderie.

    Dans votre projet, vous avez 2 m�thodes Main.

    Une dans Form1.h et une dans SplashScreen.cpp.

    Vous avez mis � jour le Main de Form1.h mais c'est celui de SplashScreen.cpp qui est lanc�.

    Fusionnez ces mains. Moi j'utiliserais celui de SplashScreen.cpp car une application, c'est pas son interface.

    Cela donnerait �a :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	// Activation des effets visuels de Windows XP avant la création de tout contrôle
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
     
    	SplashApplicationContext ^myContext = gcnew SplashApplicationContext(gcnew Form1(), gcnew SplashForm(), 0);
    	Application::Run(myContext);
     
    	return 0;
    }
    Et encore f�licitation pour votre pers�v�rance.

  13. #13
    Membre tr�s actif
    Profil pro
    Inscrit en
    D�cembre 2007
    Messages
    254
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 254
    Par d�faut
    Merci,

    Citation Envoy� par bacelar Voir le message
    Dans votre projet, vous avez 2 m�thodes Main.
    Une dans Form1.h et une dans SplashScreen.cpp.
    Fusionnez ces mains. Moi j'utiliserais celui de SplashScreen.cpp car une application, c'est pas son interface.
    Effectivement
    J'ai suprim� celui de Form1 et conserv� celui de SplashScreen.cpp et �a fonctionne
    Merci pour votre aide!!
    Bien que peu indispensable j'ai beaucoup appris avec ce SplashScreen !!
    @++

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. SplashScreen avec image splash dans themepack
    Par denamaf dans le forum AWT/Swing
    R�ponses: 1
    Dernier message: 11/09/2008, 08h40
  2. SplashScreen avec fondu
    Par lili2008 dans le forum Langage
    R�ponses: 3
    Dernier message: 15/07/2008, 18h55
  3. SplashScreen avec progressbar
    Par JAVIR dans le forum AWT/Swing
    R�ponses: 9
    Dernier message: 21/09/2007, 22h13
  4. R�ponses: 3
    Dernier message: 22/06/2006, 17h39
  5. R�ponses: 6
    Dernier message: 05/05/2006, 11h04

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