MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 2022
-
1 sept. 2017 à 20:04
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023
-
2 sept. 2017 à 12:52
Bonjour,
J'ai une petit routine qui mémorise la position des fenêtres à leur fermeture et qui les replace à leur réouverture.
Le problème se pose lorsque entre les deux, la taille de l'écran a changé : le deuxième écran n'est plus présent, ou l'utilisateur a réduit la résolution. Du coup, il arrive que la routine place la fenêtre en dehors de l'écran, ce qui est très désagréable et difficilement récupérable (à moins de faire Alt-Espace, flèche bas, Entrée, puis de bouger la souris dans tous les sens jusqu'à ce que la fenêtre apparaisse - C'est une manip que peu de gens connaissent).
Je prévois donc dans ma routine de tester la position et les dimensions mémorisées avant de les appliquer, et éventuellement de replacer la fenêtre au centre de l'écran principal.
Oui mais voilà : impossible (pour moi) de déterminer sur quel écran on est et quelles sont les dimensions de ce dernier.
Pour l'écran principal, pas de problème, puisque le la classe Screen fournit ses dimensions avec Screen.PrimaryScreen et Screen.PrimaryScreen.WorkingArea;
Mais pour l'écran secondaire, rien à faire. J'ai tenté d'utiliser Screen.GetWorkingArea, mais cela me ramène toujours les dimensions de l'écran primaire, même si le point de référence fourni est sur l'écran secondaire. Voici le petit bout de code que j'ai utilisé pour les tests :
Par exemple, je mets la fenêtre au milieu de l'écran secondaire, et j'obtiens :
Taille écran :
Haut = 0
Gauche = 0
Largeur = 1680
Hauteur = 1020
Position fenêtre :
Haut = 175
Gauche = 2324
Largeur = 486
Hauteur = 542
Or mon écran secondaire est un 4:3 en 1280 x 1024 !
La position gauche de la fenêtre est correcte, puisque c'est un bureau étendu et que mon écran secondaire est à droite. Mais du coup, la feuille serait supposée hors écran si on prend en compte la largeur écran retournée, alors qu'en fait elle ne l'est pas.
Quelqu'un connait une méthode pour détecter les dimensions de l'écran sur lequel est la feuille, et sa position sur cet écran ??
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 Modifié le 1 sept. 2017 à 20:41
J'ai trouvé !
en changeant les mots clés de recherche, j'ai trouvé sur un forum concurrent en anglais la solution suivante:
foreach (var screen in Screen.AllScreens)
{
// For each screen, add the screen properties to a list box.
Console.WriteLine("Device Name: " + screen.DeviceName);
Console.WriteLine("Bounds: " + screen.Bounds.ToString());
Console.WriteLine("Type: " + screen.GetType().ToString());
Console.WriteLine("Working Area: " + screen.WorkingArea.ToString());
Console.WriteLine("Primary Screen: " + screen.Primary.ToString());
Console.WriteLine();
}
J'ai donc tout ce qu'il me faut pour vérifier que la feuille est dans un des écrans.
J'avais pourtant passé un temps non négligeable sur le net avant de poster ma demande...
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 2 sept. 2017 à 10:04
Whaoo !
Le diction dit : "Mieux vaut un qui sait que dix qui cherchent".
Ce post répond complètement à mon problème, puisqu'il évoque le but même de ma recherche et en fournit la solution.
J'avais ce niveau de connaissance pour le VB6 il y a dix ans.
À mon âge, c'est un peu dur de repartir quasiment à zéro.
Mais on dit qu'apprendre les langues est un excellent remède contre la maladie d'Alzheimer. Et le C# me parait aussi ardu que le Mandarin.
Mais j'y arriverai !
Merci encore pour le coup de pouce. Je risque d'en avoir besoin d'autres dans un avenir proche...
MGD Software
Messages postés193Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 avril 20222 2 sept. 2017 à 08:20
Oups !
J'ai parlé un peu trop vite.
Je suis maintenant en mesure de détecter les différents écrans et leurs dimensions.
Mais comment savoir sur lequel est ma fenêtre ??
Vous n’avez pas trouvé la réponse que vous recherchez ?