Page 1 sur 1

[R] Démo Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 01:14
par Anthony
Bonjour à tous,

J'ai pressé la touche F1 :P
Bon dans les fonctions natives, c'est po possible :roll:
Je voulais savoir si dans les mondes parallèles il y avait un UDF :?
Pour info, MMB (Multimedia Builder) le permet :P :P :P
Ci-joint une capture d'écran.
ReorderObject.jpg

Si quelqu'un à une trouvaille je prend, ici le but est de faire passer "Before" devant "After" et je sais que AutoIt n'aime pas les chevauchements :lol:

Code : Tout sélectionner

$Button1 = GUICtrlCreateButton("Before", 5, 5, 50, 25)
$Button2 = GUICtrlCreateButton("After", 10, 10, 50, 25)
Edit: Voici la démo par mikell :wink:
Z Order.au3
(2.04 Kio) Téléchargé 505 fois

le code https://autoitscript.fr/forum/viewtopic ... 92#p105095

Re: [..] Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 02:25
par Anthony
Bon j'ai réussi à descendre tout en bas ou monter tout en haut mais Axe Z+1 ou Axe Z-1 ne fonctionne pas :shock:
Voici mon code, une idée :roll:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <APIConstants.au3>

$GUI = GUICreate("Test", 320, 200)
GUISetState()

$LABEL1 = GUICtrlCreateLabel("1", 20, 20, 200, 100)
GUICtrlSetBkColor(-1, 0xFF0000)
$LABEL2 = GUICtrlCreateLabel("2", 40, 40, 200, 100)
GUICtrlSetBkColor(-1, 0x00FF00)
$LABEL3 = GUICtrlCreateLabel("3", 60, 60, 200, 100)
GUICtrlSetBkColor(-1, 0x00AAFF)

Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "FRONT")
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "BACK")
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "FORWARD")	; <--- Monte d'un niveau
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "BACKWARD")	; <--- Descend d'un niveau

Do
    Sleep(50)
Until GUIGetMsg() = -3
Exit

Func GuiCtrlSetOrderZ( $id_Ctrl, $Z_Order)
   ;Need to include <WinAPI.au3> and <APIConstants.au3>
   Local $hWnd = $id_Ctrl
   If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($id_Ctrl)
   If $Z_Order = "BACK"		Then	Return _WinAPI_SetWindowPos($hWnd, $HWND_TOP, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
   If $Z_Order = "FRONT"	Then	Return _WinAPI_SetWindowPos($hWnd, $HWND_BOTTOM, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
   If $Z_Order = "BACKWARD"	Then	Return _WinAPI_SetWindowPos($hWnd, $HWND_TOPMOST, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
   If $Z_Order = "FORWARD"	Then	Return _WinAPI_SetWindowPos($hWnd, $HWND_NOTOPMOST, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
 EndFunc

Re: [..] Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 03:12
par TommyDDR
Pour m'être creusé la tête un bon moment dessus à une époque.. je crois qu'il n'est pas possible de le faire en AutoIt :(
(J'espère me tromper)

Re: [..] Réorganiser les object sur axe Z (Reorder Object)  

Posté : dim. 03 mai 2020 10:54
par mikell
Quelque chose comme ça ?

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <APIConstants.au3>

$GUI = GUICreate("Test", 340, 220)
GUISetState()

$LABEL1 = GUICtrlCreateLabel("1", 20, 20, 200, 100)
GUICtrlSetBkColor(-1, 0xFF0000)
$LABEL2 = GUICtrlCreateLabel("2", 40, 40, 200, 100)
GUICtrlSetBkColor(-1, 0x00FF00)
$LABEL3 = GUICtrlCreateLabel("3", 60, 60, 200, 100)
GUICtrlSetBkColor(-1, 0x00AAFF)
$LABEL4 = GUICtrlCreateLabel("4", 80, 80, 200, 100)
GUICtrlSetBkColor(-1, 0xFFCC00)
$LABEL5 = GUICtrlCreateLabel("5", 100, 100, 200, 100)
GUICtrlSetBkColor(-1, 0xDDDDDD)

Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "FORWARD", 2)  ; <--- Monte de 2 niveaux
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "FORWARD")  ; <--- Monte d'un niveau
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "FRONT")
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "BACKWARD", 2) ; <--- Descend de 2 niveaux
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "BACKWARD") ; <--- Descend d'un niveau
Sleep(1000)
GuiCtrlSetOrderZ( $LABEL1, "BACK")

Do
    Sleep(50)
Until GUIGetMsg() = -3
Exit

Func GuiCtrlSetOrderZ( $id_Ctrl, $Z_Order, $step = 1)
   ;Need to include <WinAPI.au3> and <APIConstants.au3>
   Local $hWnd = $id_Ctrl
   If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($id_Ctrl)
  Switch $Z_Order
      Case "BACK"
   Return _WinAPI_SetWindowPos($hWnd, $HWND_TOP, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
      Case "FRONT"
   Return _WinAPI_SetWindowPos($hWnd, $HWND_BOTTOM, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
      Case "BACKWARD"
   $hPrev = $hWnd
   For $i = 1 to $step+1
      $hPrev = _WinAPI_GetWindow($hPrev, $GW_HWNDPREV)
   Next
   Return _WinAPI_SetWindowPos($hWnd, $hPrev, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
      Case "FORWARD"
   $hNext = $hWnd
   For $i = 1 to $step
      $hNext = _WinAPI_GetWindow($hNext, $GW_HWNDNEXT)
   Next
   Return _WinAPI_SetWindowPos($hWnd, $hNext, 0, 0, 0, 0, $SWP_NOMOVE + $SWP_NOSIZE + $SWP_NOCOPYBITS)
  EndSwitch
 EndFunc

Faut pas sous-estimer AutoIt ... Image

Re: [..] Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 13:16
par Anthony
Toujours au Top et merci à tous les deux :wink: Bon le sujet est résolu :bisou:
PS: Je suis pas gay :lol:

Re: [R] Démo Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 14:43
par TommyDDR
Mikell le sauveur <3

Re: [R] Démo Réorganiser les object sur axe Z (Reorder Object)

Posté : dim. 03 mai 2020 20:02
par Anthony
Tout le monde :wink: :mrgreen: