Prérequis : Il faut avoir au mini deux écrans en mode étendu.
Voilà, un petit code qui permet de savoir sur quel écran se trouve une fenêtre. Ce code permet de « balancer » aussi la fenêtre d’un écran à un autre avec un simple bouton. Il y a u petit exemple pour montrer comment cela fonctionne.
Le code :
Code : Tout sélectionner
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
DisableASM
EnableExplicit
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
;
; INITIALISATION STRUCTURE, VARIABLES...
;
#MONITOR_MAX_SUPPORTED = 6
Structure desktops
number.l
bmonitor.b
DesktopWidth.i [#MONITOR_MAX_SUPPORTED]
DesktopHeight.i[#MONITOR_MAX_SUPPORTED]
EndStructure
Global sysdesktops.desktops
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
;
; INITIALISATION ET RECHERCHE DES ECRANS.
;
Procedure WindowMonitorScan()
;
; ROUTINE DE RECHERCHE DES ECRANS (DESKTOP).
;
Protected.i i
sysdesktops\number = ExamineDesktops()
sysdesktops\bmonitor = #False
If sysdesktops\number > 0
If sysdesktops\number > 1
sysdesktops\bmonitor = #True
EndIf
If sysdesktops\number > #MONITOR_MAX_SUPPORTED
sysdesktops\number = #MONITOR_MAX_SUPPORTED
EndIf
For i=0 To sysdesktops\number - 1
sysdesktops\DesktopWidth[i] = DesktopWidth(i)
sysdesktops\DesktopHeight[i] = DesktopHeight(i)
Next i
EndIf
EndProcedure
Procedure WindowMonitorFind(window.i)
;
; ROUTINE DE RECHERCE DE LA FENETRE SUR L'ECRAN.
;
Protected.i i, fullresx, fullwinx, number = 1
Protected.i borderx = (WindowWidth(window, #PB_Window_FrameCoordinate) - WindowWidth(window, #PB_Window_InnerCoordinate))
;
If GetWindowState(window) = #PB_Window_Maximize
fullwinx = WindowX(window) + borderx
Else
fullwinx = WindowX(window)
EndIf
;
If sysdesktops\number > 1
If fullwinx > sysdesktops\DesktopWidth[0]
For i=0 To sysdesktops\number - 1
fullresx + sysdesktops\DesktopWidth[i]
If fullwinx - fullresx > 0
number = sysdesktops\number - i
EndIf
Next i
EndIf
EndIf
ProcedureReturn number
EndProcedure
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
;
; ROUTINE POUR BASCULER LES FENÊTRES.
;
Procedure WindowMonitorChange(window.i)
;
; ROUTINE DE DEPLACEMENT LA FENÊTRE VERS L'ECRAN.
;
Protected.i i, mx, px
Protected.i max = GetWindowState(window)
Protected.i win = WindowMonitorFind(window)
Protected.i wmv = WindowMonitorFind(window) % sysdesktops\number
;
If sysdesktops\number > 1
For i=0 To win - 2
mx + sysdesktops\DesktopWidth[i]
Next i
For i=0 To wmv - 1
px + sysdesktops\DesktopWidth[i]
Next i
;
ResizeWindow(window, px + (WindowX(window) - mx), #PB_Ignore, #PB_Ignore, #PB_Ignore)
;
If max = #PB_Window_Maximize
SetWindowState(window, #PB_Window_Maximize)
EndIf
EndIf
EndProcedure
WindowMonitorScan()
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
;
; 'MAIN', ROUTINE D'EXEMPLE DU PROGRAMME.
;
If OpenWindow(0, 0, 0, 220, 100, "Exemple...", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
Define.i event, bClose = ButtonGadget(#PB_Any, 0, 0, 40, 20, "change")
;
;
Debug WindowMonitorFind(0) ; sur qu'elle ecran?
;
;
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_Gadget
If EventGadget() = bClose
WindowMonitorChange(0)
Debug WindowMonitorFind(0)
EndIf
Case #PB_Event_MoveWindow
Debug WindowMonitorFind(0) ; sur qu'elle ecran, vu que l'on a bouge la fenêtre?
EndSelect
Until event = #PB_Event_CloseWindow
EndIf
GallyHC