Déplacer des fenêtres en synchro / les organiser
Publié : mer. 13/mars/2013 22:39
un petit utilitaire sympa, ni fini, ni joli, mais il fait le job.
En ce moment je bosse avec un soft qui génère plein de fenêtre nommées plus ou moins pareil, et bien sur elle ne sont pas bien arrangé, donc c'est pas pratique... (MatLab pour ne pas le nommer)
Et, j'en ai eu marre
Donc, en récapitulatif, on indique une partie du titre qui va être cherché sur les fenêtres,
leurs tailles, éventuellement la manière dont on veux qu'elles s'arrangent, et puis on sélectionne celle qui va guider les autres.
En ce moment je bosse avec un soft qui génère plein de fenêtre nommées plus ou moins pareil, et bien sur elle ne sont pas bien arrangé, donc c'est pas pratique... (MatLab pour ne pas le nommer)
Et, j'en ai eu marre

Donc, en récapitulatif, on indique une partie du titre qui va être cherché sur les fenêtres,
leurs tailles, éventuellement la manière dont on veux qu'elles s'arrangent, et puis on sélectionne celle qui va guider les autres.
Code : Tout sélectionner
Enumeration
#Listview_0
#Button_1
#Text_0
#String_0
#String_1
#String_2
#String_3
#String_4
#Text_1
#Text_2
#Text_3
#Text_4
#Button_2_RedimAll
#Button_3_CollerSelection
#Button_4_CollerSelection
EndEnumeration
Structure fen
name.s
hwnd.l
num_matlab.l
EndStructure
Global NewList liste_des_figures.fen()
Procedure Window(Win_Name.s, List fen.fen())
NewList list_fen.fen()
modif.b = #False
hwnd.l = FindWindow_( 0, 0 )
While hwnd <> 0
If GetWindowLong_(hwnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE
; If GetwindowLong_(Hwnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW
txt.s = Space(256)
GetWindowText_(hwnd, txt, 256)
If txt <> ""
If FindString(txt, Win_Name)
AddElement(list_fen())
list_fen()\hwnd = hwnd
list_fen()\name = txt
If modif = #False
trouve.b = #False
ForEach fen()
If fen()\name = txt
trouve = #True
Break
EndIf
Next
If trouve = #False
modif = #True
EndIf
EndIf
EndIf
EndIf
; EndIf
EndIf
hwnd = GetWindow_(hwnd, #GW_HWNDNEXT)
Wend
If modif Or ListSize(fen()) <> ListSize(list_fen())
CopyList(list_fen(), fen())
ForEach fen()
fen()\num_matlab = Val(ReplaceString(fen()\name, "Figure ", ""))
Next
SortStructuredList(fen(), #PB_Sort_Ascending, OffsetOf(fen\name), #PB_Sort_String)
SortStructuredList(fen(), #PB_Sort_Ascending, OffsetOf(fen\num_matlab), #PB_Sort_Long)
ClearGadgetItems(#Listview_0)
ForEach fen()
AddGadgetItem(#Listview_0, -1, fen()\name)
Next
EndIf
FreeList(list_fen())
EndProcedure
Procedure Arranger()
Static old_rect.RECT
state = GetGadgetState(#Listview_0)
If state > -1
*fen_select.fen = SelectElement(liste_des_figures(), state)
rect.RECT
GetWindowRect_(*fen_select\hwnd, @rect)
If rect\left = old_rect\left And rect\top = old_rect\top And rect\bottom = old_rect\bottom And rect\right = old_rect\right
ProcedureReturn
EndIf
CopyStructure(rect, old_rect, RECT)
rect\right = Val(GetGadgetText(#String_0))
rect\bottom = Val(GetGadgetText(#String_1))
SetWindowPos_(liste_des_figures()\hwnd, 0, rect\left, rect\top, rect\right, rect\bottom, 0)
H = Val(GetGadgetText(#String_2))
V = Val(GetGadgetText(#String_3))
ResetList(liste_des_figures())
For y = 0 To V - 1
For x = 0 To H - 1
If NextElement(liste_des_figures()) = 0 : Break 2 : EndIf
If liste_des_figures() = *fen_select
If NextElement(liste_des_figures()) = 0 : Break 2 : EndIf
EndIf
If x = 0 And y = 0 : x = 1 : EndIf
SetWindowPos_(liste_des_figures()\hwnd, 0, rect\left + rect\right * x, rect\top + rect\bottom * y, rect\right, rect\bottom, 0)
Next
Next
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 370, 200, "REDIM windows", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TextGadget(#Text_4, 10, 12, 70, 20, "Nom fenêtre =")
StringGadget(#String_4, 90, 10, 70, 20, "Figure ")
ListViewGadget(#Listview_0, 10, 40, 150, 150)
ButtonGadget(#Button_1, 170, 110, 180, 20, "Redimensionner")
ButtonGadget(#Button_2_RedimAll, 170, 130, 180, 20, "Redimensionner Tout")
ButtonGadget(#Button_3_CollerSelection, 170, 150, 180, 20, "Arranger autour de celle sélectionnée")
ButtonGadget(#Button_4_CollerSelection, 170, 170, 180, 20, "Arrangement auto", #PB_Button_Toggle)
TextGadget(#Text_0, 170, 12, 90, 20, "Largueur =")
StringGadget(#String_0, 260, 10, 90, 20, "500")
TextGadget(#Text_1, 170, 32, 90, 20, "Hauteur =")
StringGadget(#String_1, 260, 30, 90, 20, "500")
TextGadget(#Text_2, 170, 62, 90, 20, "NB_cellule H =")
StringGadget(#String_2, 260, 60, 90, 20, "3")
TextGadget(#Text_3, 170, 82, 90, 20, "NB_cellule V =")
StringGadget(#String_3, 260, 80, 90, 20, "2")
EndIf
AddWindowTimer(0, 0, 100)
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
Select EventGadget()
Case #Button_1
state = GetGadgetState(#Listview_0)
If state > -1
SelectElement(liste_des_figures(), state)
rect.RECT
GetWindowRect_(liste_des_figures()\hwnd, @rect)
SetWindowPos_(liste_des_figures()\hwnd, 0, rect\left, rect\top, Val(GetGadgetText(#String_0)), Val(GetGadgetText(#String_1)), 0)
EndIf
Case #Button_2_RedimAll
rect.RECT
ForEach liste_des_figures()
GetWindowRect_(liste_des_figures()\hwnd, @rect)
SetWindowPos_(liste_des_figures()\hwnd, 0, rect\left, rect\top, Val(GetGadgetText(#String_0)), Val(GetGadgetText(#String_1)), 0)
Next
Case #Button_3_CollerSelection
Arranger()
Case #Button_4_CollerSelection
If GetGadgetState(#Button_4_CollerSelection)
AddWindowTimer(0, 1, 50)
Else
RemoveWindowTimer(0, 1)
EndIf
EndSelect
EndIf
If event = #PB_Event_Timer
Select EventTimer()
Case 0
Window(GetGadgetText(#String_4), liste_des_figures())
Case 1
Arranger()
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End