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++Builder Discussion :

Problème de bi-Ecran


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Problème de bi-Ecran
    Bonjour à tous

    Je vous explique mon problème.
    Mon application peut etre amené a être lancé sur un PC ayant 2 Ecrans.
    J'ai donc avant d'afficher ma form principale, fait une petite forme déplacable permettant de faire basculer l'application sur le 2ème Ecran.
    Or, dès que l'affichage de ma form principale se fait en plein écran, elle est toujours sur le 1er Ecran.

    J'ai essayé avec une seule form, ma form principale que je dimensionne pas en plein ecran et déplacable et ensuite quand je veux l'afficher en plein Ecran, je la met à jour. là cela fonctionne mais j'ai des problème de raffraichissement. j'ai un rectangle de la taille de la form au départ affiché au coin en haut de l'écran qui disparait ensuite.

    Est-ce que quelqu'un aurais une solution

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Je pense pas avoir été très clair, je reformule autrement.

    J'ai trouver comment on pouvait détecter le nombre d'écran et accéder aux propriétés de chacun.

    Par contre ce que j'aimerais, c'est arriver à détecter sur quel écran est affiché une form, et de pouvoir paramétrer moi même l'affichage de ma form, sur l'un ou l'autre des écrans.

    Merci d'avance pour votre aide

  3. #3
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut peut-être que ceci peut t'aidé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Forms::TMonitor *SelectedMonitor;
     
    for(int i = 0; i < Screen->MonitorCount; i++)
    {
        SelectedMonitor = Screen->Monitors[i];
    }

  4. #4
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Comment cela peut me donner le moniteur sélectionné, je comprend pas car avec ta boucle, j'aurais toujours le dernier écran comme écran sélectionné ?

  5. #5
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Citation Envoyé par kurul1 Voir le message
    Comment cela peut me donner le moniteur sélectionné, je comprend pas car avec ta boucle, j'aurais toujours le dernier écran comme écran sélectionné ?
    Je n'avais pas donner la réponse complète, c'étais seulement une partie du puzzle.

    Voici le code complet (ou presque) pour savoir le moniteur dans lequel une Form ce trouve:
    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
        Forms::TMonitor *SelectedMonitor;
        int PixelCount = 0;
        TRect ResultRect;
     
        for(int i = 0; i < Screen->MonitorCount; i++)
        {
            if(IntersectRect(ResultRect, Screen->Monitors[i]->BoundsRect, BoundsRect))
            {   // IntersectRect donne le nombre de pixel de ma Form dans le Moniteur i
                int TempCount = ResultRect.Width() * ResultRect.Height();
                if(TempCount > PixelCount)
                {   // Si le nombre de pixel est plus grand que celui du dernier moniteur
                    // alors cela veut dire que la Form fait partie en plus grande partie
                    // de ce moniteur, donc on sélectionne ce moniteur
                    PixelCount = TempCount;
                    SelectedMonitor = Screen->Monitors[i];
                }
            }
        }

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci beaucoup pour ton aide, j'arrive maintenant à détecter sur quel noniteur se trouve mon SplashScreen.

    Maintenant ce que je voudrais faire, c'est dire à ma form principale de se dessiner sur ce même écran et là je coince.

    Voilà mon code
    j'ai essayé d'insérer les lignes en rouges mais cela me met ces erreurs

    [C++ Erreur] Prog.cpp(98): E2315 'BoundRect' n'est pas un membre de 'TPrincipaleForm', parce que le type n'est pas encore défini
    [C++ Erreur] Prog.cpp(113): E2451 Symbole 'exception' non défini

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Splash.h"
    
    //---------------------------------------------------------------------------
    
    USEFORM("Principale.cpp", PrincipaleForm);
    USEFORM("Splash.cpp", SplashForm);
    
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    	try
    	{
    		Application->Initialize();
    
    		// On renseigne le titre de l'application
    		Application->Title = "Titre";
    
    		TSplashForm *Splash = new TSplashForm(NULL);
    
    		// On affiche la fiche
    		Splash->Show();
    
    		// on affiche son contenu
    		Splash->Repaint();
    
    		// On se met en attente
    		while(Splash->Affichage)
    		{
    			Application->ProcessMessages();
    		}
    
    		// on récupère la valeur du booléen pour quitter l'application
    		bool QuitterApplication = Splash->QuitterApplication;
    
    		Forms::TMonitor *SelectedMonitor;
    		int PixelCount = 0;
    		TRect ResultRect;
    
    		// On balaye les moniteurs
    		for(int i = 0; i < Screen->MonitorCount; i++)
    		{
    			// On regarde s'il y a intersection entre le moniteur et le Splash
    			if(IntersectRect(ResultRect, Screen->Monitors[i]->BoundsRect, Splash->BoundsRect))
    			{
    				// IntersectRect donne le nombre de pixel de ma Form dans le Moniteur i
    				int TempCount = ResultRect.Width() * ResultRect.Height();
    
    				if(TempCount > PixelCount)
    				{   // Si le nombre de pixel est plus grand que celui du dernier moniteur
    					// alors cela veut dire que la Form fait partie en plus grande partie
    					// de ce moniteur, donc on sélectionne ce moniteur
    					PixelCount = TempCount;
    					SelectedMonitor = Screen->Monitors[i];
    				}
    			}
    		}
    
    		// On détruit la fiche de splash
    		delete Splash;
    		Splash = NULL;
    
    		// Si l'on doit Quitter l'application
    		if(QuitterApplication)
    		{
    			// On quitte l'application
    			Application->Terminate();
    		}
    		// Sinon on ne doit pas quitter l'application
    		else
    		{
    			Application->CreateForm(__classid(TPrincipaleForm), &PrincipaleForm);
    
    			// On affecte le rectangle du Moniteur du Splash au la form Principale
    			PrincipaleForm->BoundRect = SelectedMonitor->BoundsRect;
    
    			Application->Run();
    		}
    	}
    	catch (Exception &exception)
    	{
    		Application->ShowException(&exception);
    	}
    	catch (...)
    	{
    		try
    		{
    			throw Exception("");
    		}
    		catch (Exception &exception)
    		{
    			Application->ShowException(&exception);
    		}
    	}
    	return 0;
    }

  7. #7
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Et bien j'ai posté un peu vite,
    il faut en fait affecter mon boundrect au MainForm de l'application

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ...
    Application->CreateForm(__classid(TPrincipaleForm), &PrincipaleForm);
     
    // On affecte le rectangle du Moniteur du Splash a la form Principale
    Application->MainForm->BoundsRect = SelectedMonitor->BoundsRect;
     
    Application->Run();
    ...
    Merci beaucoup pour ton aide Crayon

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

Discussions similaires

  1. Problème résolution d'ecran dans mes vues
    Par Cyang dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 06/09/2011, 15h25
  2. [PC portable] problème d'affichage ecran hp 6730s trait verticale
    Par papi88 dans le forum Ordinateurs
    Réponses: 1
    Dernier message: 02/08/2011, 10h36
  3. [Windows mobile 6.0] Problème de plein ecran
    Par Math28 dans le forum Windows Mobile
    Réponses: 6
    Dernier message: 23/04/2010, 09h43
  4. problème affichage changement ecran
    Par Z3phur dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 04/01/2010, 12h50
  5. Réponses: 5
    Dernier message: 18/03/2007, 18h12

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