[Func] Redimensionner plusieurs controls avec des bordures
Posté : mer. 31 juil. 2013 13:35
par Cautex
Bonjour, je vous présente les différents exemples ci-dessous qui permettent de redimensionner un groupe de controls en fonction d'une barre (bordure) et d'un label servant de délimitation.
Comme c'est pas forcément très clair le mieux c'est de tester:prochaine étape: combiner une barre de section horizontale et verticale 
EDIT: voila
EDIT: et voici la même chose avec le redimensionnement en largeur et hauteur simultanée:
Comme c'est pas forcément très clair le mieux c'est de tester:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test redim section",600,600, 192, 124,0x00040000)
$label_zone_redim = GUICtrlCreatelabel("", 580,130,20,250)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetBkColor(-1,0xFED6F9)
$edit1= GUICtrlCreateListView("col1|col2", 0, 5,530,275)
$bouton2 = GUICtrlCreateButton("boutton test",530,260,70,20)
$edit2= GUICtrlCreateListView("col", 0, 310,200,150)
$bouton1 = GUICtrlCreateButton("boutton test",10,285,100,20)
$edit3= GUICtrlCreateListView("col", 250,285,200,150)
$label_redim = GUICtrlCreatelabel("", 0, 280,598, 5)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetCursor (-1,11)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $label_redim
;la deuxieme dimension du tableau est la méthode de redimensionnement (0=on modifie la hauteur du control; 1=on déplace en hauteur le control)
global $controls_redim[5][2] = [[$edit1,0],[$bouton1,1],[$bouton2,1],[$edit2,0],[$edit3,0]]
_redim_hauteur($controls_redim,$label_redim,$label_zone_redim)
EndSwitch
WEnd
func _redim_hauteur($controls_redim,$label_redim,$label_zone_redim,$gui = $Form1,$max_bas=0,$max_haut=100)
;$label_zone_redim = label servant de délimitations en hauteur
;$label_redim = label servant à effectuer le déplacement avec la souris
;$controls_redim = tableau contenant tous les controls à redimensionner
if not IsArray($controls_redim) then return False
$pos_gui = WinGetPos($gui)
$pos_zone = ControlGetPos($gui,"",$label_zone_redim)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$barre_sup = ($pos_gui[3]-$tmp_largeur_gui[1])-$bordure
$pos_zone_ecran_y = $pos_gui[1] + $barre_sup + $pos_zone[1]
While 1
if not _IsPressed(01) then ExitLoop
$pos_mouse = MouseGetPos()
$coor_mouse_y = $pos_mouse[1]
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
global $last_hauteur_label_redim = $control_label_redim_pos[1]
$new_pos_hauteur = ($coor_mouse_y - $pos_zone_ecran_y)
$zone_hauteur = $pos_zone[3]
$pourcentage_hauteur =( $new_pos_hauteur / $zone_hauteur)*100
if $pourcentage_hauteur < $max_bas Then $new_pos_hauteur = (($zone_hauteur/100)*$max_bas)
if $pourcentage_hauteur > $max_haut Then $new_pos_hauteur = (($zone_hauteur/100)*$max_haut)
GUICtrlSetPos($label_redim,0,$new_pos_hauteur+ $pos_zone[1])
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
for $i = 0 to UBound($controls_redim)-1
$tmp_pos = ControlGetPos($gui,"",$controls_redim[$i][0])
$tmp_diff_hauteur = $control_label_redim_pos[1] - $last_hauteur_label_redim
if $tmp_pos[1] > $last_hauteur_label_redim Then ;le control est en bas
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff_hauteur),$tmp_pos[2],($tmp_pos[3]-$tmp_diff_hauteur))
Else;le control est en haut
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],$tmp_pos[1],$tmp_pos[2],($tmp_pos[3]+$tmp_diff_hauteur))
EndIf
if $controls_redim[$i][1] = 1 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff_hauteur),$tmp_pos[2],$tmp_pos[3])
Next
Sleep(10);delai de rafraichissement
WEnd
EndFunc

EDIT: voila

► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test redim section",600,600, 192, 124,0x00040000)
$label_zone_redim = GUICtrlCreatelabel("", 580,130,20,250)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetBkColor(-1,0xFED6F9)
$label_zone_redim2 = GUICtrlCreatelabel("", 150,550,250,20)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetBkColor(-1,0xFED6F9)
$edit1= GUICtrlCreateListView("col1|col2", 0, 5,530,275)
$bouton2 = GUICtrlCreateButton("boutton test",530,260,70,20)
$edit2= GUICtrlCreateListView("col", 0, 310,200,150)
$bouton1 = GUICtrlCreateButton("boutton test",65,285,100,20)
$edit3= GUICtrlCreateListView("col", 250,285,200,150)
$label_redim = GUICtrlCreatelabel("", 0, 280,598, 5)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetCursor (-1,11)
$label_redim2 = GUICtrlCreatelabel("", 220, 285,5, 291)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetCursor (-1,13)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $label_redim
;la deuxieme dimension du tableau est la méthode de redimensionnement (0=on modifie la hauteur du control; 1=on déplace en hauteur le control)
global $controls_redim[6][2] = [[$edit1,0],[$bouton1,1],[$bouton2,1],[$edit2,0],[$edit3,0],[$label_redim2,0]]
_redim_hauteur($controls_redim,$label_redim,$label_zone_redim)
case $label_redim2
;la deuxieme dimension du tableau est la méthode de redimensionnement (0=on modifie la largeur du control; 1=on déplace en largeur le control)
global $controls_redim[3][2] = [[$edit2,0],[$edit3,0],[$bouton1,1]]
_redim_largeur($controls_redim,$label_redim2,$label_zone_redim2)
EndSwitch
WEnd
func _redim_hauteur($controls_redim,$label_redim,$label_zone_redim,$gui = $Form1,$max_bas=0,$max_haut=100)
;$label_zone_redim = label servant de délimitations en hauteur
;$label_redim = label servant à effectuer le déplacement avec la souris
;$controls_redim = tableau contenant tous les controls à redimensionner
if not IsArray($controls_redim) then return False
$pos_gui = WinGetPos($gui)
$pos_zone = ControlGetPos($gui,"",$label_zone_redim)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$barre_sup = ($pos_gui[3]-$tmp_largeur_gui[1])-$bordure
$pos_zone_ecran_y = $pos_gui[1] + $barre_sup + $pos_zone[1]
While 1
if not _IsPressed(01) then ExitLoop
$pos_mouse = MouseGetPos()
$coor_mouse_y = $pos_mouse[1]
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
global $last_hauteur_label_redim = $control_label_redim_pos[1]
$new_pos_hauteur = ($coor_mouse_y - $pos_zone_ecran_y)
$zone_hauteur = $pos_zone[3]
$pourcentage_hauteur =( $new_pos_hauteur / $zone_hauteur)*100
if $pourcentage_hauteur < $max_bas Then $new_pos_hauteur = (($zone_hauteur/100)*$max_bas)
if $pourcentage_hauteur > $max_haut Then $new_pos_hauteur = (($zone_hauteur/100)*$max_haut)
GUICtrlSetPos($label_redim,$control_label_redim_pos[0],$new_pos_hauteur+ $pos_zone[1])
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
for $i = 0 to UBound($controls_redim)-1
$tmp_pos = ControlGetPos($gui,"",$controls_redim[$i][0])
$tmp_diff_hauteur = $control_label_redim_pos[1] - $last_hauteur_label_redim
if $tmp_pos[1] > $last_hauteur_label_redim Then ;le control est en bas
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff_hauteur),$tmp_pos[2],($tmp_pos[3]-$tmp_diff_hauteur))
Else;le control est en haut
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],$tmp_pos[1],$tmp_pos[2],($tmp_pos[3]+$tmp_diff_hauteur))
EndIf
if $controls_redim[$i][1] = 1 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff_hauteur),$tmp_pos[2],$tmp_pos[3])
Next
Sleep(10);delai de rafraichissement
WEnd
EndFunc
func _redim_largeur($controls_redim,$label_redim,$label_zone_redim,$gui = $Form1,$max_droite=0,$max_gauche=100)
;$label_zone_redim = label servant de délimitations en largeur
;$label_redim = label servant à effectuer le déplacement avec la souris
;$controls_redim = tableau contenant tous les controls à redimensionner
if not IsArray($controls_redim) then return False
$pos_gui = WinGetPos($gui)
$pos_zone = ControlGetPos($gui,"",$label_zone_redim)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$pos_zone_ecran_x = $pos_gui[0] + $bordure + $pos_zone[0]
While 1
if not _IsPressed(01) then ExitLoop
$pos_mouse = MouseGetPos()
$coor_mouse_x = $pos_mouse[0]
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
global $last_largeur_label_redim = $control_label_redim_pos[0]
$new_pos_largeur = ($coor_mouse_x - $pos_zone_ecran_x)
$zone_largeur = $pos_zone[2]
$pourcentage_largeur =( $new_pos_largeur / $zone_largeur)*100
if $pourcentage_largeur < $max_droite Then $new_pos_largeur = (($zone_largeur/100)*$max_droite)
if $pourcentage_largeur > $max_gauche Then $new_pos_largeur = (($zone_largeur/100)*$max_gauche)
GUICtrlSetPos($label_redim,$new_pos_largeur+$pos_zone[0])
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
for $i = 0 to UBound($controls_redim)-1
$tmp_pos = ControlGetPos($gui,"",$controls_redim[$i][0])
$tmp_diff_largeur = $control_label_redim_pos[0] - $last_largeur_label_redim
if $tmp_pos[0] > $last_largeur_label_redim Then ;le control est à droite
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0]+$tmp_diff_largeur,$tmp_pos[1],$tmp_pos[2]-$tmp_diff_largeur)
Else;le control est à gauche
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],$tmp_pos[1],$tmp_pos[2]+$tmp_diff_largeur)
EndIf
if $controls_redim[$i][1] = 1 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0]+$tmp_diff_largeur)
Next
Sleep(10);delai de rafraichissement
WEnd
EndFunc
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <Misc.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Test redim section",600,600, 192, 124,0x00040000)
$label_zone_redim = GUICtrlCreatelabel("", 580,130,20,250)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetBkColor(-1,0xFED6F9)
$label_zone_redim2 = GUICtrlCreatelabel("", 150,550,250,20)
GUICtrlSetState(-1,$gui_disable)
GUICtrlSetBkColor(-1,0xFED6F9)
$edit1= GUICtrlCreateListView("col1|col2", 0, 5,530,272)
$bouton2 = GUICtrlCreateButton("boutton test",530,260,70,20)
$edit2= GUICtrlCreateListView("col", 0, 310,200,150)
$bouton1 = GUICtrlCreateButton("boutton test",65,285,100,20)
$edit3= GUICtrlCreateListView("col", 250,285,200,150)
$label_redim3 = GUICtrlCreatelabel("", 217, 277,11, 11)
GUICtrlSetBkColor(-1,0xFE0101)
GUICtrlSetCursor (-1,9)
$label_redim = GUICtrlCreatelabel("", 0, 280,598, 5)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetCursor (-1,11)
$label_redim2 = GUICtrlCreatelabel("", 220, 285,5, 291)
GUICtrlSetBkColor(-1,0x000000)
GUICtrlSetCursor (-1,13)
GUISetState(@SW_SHOW)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
global $controls_redim_hauteur[7][2] = [[$edit1,0],[$bouton1,1],[$bouton2,1],[$edit2,0],[$edit3,0],[$label_redim2,0],[$label_redim3,1]]
global $controls_redim_largeur[4][2] = [[$edit2,0],[$edit3,0],[$bouton1,1],[$label_redim3,1]]
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $label_redim
_redim_hauteur($controls_redim_hauteur,$label_redim,$label_zone_redim)
case $label_redim2
_redim_largeur($controls_redim_largeur,$label_redim2,$label_zone_redim2)
case $label_redim3
_redim($controls_redim_hauteur,$controls_redim_largeur,$label_redim,$label_redim2,$label_zone_redim,$label_zone_redim2)
EndSwitch
WEnd
func _redim_hauteur($controls_redim,$label_redim,$label_zone_redim,$gui = $Form1,$max_haut=0,$max_bas=100)
if not IsArray($controls_redim) then return False
$pos_gui = WinGetPos($gui)
$pos_zone = ControlGetPos($gui,"",$label_zone_redim)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$barre_sup = ($pos_gui[3]-$tmp_largeur_gui[1])-$bordure
$pos_zone_ecran_y = $pos_gui[1] + $barre_sup + $pos_zone[1]
While 1
if not _IsPressed(01) then ExitLoop
_redim_exec($controls_redim,$label_redim,$max_haut,$max_bas,$pos_zone_ecran_y,$pos_zone,$Form1,1,3)
Sleep(10);delai de rafraichissement
WEnd
EndFunc
func _redim_largeur($controls_redim,$label_redim,$label_zone_redim,$gui = $Form1,$max_gauche=0,$max_droite=100)
if not IsArray($controls_redim) then return False
$pos_gui = WinGetPos($gui)
$pos_zone = ControlGetPos($gui,"",$label_zone_redim)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$pos_zone_ecran = $pos_gui[0] + $bordure + $pos_zone[0]
While 1
if not _IsPressed(01) then ExitLoop
_redim_exec($controls_redim,$label_redim,$max_gauche,$max_droite,$pos_zone_ecran,$pos_zone)
Sleep(10);delai de rafraichissement
WEnd
EndFunc
func _redim($controls_redim_hauteur,$controls_redim_largeur,$label_redim_hauteur,$label_redim_largeur,$label_zone_redim_hauteur,$label_zone_redim_largeur,$gui = $Form1,$max_haut=0,$max_bas=100,$max_gauche=0,$max_droite=100)
if not IsArray($controls_redim_hauteur) then return False
if not IsArray($controls_redim_largeur) then return False
$pos_gui = WinGetPos($gui)
$pos_zone_y = ControlGetPos($gui,"",$label_zone_redim_hauteur)
$pos_zone_x = ControlGetPos($gui,"",$label_zone_redim_largeur)
$tmp_largeur_gui = WinGetClientSize($gui)
$bordure = ($pos_gui[2]-$tmp_largeur_gui[0])/2
$barre_sup = ($pos_gui[3]-$tmp_largeur_gui[1])-$bordure
$pos_zone_ecran_y = $pos_gui[1] + $barre_sup + $pos_zone_y[1]
$pos_zone_ecran_x = $pos_gui[0] + $bordure + $pos_zone_x[0]
While 1
if not _IsPressed(01) then ExitLoop
_redim_exec($controls_redim_hauteur,$label_redim_hauteur,$max_haut,$max_bas,$pos_zone_ecran_y,$pos_zone_y,$Form1,1,3)
_redim_exec($controls_redim_largeur,$label_redim_largeur,$max_gauche,$max_droite,$pos_zone_ecran_x,$pos_zone_x)
Sleep(10);delai de rafraichissement
WEnd
EndFunc
func _redim_exec($controls_redim,$label_redim,$max_1,$max_2,$pos_zone_ecran,$pos_zone,$gui = $Form1,$1=0,$2=2,$3=1)
$pos_mouse = MouseGetPos()
$coor_mouse = $pos_mouse[$1]
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
global $last_label_redim = $control_label_redim_pos[$1]
$new_pos = ($coor_mouse - $pos_zone_ecran)
$zone = $pos_zone[$2]
$pourcentage =( $new_pos / $zone)*100
if $pourcentage < $max_1 Then $new_pos = (($zone/100)*$max_1)
if $pourcentage > $max_2 Then $new_pos = (($zone/100)*$max_2)
if $1 = 0 then
GUICtrlSetPos($label_redim,$new_pos+$pos_zone[$1])
Else
GUICtrlSetPos($label_redim,$control_label_redim_pos[0],$new_pos+ $pos_zone[1])
EndIf
$control_label_redim_pos = ControlGetPos($gui,"",$label_redim)
for $i = 0 to UBound($controls_redim)-1
$tmp_pos = ControlGetPos($gui,"",$controls_redim[$i][0])
$tmp_diff = $control_label_redim_pos[$1] - $last_label_redim
if $1 = 0 then
if $tmp_pos[$1] > $last_label_redim Then
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[$1]+$tmp_diff,$tmp_pos[$3],$tmp_pos[$2]-$tmp_diff)
Else
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[$1],$tmp_pos[$3],$tmp_pos[$2]+$tmp_diff)
EndIf
if $controls_redim[$i][1] = 1 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[$1]+$tmp_diff)
Else
if $tmp_pos[1] > $last_label_redim Then ;le control est en bas
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff),$tmp_pos[2],($tmp_pos[3]-$tmp_diff))
Else;le control est en haut
if $controls_redim[$i][1] = 0 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],$tmp_pos[1],$tmp_pos[2],($tmp_pos[3]+$tmp_diff))
EndIf
if $controls_redim[$i][1] = 1 then GUICtrlSetPos($controls_redim[$i][0],$tmp_pos[0],($tmp_pos[1]+$tmp_diff),$tmp_pos[2],$tmp_pos[3])
EndIf
Next
EndFunc