Afficher sur l'écran de son choix

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Afficher sur l'écran de son choix

Message par Micoute »

Bonjour à tous,

dans le cas d'un système multi écrans, j'aimerais savoir s'il est possible d'afficher une fenêtre sur l'écran de son choix ?

Je vous remercie tous pour l'aide que vous allez m'apporté
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Afficher sur l'écran de son choix

Message par falsam »

Bureau étendu sur les deux écrans je suppose ?

Utilise ExamineDesktops()

Si affichage sur écran 2
utilise DesktopWidth() pour trouver la largeur du premier écran. Tu auras la coordonnées x de ton ecran 2
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Afficher sur l'écran de son choix

Message par GallyHC »

Bonjour,

J'avais fait un code pour envoyer une fenêtre sur les divers écran possible. La y a juste une fenêtre et un bouton, quand on clique sur le bouton la fenêtre bascule d'écran.
Voila l'adresse : http://www.koakdesign.info/pbfrance/?ur ... wer&val=77

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Afficher sur l'écran de son choix

Message par Ollivier »

Merci pour le lien GallyHC.

Pour compléter l'explication de Falsam, chez bicrosoft, les écrans se succèdent, comme le linge étendu sur un fil : tu as le T-Short "Ecran principal", tenu avec 2 pinces à linge, puis sur sa droite, le mouchoir en tissu brodé "Ecran secondaire" avec 2 pinces à linge aussi.

Cette disposition permet de choisir son écran en modifiant simplement le paramètre x d'une fenêtre. D'où le bon conseil de Falsam, plus haut.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Afficher sur l'écran de son choix

Message par GallyHC »

Bonjour,

Pour compléter aussi un peu olivier tout cela est valable si l'affichage multiple est bien en mode étendu.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Afficher sur l'écran de son choix

Message par falsam »

Petit code pour mettre en pratique ce que j'ai dit précédemment.

Je pars du principe qu'il n'y a que deux moniteur (0 et 1)

Code : Tout sélectionner

Structure NewDesktop
  x.i
  w.i
  h.i
EndStructure

Structure NewExtendedDesktop
  Desktop0.NewDesktop
  Desktop1.NewDesktop
EndStructure

Global Desktop.NewExtendedDesktop

Global CountDesktop = ExamineDesktops(), n

Declare SetupDesktop()
Declare ShowWindow(Desktop = 0)
Declare Exit()

;Initialisation desktop étendue
SetupDesktop()

;Afficher la fenetre sur le desktop 1 (0 par defaut) 
ShowWindow(1) 

;Bizarrerie : Si pas de fenetre l'examinedesktop est plus long
Procedure SetupDesktop()
  OpenWindow(0, 0, 0, 400, 200, "", #PB_Window_Invisible)
  
  ;Configuration du bureau étendu
  If ExamineDesktops() = 2
    Desktop\Desktop0\x = 0
    Desktop\Desktop0\w = DesktopWidth(0)
    Desktop\Desktop0\h = DesktopHeight(0)
    
    Desktop\Desktop1\x = DesktopWidth(0)
    Desktop\Desktop1\w = DesktopWidth(1)
    Desktop\Desktop1\h = DesktopHeight(1)
  EndIf
  
  CloseWindow(0)
EndProcedure

;Affichage de la fenetre de test
Procedure ShowWindow(DesktopNumber = 0)
  Protected x, y = #PB_Ignore, w = #PB_Ignore, h = #PB_Ignore 
  Protected Flag = #PB_Window_SystemMenu | #PB_Window_Maximize | #PB_Window_MaximizeGadget
  
  OpenWindow(0, x, 0, 800, 600, "Ma fenetre", Flag)
    
  If DesktopNumber = 1
    If Flag & Flag & #PB_Window_Maximize
      x = Desktop\Desktop0\w 
      w = Desktop\Desktop1\w
      h = Desktop\Desktop1\h
      
    ElseIf Flag & #PB_Window_ScreenCentered
      x = Desktop\Desktop0\w + Desktop\Desktop1\w / 2 - WindowWidth(0)/2
      
    Else
      x = Desktop\Desktop0\w + WindowX(0)
    EndIf
    
    ResizeWindow(0, x, y, w, h) 
  EndIf
  
  BindEvent(#PB_Event_CloseWindow, @Exit())
  Repeat : WaitWindowEvent() : ForEver  
EndProcedure

Procedure Exit()
  End
EndProcedure
J'ai testé ce code sur un pc connecté à deux moniteurs 17" et 24". Le bureau est étendu sur les deux écrans.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Afficher sur l'écran de son choix

Message par Micoute »

Mais tout ça est excellent, énorme merci pour ce partage
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3137
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Afficher sur l'écran de son choix

Message par venom »

Oui il faut faire attention. Car on peut avoir des bureau a gauche, droite mais aussi en haut et bas. :wink:







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre