PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Multi-écran
Multi-écran
Iniciado por Dams, abr., 27 2017 11:16 AM - 5 respostas
Publicado em abril, 27 2017 - 11:16 AM
Bonjour,

J'ai un projet qui tourne sur un poste avec 3 écrans.
Sur chaque écran je veux pouvoir afficher une fenêtre différente par programmation.
Comment puis je faire ?

J'ai la liste d'écran avec la fonction sysListeEcran().
Par contre, comment dire à une fenêtre de s'ouvrir dans tel ou tel écran ?

Merci d'avance pour votre aide.

Cordialement
Publicado em abril, 27 2017 - 11:39 AM
Salut,

Pour la position des fenêtres, c'est très simple.
Mafenetre..x et Mafenetre..y dès son ouverture

Après ton problème c'est de connaitre le x et le y
Regarde du coté des fonctions SysListeRésolutionEcran , FenRectangleEcran, SysRectangleEcran, etc..
Après Il va falloir rusé et faire un peu de programmation, aussi faire attention à regarder quel est ton écran principal qui détermine ton origine ou x=0 et y=0

A+
Publicado em abril, 27 2017 - 12:41 PM
et gérer aussi le re-démarrage de l'appli avec un seul écran
si tu as sauvé dans ton config les positions sur 3 écrans, ces positions
ne sont plus valides avec un seul écran...
c'est bete mais ca peut arriver

eric l.

Le 27/04/2017 à 09:39, Mickael a écrit :
Salut,

Pour la position des fenêtres, c'est très simple.
Mafenetre..x et Mafenetre..y dès son ouverture

Après ton problème c'est de connaitre le x et le y
Regarde du coté des fonctions SysListeRésolutionEcran ,
FenRectangleEcran, SysRectangleEcran, etc..
Après Il va falloir rusé et faire un peu de programmation, aussi faire
attention à regarder quel est ton écran principal qui détermine ton
origine ou x=0 et y=0

A+
Membro registado
4 mensagems
Publicado em abril, 27 2017 - 3:11 PM
Merci à tous,

Je vais chercher dans ce sens là.
Je vous tiens au jus si j'ai trouvé la solution.
A+
Membro registado
4 mensagems
Publicado em abril, 28 2017 - 7:34 AM
J'ai fait un truc comme ça, mais ce n'est pas assez optimisé et ça ne marche pas à tous les coups:

Si vous avez d'autres idées, elles sont les biens venue :

GaucheEcran est un entier = 0
HautEcran est un entier = 0
DroitEcran est un entier = 0
BasEcran est un entier = 0
sRect est une chaîne= 0
sNomEcranPrincipal est une chaîne = SysNomEcranPrincipal()
bOk est un booléen = Faux
sResolution est une chaîne
sResoLargeur est une chaîne
sResoHauteur est une chaîne

//On considére qu'il y a 3 écrans maximum
//Les données retournée par les fonctions sys parte de gauche à droite.

SI 1 < SysNombreEcran() <= 3 ALORS
//Récupération des positions des écrans
//Si GaucheEcran est négatif, c'est l'écran de gauche

sRect = SysRectangleEcran()
GaucheEcran = ExtraitChaîne(sRect, 1)
HautEcran = ExtraitChaîne(sRect, 2)
DroitEcran = ExtraitChaîne(sRect, 3)
BasEcran = ExtraitChaîne(sRect, 4)


SI gclConfiguration.m_sCarteGraphiqueChargement = "" ALORS
//Déplacement manuel si besoin
bOk = Vrai
SINON
//Ex: sNomEcranPrincipal = \\.\DISPLAY2\Monitor0 Generic PnP Monitor
// gclConfiguration.m_sCarteGraphiqueChargement = \\.\DISPLAY1\Monitor0 Generic PnP Monitor

SI sNomEcranPrincipal <> gclConfiguration.m_sCarteGraphiqueChargement ALORS
//Il faut récupérer la résolution de l'écran principal afin de déterminer la position d'ouverture de la fenêtre fille
// dans le bon écran
sResolution = SysRésolutionEcran() // Résolution écran principal si nom écran non renseigné
sResoLargeur = ExtraitChaîne(sResolution,1)
sResoHauteur = ExtraitChaîne(sResolution,2)

SI GaucheEcran < 0 ALORS
//On a un écran à gauche
SI ExtraitChaîne(SysRésolutionEcran(gclConfiguration.m_sCarteGraphiqueChargement),1) <> Abs(GaucheEcran) ALORS
GaucheEcran = DroitEcran
HautEcran = BasEcran
FIN
FIN
bOk = Vrai
SINON
bOk = Vrai
FIN
FIN
SINON
bOk = Faux
FIN

SI bOk ALORS
OuvreSoeur(FEN_EcranTVChargement,GaucheEcran,HautEcran)
SINON
Ouvre(FEN_EcranTVChargement,GaucheEcran,HautEcran)
FIN


Merci encore pour vos retour.

Dams
Membro registado
4 mensagems
Publicado em abril, 28 2017 - 10:50 AM
j'ai fait plus simple, maintenant il reste les tests

Procedure PL_Gestion_Afficheur_Ecran(pnGaucheEcran est un entier = 0, pnHautEcran est un entier = 0,pnNomEcranTV est un entier = 0)

GaucheEcran est un entier = 0
sRect est une chaîne= 0
bOk est un booléen = Vrai
nResoLargeur est un entier

//L'écran Principal est toujour en x = 0 et y = 0 - La configuration sera faites comme ça en production
//D'après les régles de configuration, l'écran 2 sera toujours à gauche, l'écran 1 est principal est l'écran 3 toujours à droite

//On considére qu'il y a 3 écrans maximum
//Les données retournée par les fonctions sys parte de gauche à droite.

SI 1 < SysNombreEcran() <= 3 ALORS
//Récupération des positions des écrans
//Si GaucheEcran est négatif, c'est l'écran de gauche

GaucheEcran = ExtraitChaîne(SysRectangleEcran(), 1)

// Résolution écran principal si nom écran non renseigné
nResoLargeur = Val(ExtraitChaîne(SysRésolutionEcran(),1))

pnHautEcran = 0 // le y est toujours zéro

SELON pnNomEcranTV
CAS 2
//Le coin gauche de l'écran de gauche
pnGaucheEcran = nResoLargeur

CAS 3
//Le coin gauche de l'écran de droite
//
pnGaucheEcran = GaucheEcran

AUTRE CAS
pnGaucheEcran = 0

FIN
SINON
bOk = Faux
FIN

RENVOYER bOk