[UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 02/06/2022

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

[UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 02/06/2022

#1

Message par Anthony »

Bonjour à tous,

J'ai pas mal cherché pour avoir une StatusBar correcte mais pas si facile en fait alors je partage avec vous cet UDF, autant que çà serve à tous.
Votre contribution peut-être stimulée pour de plus amples mise à jour et correction de bug... (Comme ajouter des fonctions par exemple)

StatusBarEx permet d'ajouter une StatusBar dans plusieurs GUI Parent & Child (Voir capture d'écran) :wink:
GuiStatusBarEx.jpg

Code : Tout sélectionner

$hGUI_1_Label_1 = _GUICtrlStatusBarEx_CreateControl($hGUI_1,6,7,"Label1",42,0,170,0,"SIZEABLE_LEFT",$SS_CENTER+$SS_CENTERIMAGE, "",0xFFAA00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier New|0x0000FF")
Une partie (Func)tions à été ajouté comme ici pour l'affichage de l'heure.

Code : Tout sélectionner

_GUICtrlStatusBarEx_CreateFunc( $hGUI_1_Label_1, 1, 0)
Voici le code pour l'interface GUI, c'est léger non ? :P
GuiStatusBarEx - UDF DEMO.au3
(12.08 Kio) Téléchargé 1194 fois
Mise à jour 2022/06/02
Version light
GuiStatusBarEx - UDF DEMO Light.au3
(2.67 Kio) Téléchargé 1041 fois
Mise à jour 2022/06/02
il faudra récupérer l'UDF pour qu'il fonctionne (GuiStatusBarEx.au3)
GuiStatusBarEx.au3
(27.62 Kio) Téléchargé 1091 fois
Voir le fil des discutions pour vous informer sur le mises à jour :wink:
Modifié en dernier par Anthony le jeu. 02 juin 2022 02:23, modifié 31 fois.
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#2

Message par walkson »

Bonjour,
Petit problème en quittant le code
>Running AU3Check (3.3.14.5)  from:C:\Program Files\AutoIt3  input:C:\Users\PC\Desktop\GuiStatusBarEx - UDF DEMO.au3
"C:\Users\PC\Desktop\GuiStatusBarEx.au3"(54,27) : warning: $WM_SIZE: possibly used before declaration.
   GUIRegisterMsg($WM_SIZE,
~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(55,33) : warning: $WM_SYSCOMMAND: possibly used before declaration.
   GUIRegisterMsg($WM_SYSCOMMAND,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(56,35) : warning: $WM_EXITSIZEMOVE: possibly used before declaration.
   GUIRegisterMsg($WM_EXITSIZEMOVE,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,42) : warning: $GUI_DOCKLEFT: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,58) : warning: $GUI_DOCKSIZE: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,76) : warning: $GUI_DOCKBOTTOM: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,92) : warning: $GUI_DOCKRIGHT: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(96,25) : warning: $GUI_RUNDEFMSG: possibly used before declaration.
   Return $GUI_RUNDEFMSG
~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\PC\Desktop\GuiStatusBarEx - UDF DEMO.au3 - 0 error(s), 8 warning(s)
Sinon, ça marche bien !
[Edit] J'ai simplement rajouté
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISys.au3>
dans l'UDF et supprimé ces includes dans l'exemple. Un petit problème de synchronisation
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#3

Message par mikell »

D'accord avec walkson. Dans la mesure où l'UDF utilise des constantes issues d'autres includes, il faut mettre ces includes dans l'UDF
épi une notice explicative sur comment définir la position et la taille des controles, ça serait pas mal :mrgreen:

Un dernier truc. Sur mon PC, si je recouvre la fenêtre démo avec une autre puis que je la fais repasser au premier plan, les controles de la statusbar ne s'affichent pas. Je l'ai corrigé avec ça :

GUIRegisterMsg($WM_ACTIVATEAPP, "WM_ACTIVATEAPP")

......

Func WM_ACTIVATEAPP($hWnd, $msg, $wParam, $lParam)
  If $wParam = 1 Then _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
   Return $GUI_RUNDEFMSG
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#4

Message par Anthony »

walkson a écrit : lun. 06 avr. 2020 17:04 Bonjour,
Petit problème en quittant le code
>Running AU3Check (3.3.14.5)  from:C:\Program Files\AutoIt3  input:C:\Users\PC\Desktop\GuiStatusBarEx - UDF DEMO.au3
"C:\Users\PC\Desktop\GuiStatusBarEx.au3"(54,27) : warning: $WM_SIZE: possibly used before declaration.
   GUIRegisterMsg($WM_SIZE,
~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(55,33) : warning: $WM_SYSCOMMAND: possibly used before declaration.
   GUIRegisterMsg($WM_SYSCOMMAND,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(56,35) : warning: $WM_EXITSIZEMOVE: possibly used before declaration.
   GUIRegisterMsg($WM_EXITSIZEMOVE,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,42) : warning: $GUI_DOCKLEFT: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,58) : warning: $GUI_DOCKSIZE: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,76) : warning: $GUI_DOCKBOTTOM: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM +
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(64,92) : warning: $GUI_DOCKRIGHT: possibly used before declaration.
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"C:\Users\TURBO\Desktop\GuiStatusBarEx.au3"(96,25) : warning: $GUI_RUNDEFMSG: possibly used before declaration.
   Return $GUI_RUNDEFMSG
~~~~~~~~~~~~~~~~~~~~~~~~^
C:\Users\PC\Desktop\GuiStatusBarEx - UDF DEMO.au3 - 0 error(s), 8 warning(s)
Sinon, ça marche bien !
[Edit] J'ai simplement rajouté
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPISys.au3>
dans l'UDF et supprimé ces includes dans l'exemple. Un petit problème de synchronisation
Ok, peut-être dû a la vitesse de mon SSD, j'ai viré c'est 3 includes de l'interface GUI et rajouté dans l'UDF
Merci walkson puis mikell pour ce retour :wink:
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#5

Message par Anthony »

mikell a écrit : lun. 06 avr. 2020 17:40 D'accord avec walkson. Dans la mesure où l'UDF utilise des constantes issues d'autres includes, il faut mettre ces includes dans l'UDF
épi une notice explicative sur comment définir la position et la taille des controles, ça serait pas mal :mrgreen:

Un dernier truc. Sur mon PC, si je recouvre la fenêtre démo avec une autre puis que je la fais repasser au premier plan, les controles de la statusbar ne s'affichent pas. Je l'ai corrigé avec ça :

GUIRegisterMsg($WM_ACTIVATEAPP, "WM_ACTIVATEAPP")

......

Func WM_ACTIVATEAPP($hWnd, $msg, $wParam, $lParam)
  If $wParam = 1 Then _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
   Return $GUI_RUNDEFMSG
EndFunc
Bonjour mikell, les includes c'est réglé :D
J'ai tenté de reproduire ton défaut, sans succés 8) ,j'ai ajouté le RegisterMsg avec sa Func :wink: peux-tu me dire si si c'est réglé :mrgreen:
Ok, ok j'avais pas pensé à faire cet explicatif, la rédaction est pas mon fort alors si quelque chose ne va pas, n'hésitez pas :D
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#6

Message par mikell »

Anthony a écrit : mar. 07 avr. 2020 07:46J'ai tenté de reproduire ton défaut, sans succés
C'est pour ça que j'ai bien précisé "sur mon PC" - qui est un vieux PC avec un vieil OS :mrgreen:
Sinon pour la rédaction, ébin faut te forcer, c'est la rançon de la gloire :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#7

Message par Anthony »

Je constate aussi que la fenêtre minimisée ou maximisée ne fonctionne pas.
J'ai ce début de code mais je ne sais pas comment l'intégrer dans l'UDF... :roll:

Code : Tout sélectionner

If BitAND( WinGetState($hWnd), 16) Or BitAND( WinGetState($hWnd), 32) Then ; $WIN_STATE_MINIMIZED Or $WIN_STATE_MAXIMIZED
   ConsoleWrite( "Return: "& WinGetState($hWnd) &@CRLF)
EndIf
Dans l'UDF (inclu dans le premier post), je suis sur une fonction pour utiliser un Label transparent çà peut-être sympa sur une ProgresseBar sauf que je suppose qui faille un GUIRegisterMsg pour que le truc fonctionne et je bloque :roll:

Code : Tout sélectionner

Func _GUICtrlStatusBarEx_CreateLabel( $StatusBarEx_Part, $StatusBarEx_Title, $StatusBarEx_X, $StatusBarEx_Y, $StatusBarEx_W, $StatusBarEx_H)
   Local $var					= StringSplit( $hPartsPosEx[$StatusBarEx_Part][2], ",")



;~    Local $StatusBarEx_Object	= GUICtrlCreateLabel( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H, BitOR($SS_CENTER, $SS_CENTERIMAGE, $WS_EX_TRANSPARENT, $WS_EX_TOPMOST))
;~    Local $StatusBarEx_Object	= GUICtrlCreateLabel( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H, BitOR($SS_CENTER, $SS_CENTERIMAGE))
   $hGUI_ForLabel	= GUICreate("", $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H-2, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y+2, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TRANSPARENT, $WS_EX_MDICHILD), $hGUI)	; W=400 H=17 X=100 Y=24
   GUISetBkColor(0x989898, $hGUI_ForLabel)
   Local $StatusBarEx_Object	= GUICtrlCreateLabel( $StatusBarEx_Title, 0, 0, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H-3, $SS_CENTER + $SS_CENTERIMAGE)	; $SS_CENTER, $SS_CENTERIMAGE ; X=0 Y=0 W=400 H=17
   GUICtrlSetFont( $StatusBarEx_Object, 8.5, 400, "", "", 5)
   GUICtrlSetBkColor( $StatusBarEx_Object, $GUI_BKCOLOR_TRANSPARENT)
   _WinAPI_SetLayeredWindowAttributes( $hGUI_ForLabel, 0x989898)
   GUISetState(@SW_SHOWNA, $hGUI_ForLabel)
   GUISetState(@SW_SHOW, $hGUI)



   If $StatusBarEx_Part			= UBOUND( $hPartsPosEx)-1 And $StatusBarEx_W = -1 Then
	  GUICtrlSetResizing( $hGUI_ForLabel, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
	  GUICtrlSetResizing( $StatusBarEx_Object, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   Else
	  GUICtrlSetResizing( $hGUI_ForLabel, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
	  GUICtrlSetResizing( $StatusBarEx_Object, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
   EndIf
   Return $StatusBarEx_Object
EndFunc
Pourrait-on se débarrasser de _SETBOTTOM() en le rangeant dans l'UDF par exemple :idea:
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#8

Message par walkson »

Bonjour,
J'ai le même problème que Michel et pourtant je ne suis pas sous WIN 98 :mrgreen: (je suis sous Win 7)
J'ai testé votre code et aucun problème pour minimiser la fenêtre ou l’inverse
Sinon, j'ai une proposition pour rendre votre UDF polyvalente avec couleur du fond du control et caractéristiques de la police.
#include <FontConstants.au3>
;#FUNCTION#====================================================================================================================
; Name ..........: _GUICtrlStatusBarEx_CreateControl
; Description ...:
; Syntax ........: _GUICtrlStatusBarEx_CreateControl($IndexControl, $StatusBarEx_Part, $StatusBarEx_Title, $StatusBarEx_X,
;                  $StatusBarEx_Y, $StatusBarEx_W, $StatusBarEx_H[, $BkColor = ""[, $SetFont = ""]])
; Parameters ....: $IndexControl        - Une des valeurs suivantes.
;                               1 - Button
;                               2 - Checkbox
;                               3 - Combobox
;                               4 - Date
;                               5 - Input
;                               6 - Label
;                  $StatusBarEx_Part    - N° de section du statusbar.
;                  $StatusBarEx_Title   - Texte.
;                  $StatusBarEx_X       - X.
;                  $StatusBarEx_Y       - Y.
;                  $StatusBarEx_W       - W.
;                  $StatusBarEx_H       - H.
;                  $BkColor             - [optional] RGB. Default is "".
;                  $SetFont             - [optional] "Size|weight|attribute|fontname". Default is "". Eg: "10|$FW_NORMAL|$GUI_FONTNORMAL|Arial"
;                                Size: eg. 10
;                                weight:     $FW_DONTCARE = 0
;                                         $FW_THIN = 100
;                                         $FW_EXTRALIGHT = 200
;                                         $FW_LIGHT = 300
;                                         $FW_NORMAL = 400
;                                         $FW_MEDIUM = 500
;                                         $FW_SEMIBOLD = 600
;                                         $FW_BOLD = 700
;                                         $FW_EXTRABOLD = 800
;                                         $FW_HEAVY = 900
;                                attribute :     $GUI_FONTNORMAL (0) = Normal
;                                            $GUI_FONTITALIC (2) = Italic
;                                            $GUI_FONTUNDER (4) = Underlined
;                                            $GUI_FONTSTRIKE (8) = Strike
;                                fontname: eg. Arial
;
; Return values .: Control
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_CreateControl($IndexControl, $StatusBarEx_Part, $StatusBarEx_Title, $StatusBarEx_X, $StatusBarEx_Y, $StatusBarEx_W, $StatusBarEx_H, $BkColor = "", $SetFont = "")
   If $IndexControl < 1 Or $IndexControl > 6 Then Return SetError(1)
   Local $var              = StringSplit( $hPartsPosEx[$StatusBarEx_Part][2], ",")
   Switch $IndexControl
      Case 1
         $StatusBarEx_Object  = GUICtrlCreateButton( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 2
         $StatusBarEx_Object  = GUICtrlCreateCheckbox( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 3
         $StatusBarEx_Object  = GUICtrlCreateCombo( "", $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
         GUICtrlSetData(-1,$StatusBarEx_Title)
      Case 4
         $StatusBarEx_Object  = GUICtrlCreateDate( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 5
         $StatusBarEx_Object  = GUICtrlCreateInput( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 6
         $StatusBarEx_Object  = GUICtrlCreateLabel( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
   EndSwitch
   If $BkColor <> "" Then GUICtrlSetBkColor($StatusBarEx_Object,$BkColor)
   Local $SetFontSplit
   If $SetFont <> "" Then
       $SetFontSplit = StringSplit($SetFont,"|")
      If Not IsArray($SetFontSplit) Then  Return SetError(1)
      If $SetFontSplit[0] = 4 Then GUICtrlSetFont($StatusBarEx_Object, $SetFontSplit[1],$SetFontSplit[2],$SetFontSplit[3],$SetFontSplit[4])
   EndIf
   If $StatusBarEx_Part       = UBOUND( $hPartsPosEx)-1 And $StatusBarEx_W = -1 Then
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   Else
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
   EndIf
   Return $StatusBarEx_Object
EndFunc
J'ai testé avec votre exemple et ça marche bien.
$Input1= _GUICtrlStatusBarEx_CreateControl(3, 5,"Essai|AA", 55, 0, -1, 0,0xFFFF00,"10|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
Un combobox sur fond jaune
Bien sûr, pour GUICtrlCreateDate(), la police et la couleur ne fonctionne pas
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#9

Message par mikell »

Anthony a écrit : mar. 07 avr. 2020 09:37Je constate aussi que la fenêtre minimisée ou maximisée ne fonctionne pas.
GUIRegisterMsg($WM_PAINT, "WM_PAINT")

Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
  _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
   Return $GUI_RUNDEFMSG
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#10

Message par Anthony »

walkson a écrit : mar. 07 avr. 2020 12:35 Bonjour,
J'ai le même problème que Michel et pourtant je ne suis pas sous WIN 98 :mrgreen: (je suis sous Win 7)
J'ai testé votre code et aucun problème pour minimiser la fenêtre ou l’inverse
Sinon, j'ai une proposition pour rendre votre UDF polyvalente avec couleur du fond du control et caractéristiques de la police.
#include <FontConstants.au3>
;#FUNCTION#====================================================================================================================
; Name ..........: _GUICtrlStatusBarEx_CreateControl
; Description ...:
; Syntax ........: _GUICtrlStatusBarEx_CreateControl($IndexControl, $StatusBarEx_Part, $StatusBarEx_Title, $StatusBarEx_X,
;                  $StatusBarEx_Y, $StatusBarEx_W, $StatusBarEx_H[, $BkColor = ""[, $SetFont = ""]])
; Parameters ....: $IndexControl        - Une des valeurs suivantes.
;                               1 - Button
;                               2 - Checkbox
;                               3 - Combobox
;                               4 - Date
;                               5 - Input
;                               6 - Label
;                  $StatusBarEx_Part    - N° de section du statusbar.
;                  $StatusBarEx_Title   - Texte.
;                  $StatusBarEx_X       - X.
;                  $StatusBarEx_Y       - Y.
;                  $StatusBarEx_W       - W.
;                  $StatusBarEx_H       - H.
;                  $BkColor             - [optional] RGB. Default is "".
;                  $SetFont             - [optional] "Size|weight|attribute|fontname". Default is "". Eg: "10|$FW_NORMAL|$GUI_FONTNORMAL|Arial"
;                                Size: eg. 10
;                                weight:     $FW_DONTCARE = 0
;                                         $FW_THIN = 100
;                                         $FW_EXTRALIGHT = 200
;                                         $FW_LIGHT = 300
;                                         $FW_NORMAL = 400
;                                         $FW_MEDIUM = 500
;                                         $FW_SEMIBOLD = 600
;                                         $FW_BOLD = 700
;                                         $FW_EXTRABOLD = 800
;                                         $FW_HEAVY = 900
;                                attribute :     $GUI_FONTNORMAL (0) = Normal
;                                            $GUI_FONTITALIC (2) = Italic
;                                            $GUI_FONTUNDER (4) = Underlined
;                                            $GUI_FONTSTRIKE (8) = Strike
;                                fontname: eg. Arial
;
; Return values .: Control
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_CreateControl($IndexControl, $StatusBarEx_Part, $StatusBarEx_Title, $StatusBarEx_X, $StatusBarEx_Y, $StatusBarEx_W, $StatusBarEx_H, $BkColor = "", $SetFont = "")
   If $IndexControl < 1 Or $IndexControl > 6 Then Return SetError(1)
   Local $var              = StringSplit( $hPartsPosEx[$StatusBarEx_Part][2], ",")
   Switch $IndexControl
      Case 1
         $StatusBarEx_Object  = GUICtrlCreateButton( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 2
         $StatusBarEx_Object  = GUICtrlCreateCheckbox( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 3
         $StatusBarEx_Object  = GUICtrlCreateCombo( "", $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
         GUICtrlSetData(-1,$StatusBarEx_Title)
      Case 4
         $StatusBarEx_Object  = GUICtrlCreateDate( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 5
         $StatusBarEx_Object  = GUICtrlCreateInput( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
      Case 6
         $StatusBarEx_Object  = GUICtrlCreateLabel( $StatusBarEx_Title, $var[1]+$StatusBarEx_X, $var[2]+$StatusBarEx_Y, $var[3]+$StatusBarEx_W-$StatusBarEx_X, $var[4]+$StatusBarEx_H)
   EndSwitch
   If $BkColor <> "" Then GUICtrlSetBkColor($StatusBarEx_Object,$BkColor)
   Local $SetFontSplit
   If $SetFont <> "" Then
       $SetFontSplit = StringSplit($SetFont,"|")
      If Not IsArray($SetFontSplit) Then  Return SetError(1)
      If $SetFontSplit[0] = 4 Then GUICtrlSetFont($StatusBarEx_Object, $SetFontSplit[1],$SetFontSplit[2],$SetFontSplit[3],$SetFontSplit[4])
   EndIf
   If $StatusBarEx_Part       = UBOUND( $hPartsPosEx)-1 And $StatusBarEx_W = -1 Then
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   Else
     GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
   EndIf
   Return $StatusBarEx_Object
EndFunc
J'ai testé avec votre exemple et ça marche bien.
$Input1= _GUICtrlStatusBarEx_CreateControl(3, 5,"Essai|AA", 55, 0, -1, 0,0xFFFF00,"10|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
Un combobox sur fond jaune
Bien sûr, pour GUICtrlCreateDate(), la police et la couleur ne fonctionne pas
:shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock: :shock:
Tout résumer en si peu :P :bisou: je bosse dessus presque jour et nuit et voilà presque tout et même plus résumé en une Func :wink:
Vraiment beau bouleau mais dis moi, j'essaie d'intégrer ce bout de code mais j'ai toujours un problème, çà veut pas, saurais-tu voir çà ?
Encore merci, çà va vraiment alléger le schmilblick :mrgreen:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
;~ #Region ### START Koda GUI section ### Form=


$hGUI			= GUICreate("GUI", 600, 250)				; W=600	H=250

Local $X=150, $Y=25, $W=200, $H=20

$idProgressBar	= GUICtrlCreateProgress($X, $Y, $W, $H)	; X=100 Y=25 W=400 H=20

$hGUI_ForLabel	= GUICreate("", $W, $H-2, $X, $Y+2, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TRANSPARENT, $WS_EX_MDICHILD), $hGUI)	; W=400 H=17 X=100 Y=24
GUISetBkColor(0x989898, $hGUI_ForLabel)
Local $StatusBarEx_Object	= GUICtrlCreateLabel("0", 0, 0, $W, $H-3, $SS_CENTER + $SS_CENTERIMAGE)	; $SS_CENTER, $SS_CENTERIMAGE ; X=0 Y=0 W=400 H=17
GUICtrlSetFont(-1, 9)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
_WinAPI_SetLayeredWindowAttributes( $hGUI_ForLabel, 0x989898)
GUISetState(@SW_SHOWNA, $hGUI_ForLabel)
GUISetState(@SW_SHOW, $hGUI)
#EndRegion ### END Koda GUI section ###

For $i = 0 To 100
    GUICtrlSetData($idProgressBar, $i)
    GUICtrlSetData($StatusBarEx_Object, $i & ' %')
    Sleep(25)
Next

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#11

Message par Anthony »

mikell a écrit : mar. 07 avr. 2020 22:55
Anthony a écrit : mar. 07 avr. 2020 09:37Je constate aussi que la fenêtre minimisée ou maximisée ne fonctionne pas.
GUIRegisterMsg($WM_PAINT, "WM_PAINT")

Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
  _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
   Return $GUI_RUNDEFMSG
EndFunc
Whaou, merci mikell :bisou: çà marche :mrgreen:
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#12

Message par Anthony »

Alors voilà mise à jour à l'instant, c'est plus léger encore merci walkson pour ta fonction, je te l'ai piqué. :mrgreen:
Mais il y à un mais :P
La Checkbox quand on la coche fait perdre tous les contrôles, pas de problème en revanche pour les ComboBox ou Calendar :?:
Quand on appuie sur le Button "Go" j'ai fait lancer l'affichage de la date et l'heure, les contrôles disparaissent :?:

Code : Tout sélectionner

AdlibRegister(_updateTime, 1000)
Quand je clique sur la fenêtre sans redimentionner... çà clignotte, comprend pas :(
mikell, quelle différence :?:

Code : Tout sélectionner

GUIRegisterMsg($WM_ACTIVATEAPP, "_WM_ACTIVATEAPP")	; Same ? > GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUIRegisterMsg($WM_PAINT, "WM_PAINT")			; Same ? > GUIRegisterMsg($WM_ACTIVATEAPP, "_WM_ACTIVATEAPP")
On touche au but,
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#13

Message par mikell »

Voilà ce que j'utilise sur mon PC
Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
  _WinAPI_RedrawWindow($hBarEx, "", "", $RDW_UPDATENOW)
   Return $GUI_RUNDEFMSG
EndFunc
; https://docs.microsoft.com/en-us/windows/win32/gdi/wm-paint
Juste cette fonction ça devrait suffire, ça marche sur mon vieux machin donc ça devrait le faire ailleurs (walkson tu testes ?)
Mais une alternative serait préférable (si possible). Il faut y aller mollo avec les GUIRegisterMsg dans les udf, parce que l'utilisateur peut avoir envie d'en mettre lui aussi dans son script principal et faut pas créer de conflits, c'est pas bien Image
Pour le reste je ne peux répondre que si tu fournis un code complet utilisable (udf + exemple) qui montre le souci... "ça clignote", c'est comme le "ça marche pô" , ça manque sérieusement de précision et malgré les apparences je suis pas devin Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#14

Message par Anthony »

OK je vais supprimer l'autre.
Pour le reste je ne peux répondre que si tu fournis un code complet utilisable (udf + exemple) qui montre le souci... "ça clignote", c'est comme le "ça marche pô" , ça manque sérieusement de précision et malgré les apparences je suis pas devin
Quand je clique sur la fenêtre sans redimentionner... çà clignotte, comprend pas
Que puis-je faire de mieux à part une vidéo.
Désolé, mais pourtant c'est bien mis à jour dans le premier post depuis 15h30 (udf + exemple + code + capture d'écran)
[UDF] GuiStatusBar facile (GuiStatusBarEx.au3)
viewtopic.php?p=104902#p104902

Merci quand même :cry:
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#15

Message par walkson »

Bonjour,
Ben ! ç'est vrai, c'est beau comme un sapin de Noël :mrgreen:
Il y a des WM_... qui interfèrent.
J'ai conservé GUIRegisterMsg($WM_SIZE, "_WM_SIZE") et GUIRegisterMsg($WM_PAINT, "WM_PAINT") et viré les autres
J'ai désactivé AdlibRegister(_updateTime, 1000) et ça va beaucoup mieux sauf pour le Checkbox qui fait caché les autres contrôles.
Il doit y avoir un problème que je n'ai pas trouvé. Quand j'avais testé la fonction, il ne posait pas de problème !?!
Sinon, j'ai mis _SETBOTTOM() dans Func _GUICtrlStatusBarEx_CreateControl() juste avant le Return (à la fin)
Ah! oui ! j'oubliais: Global $DEBUG_StatusBarEx = '1', $DEBUG_StatusBarEx_Sleep = 75, je l'ai mis dans l'UDF, là où il n'aurait jamais du quitter sa place :P (ça faisait un bug comme la dernière fois)
Pour les WM_... pour comprendre leurs actions, je mets une consolewrite() pour voir quand ils agissent. Après je les supprime (les consolewrite()).

Vous devriez aussi numéroter les UDF Pour savoir lequel est le dernier
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile (GuiStatusBarEx.au3)

#16

Message par mikell »

Ah pardon, j'avais pas vu les màj dans le post #1 :oops:

En plus de mettre le setbottom() - que je conseillerais de renommer en _GUICtrlStatusBarEx_SetBottom() :wink: - dand l'udf comme walkson, voilà ce que j'utilise :
   GUIRegisterMsg($WM_SIZE, "_WM_SIZE")
   GUIRegisterMsg($WM_PAINT, "WM_PAINT")     
   GUIRegisterMsg($WM_ENTERSIZEMOVE, "_WM_ENTERSIZEMOVE")
   GUIRegisterMsg($WM_EXITSIZEMOVE, "_WM_EXITSIZEMOVE")

Func _WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
   _GUICtrlStatusBar_Resize($hBarEx)
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
   _WinAPI_RedrawWindow($hBarEx, "", "", $RDW_UPDATENOW)
   Return $GUI_RUNDEFMSG
EndFunc

Func _WM_ENTERSIZEMOVE($hWnd, $msg, $wParam, $lParam)
   $exstyle = _WinAPI_GetWindowLong( $hWnd, -20)
  _WinAPI_SetWindowLong( $hWnd, -20, 33554432)
   Return $GUI_RUNDEFMSG
EndFunc

Func _WM_EXITSIZEMOVE($hWnd, $msg, $wParam, $lParam)
   _WinAPI_SetWindowLong( $hWnd, -20, $exstyle )
   Return $GUI_RUNDEFMSG
EndFunc
Attention il y a un paramètre de moins dans wm_paint
Les 2 dernières je dois les garder pour éviter le flicker au redimensionnement (sur mon PC)
Avec ça, les controles fonctionnent correctement (checkbox comprise), l'heure s'affiche, etc, et aucun problème particulier d'affichage
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3)

#17

Message par Anthony »

:lol: OK, j'avais bossé sur le code m'ai avait perdu ma connexion sur le forum. :roll:

Voir post 1 pour la mise à jour...

J'ai un problème avec Combo et les styles, là c'est moi qui beug :| j'ai beau chercher, j'ai po trouvé.
Une idée ?
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 22/04/2020, 04h15

#18

Message par Anthony »

Bonjour à tous,

Très grosse mise à jour, veuillez récupérer l'UDF et démo sans quoi je garanti que çà va beuguer :P

walkson, mikell, (voir post #1 ou dans ma signature) j'ai réglé tout les problèmes du moins sur mon PC :mrgreen:
Es-ce que c'est bon sur un bon vieux XP ou windows 7 ?

PS: une astuce pour actualiser mon UDF sans que ce genre de grosse mise à jour oblige à remanier un peu le code :idea:

Sinon je suis là-dessus... çà vient de par là :mrgreen: viewtopic.php?f=4&t=12203&p=104993#p104993

Code : Tout sélectionner

#include <Color.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <GuiTab.au3>
#include <WindowsConstants.au3>
#include <WinAPITheme.au3>

Global $Graphic

$color1 = 0xccaaaa
$color2 = 0x00f0ff

$hGUI = GUICreate("Gradient Demo Sizeable", 640, 480, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))

$hStatus = _GUICtrlStatusBar_Create( $hGUI)
; to allow the setting of Bk Color at least under Windows 10
_WinAPI_SetWindowTheme($hStatus, "", "")

Local $aParts[3] = [175, 260, -1], $SetBarHeight = 20
_GUICtrlStatusBar_SetParts($hStatus, $aParts)
_GUICtrlStatusBar_SetMinHeight( $hStatus, $SetBarHeight)

_GUICtrlStatusBar_SetText($hStatus, "Color : " & $color2, 0,  $SBT_NOBORDERS)
_GUICtrlStatusBar_SetText($hStatus, "AkeReKouKou", 1,  $SBT_NOBORDERS)
_GUICtrlStatusBar_SetText($hStatus, "", 2,  $SBT_NOBORDERS)
_GUICtrlStatusBar_SetBkColor($hStatus, _WinAPI_SwitchColor( $color2))	; _GUICtrlStatusBar_SetBkColor($hStatus, 0xf2e300)

$size = WinGetClientSize( $hGUI)
_GUICtrlCreateGradient($color1, $color2, 0, 0, $size[0], $size[1]-$SetBarHeight)

GUIRegisterMsg($WM_SIZE, "_WM_SIZE")

GUISetState()

While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit
Wend

Func _GUICtrlCreateGradient($nStartColor, $nEndColor, $nX, $nY, $nWidth, $nHeight)
   Local $color1R = _ColorGetRed($nStartColor)
   Local $color1G = _ColorGetGreen($nStartColor)
   Local $color1B = _ColorGetBlue($nStartColor)

   Local $nStepR = (_ColorGetRed($nEndColor) - $color1R) / $nHeight
   Local $nStepG = (_ColorGetGreen($nEndColor) - $color1G) / $nHeight
   Local $nStepB = (_ColorGetBlue($nEndColor) - $color1B) / $nHeight

   GUICtrlDelete( $Graphic)
   $Graphic = GuiCtrlCreateGraphic($nX, $nY, $nWidth, $nHeight, $TCS_BOTTOM)

   For $i = 0 To $nHeight - $nY
	  $sColor = "0x" & StringFormat("%02X%02X%02X", $color1R+$nStepR*$i, $color1G+$nStepG*$i, $color1B+$nStepB*$i)
	  GUICtrlSetGraphic(-1, $GUI_GR_COLOR, $sColor, 0xffffff)
	  GUICtrlSetGraphic(-1, $GUI_GR_MOVE, 0, $i)
	  GUICtrlSetGraphic(-1, $GUI_GR_LINE, $nWidth, $i)
   Next
EndFunc

Func _WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
   $size = WinGetClientSize( $hGUI)
   _GUICtrlCreateGradient($color1, $color2, 0, 0, $size[0], $size[1]-$SetBarHeight)
   _GUICtrlStatusBar_Resize( $hStatus)
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE
Modifié en dernier par Anthony le ven. 24 avr. 2020 13:43, modifié 1 fois.
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
Anthony
Niveau 6
Niveau 6
Messages : 292
Enregistré le : lun. 17 janv. 2011 14:08
Localisation : France
Status : Hors ligne

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 22/04/2020, 04h15

#19

Message par Anthony »

Bonjour à tous,

Voilà premier gros blocage, j'explique tout dans la vidéo.
https://youtu.be/RbWPq5ribzQ

Je met le code actuel

GuiStatusBarEx.au3

Code : Tout sélectionner

#include-once

#include <GuiStatusBar.au3>

#include <ButtonConstants.au3>
#include <Color.au3>
#include <ComboConstants.au3>
#include <Date.au3>
#include <GuiComboBox.au3>
#include <FontConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <WinAPISys.au3>
#include <WinAPITheme.au3>
#include <WindowsConstants.au3>

#include <Array.au3>	; _ArrayDisplay($aArray, "Infos")

; #INDEX# =======================================================================================================================
; Title .........: StatusBarEx
; AutoIt Version : 3.3.14.5
; Date ..........: 24/04/2020, 11h15
; Language ......: English
; Description ...: Functions that assist with StatusBarEx control management.
;                  A status bar Ex is a horizontal window at the bottom of a parent window in which an application can display
;                  various kinds of status information.  The status bar can be divided into parts to display more than one type
;                  of information
; Author(s) .....: Anthony Baillou (Anthony) <https://www.autoitscript.fr/forum/memberlist.php?mode=viewprofile&u=3388>
; ===============================================================================================================================

; #VARIABLES# ===================================================================================================================
Global $exstyle, $StatusBarExGraphic
Global $MultiStatusBarEx[0][6]	; $MultiStatusBarEx[1][6] = [["","","","","",""]]	 ; $hBarEx devient $MultiStatusBarEx ; [["$SethWnd = $hGUI Num","Créé la StatusBar > _GUICtrlStatusBar_Create( $SethWnd)"]]
Global $StatusBarEx_Clock, $ClockStatusBarEx[0][2]
Global $DEBUG_StatusBarEx = '', $DEBUG_StatusBarEx_Sleep = 50	; For DEBUG
; ===============================================================================================================================


; #FUNCTION#=====================================================================================================================
; Author ........: Anthony Baillou
; Modified.......: Anthony Baillou, walkson, mikell
;
; Name ..........: _GUICtrlStatusBarEx_Create
; Description ...: Ajoute une StatusBar dans le Handle d'une GUI
; Syntax ........: _GUICtrlStatusBarEx_Create( $SethWnd, $SetPartsEx, $SetPartsHeightEx, $SetStartColorEx, $SetEndColorEx)
; Parameters ....: $SethWnd             - Handle de la GUI cible.
;                  $SetPartsEx          - [needed] "Pos 1,Pos 2,Pos 3,Pos...".                Eg: "100,50,85,240,75,-1"
;                  $SetPartsHeightEx    - [needed] "Height for parts"                         Eg: 25
;                  $SetStartColorEx     - [optional] "0xRRGGBB".               Default is "". Eg: "0xCCAAFF"
;                  $SetEndColorEx       - [optional] "0xRRGGBB".               Default is "". Eg: "0xFFAACC"
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_Create( $SethWnd="", $SetPartsEx="", $SetPartsHeightEx="", $SetStartColorEx="", $SetEndColorEx="")
   GUISwitch( $SethWnd)

   Local $avar[1][6] = [[$SethWnd, _GUICtrlStatusBar_Create( $SethWnd), $SetPartsHeightEx, "", $SetStartColorEx, $SetEndColorEx]]
   _ArrayAdd( $MultiStatusBarEx, $avar)
;~    _ArrayDisplay( $MultiStatusBarEx, "2D -> " & @ScriptLineNumber)
;~    ConsoleWrite('Line='&@ScriptLineNumber&", $SethWnd="&$MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][0]&", _GUICtrlStatusBar_Create( $SethWnd)="&$MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1]&", Count="&UBound($MultiStatusBarEx, 1)&@CRLF)
   $PartEx = StringSplit( StringReplace( $SetPartsEx, " ", ""), ",")
   Global $hPartsWidthEx[$PartEx[0]], $hPartsPosEx[$PartEx[0]][3]
   For $i = 1 To $PartEx[0]
	  $hPartsWidthEx[$i-1]	= $PartEx[$i]
   Next
   If $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][4] Or $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][5] Then
	  _WinAPI_SetWindowTheme( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1], "", "")
	  Local $size = WinGetClientSize( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][0])
	  _GUICtrlCreateGradient( $SethWnd, $SetStartColorEx, $SetEndColorEx, 0, 0, $size[0], $size[1]-$SetPartsHeightEx)
	  If $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][5] Then _GUICtrlStatusBar_SetBkColor( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1], _WinAPI_SwitchColor( $SetEndColorEx))
   EndIf
   _GUICtrlStatusBar_SetMinHeight( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1], $SetPartsHeightEx)
   _GUICtrlStatusBar_SetParts( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1],-1, $hPartsWidthEx)
   If Not $DEBUG_StatusBarEx = '' Then GUISetState(@SW_SHOW, $SethWnd)
   For $i = 0 To $PartEx[0] -1
	  $hPartsPosEx[$i][0] = GUICtrlCreateButton("This "&$i, -1, -1)			; ID
	  $hPartsPosEx[$i][1] = GUICtrlGetHandle( $hPartsPosEx[$i][0])			; Handle
	  _GUICtrlStatusBar_EmbedControl( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1], $i, $hPartsPosEx[$i][1], 4)
	  Local $var = ControlGetPos( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][0],"",($hPartsPosEx[$i][0]))
	  $hPartsPosEx[$i][2] = $var[0]&","&$var[1]&","&$var[2]&","&$var[3]
	  If Not $DEBUG_StatusBarEx = '' Then Sleep($DEBUG_StatusBarEx_Sleep)
	  GUICtrlDelete($hPartsPosEx[$i][0])
	  If Not $DEBUG_StatusBarEx = '' Then Sleep($DEBUG_StatusBarEx_Sleep)
   Next
   If Not $DEBUG_StatusBarEx = '' Then GUISetState(@SW_HIDE, $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][0])

   GUIRegisterMsg($WM_SIZE, "_WM_SIZE")
   GUIRegisterMsg($WM_PAINT, "WM_PAINT")						; Same ? > GUIRegisterMsg($WM_ACTIVATEAPP, "_WM_ACTIVATEAPP")

;~    ;GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")
;~    ;GUIRegisterMsg($WM_EXITSIZEMOVE, "_WM_EXITSIZEMOVE")
;~    ;GUIRegisterMsg($WM_ACTIVATEAPP, "_WM_ACTIVATEAPP")		; Same ? > GUIRegisterMsg($WM_PAINT, "WM_PAINT")

   Return $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1]	; Old > Return $SethWnd
EndFunc


; #FUNCTION#=====================================================================================================================
; Author ........: Anthony Baillou, walkson
; Modified.......: Anthony Baillou, walkson, mikell
;
; Name ..........: _GUICtrlStatusBarEx_CreateControl
; Description ...:
; Syntax ........: _GUICtrlStatusBarEx_CreateControl( $hWnd, $IndexControl, $Ex_Part, $Ex_Title, $Ex_X, $Ex_Y, $Ex_W, $Ex_H[, $BkColor = ""[, $SetFont = ""]])
; Parameters ....: $hWnd                - Handle de la GUI.
;                  $IndexControl        - Une des valeurs suivantes.
;                                                                                 1 - Button
;                                                                                 2 - Checkbox
;                                                                                 3 - Combobox
;                                                                                 4 - Date
;                                                                                 5 - Input
;                                                                                 6 - Label
;                  $Ex_Part             - N° de section du statusbar.
;                  $Ex_Title            - Texte.
;                  $Ex_X                - X.
;                  $Ex_Y                - Y.
;                  $Ex_W                - Width.
;                  $Ex_H                - Height.
;                  $Ex_Align            - FIXED_LEFT, FIXED_RIGHT, SIZEABLE_LEFT, SIZEABLE_RIGHT ou SIZEABLE_AUTO.
;                  $BkColor             - [optional] RGB. Default is "".
;                  $SetFont             - [optional] "Size|weight|attribute|fontname". Default is "". Eg: "10|$FW_NORMAL|$GUI_FONTNORMAL|Arial"
;                                                                                       Size: eg. 10
;                                                                                       weight:     $FW_DONTCARE = 0
;                                                                                                               $FW_THIN = 100
;                                                                                                               $FW_EXTRALIGHT = 200
;                                                                                                               $FW_LIGHT = 300
;                                                                                                               $FW_NORMAL = 400
;                                                                                                               $FW_MEDIUM = 500
;                                                                                                               $FW_SEMIBOLD = 600
;                                                                                                               $FW_BOLD = 700
;                                                                                                               $FW_EXTRABOLD = 800
;                                                                                                               $FW_HEAVY = 900
;                                                                                       attribute :     $GUI_FONTNORMAL (0) = Normal
;                                                                                                                       $GUI_FONTITALIC (2) = Italic
;                                                                                                                       $GUI_FONTUNDER (4) = Underlined
;                                                                                                                       $GUI_FONTSTRIKE (8) = Strike
;                                                                                       fontname: eg. Arial
;
; Return values .: Control
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_CreateControl( $hWnd="", $IndexControl="", $Ex_Part="", $Ex_Title="", $Ex_X="", $Ex_Y="", $Ex_W="", $Ex_H="", $Ex_Align="", $Style="", $Ex_Style="", $BkColor="", $SetFont="")

		 If $IndexControl < 1 Or $IndexControl > 8 Then Return SetError(1)

		 Local $var							= StringSplit( $hPartsPosEx[$Ex_Part][2], ",")
			   If		$Ex_Align = 'FIXED_LEFT'	Or $Ex_Align = 'SIZEABLE_LEFT'	Then
				  Local $Bar_Ex_X=$var[1]+$Ex_X,				$Bar_Ex_Y=$var[2]+$Ex_Y,	$Bar_Ex_W=$Ex_W,				$Bar_Ex_H=$var[4]+$Ex_H
			   ElseIf	$Ex_Align = 'FIXED_RIGHT'	Or $Ex_Align = 'SIZEABLE_RIGHT'	Then
				  Local $Bar_Ex_X=$var[3]-$Ex_X-$Ex_W+$var[1],	$Bar_Ex_Y=$var[2]+$Ex_Y,	$Bar_Ex_W=$Ex_W,				$Bar_Ex_H=$var[4]+$Ex_H
			   ElseIf	$Ex_Align = 'SIZEABLE_AUTO'									Then
				  Local $Bar_Ex_X=$var[1]+$Ex_X,				$Bar_Ex_Y=$var[2]+$Ex_Y,	$Bar_Ex_W=$var[3]+$Ex_W-$Ex_X,	$Bar_Ex_H=$var[4]+$Ex_H
			   Else
				  Local $Bar_Ex_X=$var[1]+$Ex_X,				$Bar_Ex_Y=$var[2]+$Ex_Y,	$Bar_Ex_W=$var[3]-$Ex_X,		$Bar_Ex_H=$var[4]+$Ex_H
			   EndIf

		 Switch $IndexControl
			   Case 1
					 $id_Ctrl	= GUICtrlCreateButton(		$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 2
					 $id_Ctrl	= GUICtrlCreateCheckbox(	$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 3
					 $id_Ctrl	= GUICtrlCreateCombo(		""		,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
					 $Ex_Split = StringSplit( $Ex_Title,"|")
					 GUICtrlSetData( $id_Ctrl, StringTrimLeft( $Ex_Title, StringLen($Ex_Split[1]&"|")), $Ex_Split[1])
			   Case 4
					 $id_Ctrl	= GUICtrlCreateDate(		$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 5
					 $id_Ctrl	= GUICtrlCreateInput(		$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 6
					 $id_Ctrl	= GUICtrlCreateLabel(		$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 7
					 $id_Ctrl = GUICtrlCreateProgress(					$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
			   Case 8
					 $id_Ctrl	= GUICtrlCreateInput(		$Ex_Title,	$Bar_Ex_X, $Bar_Ex_Y, $Bar_Ex_W, $Bar_Ex_H, BitOR( $Style, $Ex_Style))
					 $Ex_Split = StringSplit( $Ex_Title,"|")
					 GUICtrlSetLimit( GUICtrlCreateUpdown( $id_Ctrl), $Ex_Split[2], $Ex_Split[3])	; $id_Ctrl, 15, 5
					 GUICtrlSetData( $id_Ctrl, $Ex_Split[1])

		 EndSwitch

   If $BkColor <> "" Then GUICtrlSetBkColor( $id_Ctrl, $BkColor)	; GUICtrlSetBkColor($id_Ctrl, 0x00FF00)
   Local $SetFontSplit
   If $SetFont <> "" Then
			$SetFontSplit = StringSplit( $SetFont,"|")
				  If Not IsArray( $SetFontSplit) Then  Return SetError(1)
				  If $SetFontSplit[0]		= 4 Then GUICtrlSetFont( $id_Ctrl, $SetFontSplit[1],$SetFontSplit[2],$SetFontSplit[3],$SetFontSplit[4])
   EndIf

   If $Ex_Part = UBOUND( $hPartsPosEx)-1  Then
	  If $Ex_Align = 'FIXED_LEFT'																	Then	GUICtrlSetResizing( -1, $GUI_DOCKLEFT	+	$GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
	  If $Ex_Align = 'FIXED_RIGHT'																	Then	GUICtrlSetResizing( -1, 					$GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
	  If $Ex_Align = 'SIZEABLE_LEFT' Or $Ex_Align = 'SIZEABLE_RIGHT' Or $Ex_Align = 'SIZEABLE_AUTO'	Then	GUICtrlSetResizing( -1, $GUI_DOCKLEFT	+	$GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)
   Else
	  GUICtrlSetResizing( $id_Ctrl, $GUI_DOCKLEFT	+ $GUI_DOCKSIZE + $GUI_DOCKBOTTOM)
   EndIf

   For $i = 0 To UBound($MultiStatusBarEx, 1)-1
	  If $hWnd = $MultiStatusBarEx[$i][0] Then
		 _WinAPI_SetWindowPos( $MultiStatusBarEx[$i][1], $HWND_BOTTOM, 0, 0, 0, 0, BitOR($SWP_FRAMECHANGED, $SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOACTIVATE))	; Old > _WinAPI_SetWindowPos($hBarEx, $HWND_BOTTOM, 0, 0, 0, 0, BitOR($SWP_FRAMECHANGED, $SWP_NOMOVE, $SWP_NOSIZE, $SWP_NOACTIVATE))
	  EndIf
   Next

   Return $id_Ctrl
EndFunc


; #FUNCTION#=====================================================================================================================
; Author ........: Anthony Baillou
; Modified.......: Anthony Baillou
;
; Name ..........: _GUICtrlStatusBarEx_CreateFunc
; Description ...: Ajoute une fonction à un objet
; Syntax ........: _GUICtrlStatusBarEx_CreateFunc( $id_Ctrl, $IndexControl, $Options)
; Parameters ....: $id_Ctrl             - Handle du contrôle.
;                  $IndexFunc           - Index de la fonction.
;                  $Options             - Options de la fonction.
; Clock..........: $id_Ctrl, 1, [$Options]
;                                      [0] = Affiche une date et/ou une heure.
;                                            S'il y a une partie de date, l'afficher comme une date courte.
;                                            S'il y a une partie d'une heure, l'afficher comme une heure longue.
;                                            Si présent, les deux parties sont affichées.
;                                      [1] = Affiche une date en utilisant la date au format long spécifié dans les paramètres régionaux de votre ordinateur.
;                                      [2] = Affiche une date en utilisant la date au format court spécifié dans les paramètres régionaux de votre ordinateur.
;                                      [3] = Affiche une heure en utilisant l'heure au format spécifié dans les paramètres régionaux de votre ordinateur.
;                                      [4] = Affiche une heure en utilisant le format 24 heures (hh:mm).
;                                      [5] = Affiche une heure en utilisant le format 24 heures (hh:mm:ss).
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_CreateFunc( $id_Ctrl="", $IndexFunc="", $Options="")
		 If $IndexFunc < 1 Or $IndexFunc > 1 Then Return SetError(1)

		 Switch $IndexFunc
			   Case 1
					 Local $avar[1][2] = [[$id_Ctrl, $Options]]
					 _ArrayAdd( $ClockStatusBarEx, $avar)
					 _BarEx_Func_CLOCK()

		 EndSwitch
EndFunc


; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: Anthony Baillou
; ===============================================================================================================================
Func _GUICtrlCreateGradient( $hWnd, $nStartColor, $nEndColor, $nX, $nY, $nWidth, $nHeight)
   _WinAPI_SetWindowTheme( $MultiStatusBarEx[UBound($MultiStatusBarEx, 1)-1][1], "", "")
   For $i = 0 To UBound($MultiStatusBarEx, 1)-1
	  If $hWnd = $MultiStatusBarEx[$i][0] And $MultiStatusBarEx[$i][4] Then
		 Local $color1R = _ColorGetRed($nStartColor)
		 Local $color1G = _ColorGetGreen($nStartColor)
		 Local $color1B = _ColorGetBlue($nStartColor)

		 Local $nStepR = (_ColorGetRed($nEndColor) - $color1R) / $nHeight
		 Local $nStepG = (_ColorGetGreen($nEndColor) - $color1G) / $nHeight
		 Local $nStepB = (_ColorGetBlue($nEndColor) - $color1B) / $nHeight

		 If $MultiStatusBarEx[$i][3] <> "" Then GUICtrlDelete( $MultiStatusBarEx[$i][3])
		 $MultiStatusBarEx[$i][3] = GuiCtrlCreateGraphic($nX, $nY, $nWidth, $nHeight, $TCS_BOTTOM)

;~ 		 Sleep(1000)
;~ 		 GUICtrlSetState( $MultiStatusBarEx[$i][3], $GUI_DISABLE)
;~ 		 GUICtrlSetState( $MultiStatusBarEx[$i][3], $TCS_BOTTOM)

		 For $j = 0 To $nHeight - $nY
			$sColor = "0x" & StringFormat("%02X%02X%02X", $color1R+$nStepR*$j, $color1G+$nStepG*$j, $color1B+$nStepB*$j)
			GUICtrlSetGraphic( $MultiStatusBarEx[$i][3], $GUI_GR_COLOR, $sColor, 0xffffff)
			GUICtrlSetGraphic( $MultiStatusBarEx[$i][3], $GUI_GR_MOVE, 0, $j)
			GUICtrlSetGraphic( $MultiStatusBarEx[$i][3], $GUI_GR_LINE, $nWidth, $j)
		 Next
		 ConsoleWrite(	@ScriptLineNumber& _
						", i$="&$i& _
						", GUI="&$MultiStatusBarEx[$i][0]& _
						", Bar="&$MultiStatusBarEx[$i][1]& _
						", BarHeight="&$MultiStatusBarEx[$i][2]& _
						", ID="&$MultiStatusBarEx[$i][3]& _
						", ColorStart="&$MultiStatusBarEx[$i][4]& _
						", ColorEnd="&$MultiStatusBarEx[$i][5]& _
						", X="&0& _
						", Y="&0& _
						", W="&$nWidth& _
						", H="&$nHeight& @CRLF)
	  EndIf
   Next
EndFunc


; #FUNCTION# ====================================================================================================================
; Author ........: Anthony Baillou
; Modified.......: Anthony Baillou
; ===============================================================================================================================
Func _BarEx_Func_CLOCK()
   For $i = 0 To UBound($ClockStatusBarEx, 1)-1
	  If Not $StatusBarEx_Clock Then
		 $StatusBarEx_Clock = 1
		 AdlibRegister( "_BarEx_Func_CLOCK", 1000)
	  EndIf
	  GUICtrlSetData( $ClockStatusBarEx[$i][0], _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1]))
   Next
EndFunc


; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: mikell, Anthony Baillou
; ===============================================================================================================================
Func _WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
   For $i = 0 To UBound($MultiStatusBarEx, 1)-1
	  If $hWnd = $MultiStatusBarEx[$i][0] Then
		 _GUICtrlStatusBar_Resize( $MultiStatusBarEx[$i][1])
		 Local $size = WinGetClientSize( $MultiStatusBarEx[$i][0])
		 _GUICtrlCreateGradient( $MultiStatusBarEx[$i][0], $MultiStatusBarEx[$i][4], $MultiStatusBarEx[$i][5], 0, 0, $size[0], $size[1]-$MultiStatusBarEx[$i][2])
		 ConsoleWrite(	@ScriptLineNumber& _
						", i$="&$i& _
						", GUI="&$MultiStatusBarEx[$i][0]& _
						", Bar="&$MultiStatusBarEx[$i][1]& _
						", BarHeight="&$MultiStatusBarEx[$i][2]& _
						", ID="&$MultiStatusBarEx[$i][3]& _
						", ColorStart="&$MultiStatusBarEx[$i][4]& _
						", ColorEnd="&$MultiStatusBarEx[$i][5]& _
						", X="&0& _
						", Y="&0& _
						", W="&$size[0]& _
						", H="&$size[1]-$MultiStatusBarEx[$i][2]& @CRLF)
	  EndIf
   Next
   Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE


; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: mikell, Anthony Baillou
; ===============================================================================================================================
Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
;~    GUISwitch( $hWnd)
   For $i = 0 To UBound($MultiStatusBarEx, 1)-1
	  If $hWnd = $MultiStatusBarEx[$i][0] Then
;~ 		 ConsoleWrite( 'Line='&@ScriptLineNumber&', '&$hWnd &"="&$MultiStatusBarEx[$i][0]&'>'&$MultiStatusBarEx[$i][1]&@CRLF)
		 DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hWnd, "ptr", 0, "int", 0)					; Old > DllCall("user32.dll", "int", "InvalidateRect", "hwnd", $hWnd, "ptr", 0, "int", 0)
		 _WinAPI_RedrawWindow( $MultiStatusBarEx[$i][1], "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))	; Old > _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
	  EndIf
   Next
   Return $GUI_RUNDEFMSG
EndFunc







; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: mikell
; ===============================================================================================================================
;~ Func _WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
;~    #forceref $hWnd, $Msg, $lParam
;~    Switch BitAND($wParam, 0xFFF0)
;~ 	  Case 0xF000   ; $SC_SIZE
;~ 		 $exstyle = _WinAPI_GetWindowLong( $hWnd, -20)
;~ 		 _WinAPI_SetWindowLong( $hWnd, -20, 33554432)
;~    EndSwitch
;~ EndFunc

; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: mikell
; ===============================================================================================================================
;~ Func _WM_EXITSIZEMOVE($hWnd, $msg, $wParam, $lParam)
;~    _WinAPI_SetWindowLong( $hWnd, -20, $exstyle )
;~    Return $GUI_RUNDEFMSG
;~ EndFunc

; #FUNCTION# ====================================================================================================================
; Author ........: mikell
; Modified.......: mikell
; ===============================================================================================================================
;~ Func _WM_ACTIVATEAPP($hWnd, $msg, $wParam, $lParam)
;~    If $wParam = 1 Then _WinAPI_RedrawWindow($hBarEx, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
;~    Return $GUI_RUNDEFMSG
;~ EndFunc


La DEMO actuelle

Code : Tout sélectionner

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.5
 Author:         Anthony Baillou
 Modified:       Anthony Baillou, walkson, mikell
 Date:           24/04/2020, 11h15

 Script Function:
	<GuiStatusBarEx.au3>	(UDF)

#ce ----------------------------------------------------------------------------

#include <GuiStatusBarEx.au3> ; With include <GuiStatusBar.au3>

Local $var1
For $i = 1 To 1000
   If $i = 500 Then
	  $var1 &= 'Combo|'
   Else
	  $var1 &= $i&'|'
   EndIf
Next

; == $hGUI_1 ===================================================================
Local $hGUI_1			= GUICreate("<GuiStatusBarEx.au3> (UDF DEMO Parent $hGUI_1)", 1024, 285, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))

Local $WinGetPos1, $Pos1
Local $nStartColor_1=0xCCAAAA, $nEndColor_1=0x00f0ff

$hGUI_1_StatusBarEx		= _GUICtrlStatusBarEx_Create( $hGUI_1, "100,50,100,85,240,70,75,-1", 60, $nStartColor_1, $nEndColor_1)	; $hGUI_1_StatusBarEx=_GUICtrlStatusBarEx_Create( $hGUI_1, "75,90,100,85,-1", 60)  > (Parent Handle 1, "Width,of,Parts,..,-1", StatusBarEx 1 Height, Start color gradient, End color gradient)

$hGUI_1_Label_1			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "1", 0)					; Set Standard StatusBar, $Label1
$hGUI_1_Label_2			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "2", 1)					; Set Standard StatusBar, $Label2
$hGUI_1_Label_3			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "3", 2)					; Set Standard StatusBar, $Label3
$hGUI_1_Label_4			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "4", 3)					; Set Standard StatusBar, $Label4
$hGUI_1_Label_5			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "5", 4)					; Set Standard StatusBar, $Label5
$hGUI_1_Label_6			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "6", 5)					; Set Standard StatusBar, $Label6
$hGUI_1_Label_7			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "7", 6)					; Set Standard StatusBar, $Label7
$hGUI_1_Label_8			= _GUICtrlStatusBar_SetText($hGUI_1_StatusBarEx, "8", 7)					; Set Standard StatusBar, $Label8

$hGUI_1_Button_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   1, "1", "Get"          , 12,  0,   0,   0, ""             , ""                            , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Checkbox_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   2, "2", "Checkbox"     , 12,  0,   0,   0, "SIZEABLE_AUTO", ""                            , "", 0x00FF50,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Combo_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   3, "3", "Combo|"&$var1 , 12,  3,   0,   0, ""             , $CBS_DROPDOWN+$WS_VSCROLL     , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Input_UpDown_1	= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   8, "3", "5|10|0"       , 12, 30,   0, -33, ""             , ""                            , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Date_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   4, "4", "Date"         , 12,  0,   0,   0, "SIZEABLE_AUTO", ""                            , "", 0xFFFFFF,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Input_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   5, "5", "Input"        , 12,  0,   0,   0, "SIZEABLE_AUTO", ""                            , "", 0xFF9876,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Progress_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   7, "6", "Progress"     , 12,  0,   0,   0, "SIZEABLE_AUTO", ""                            , "", 0xFFFFFF,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Button_2		= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   1, "7", "Go"           , 12,  0,  25,   0, "FIXED_LEFT"   , ""                            , "", 0xAAFFAA,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_1_Label_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   6, "7", "Label1"       , 42,  0, 170,   0, "SIZEABLE_LEFT", $SS_CENTER+$SS_CENTERIMAGE    , "", 0xFFAA00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier New")
$hGUI_1_Label_2			= _GUICtrlStatusBarEx_CreateControl( $hGUI_1,   6, "7", "Label2"       ,  0,  0,  65,   0, "FIXED_RIGHT"  , $SS_CENTER                    , "", 0xAAAAAA,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")

_GUICtrlStatusBarEx_CreateFunc( $hGUI_1_Label_1, 1, 0)	; Clock Option 0

$hGUI_1_Button1			= GUICtrlCreateButton("Show GUI Child with $hGUI_2_StatusBarEx", 100, 80, 800, 50)
GUICtrlSetResizing( -1, $GUI_DOCKLEFT + $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKRIGHT)

; == $hGUI_2 ===================================================================
Local $hGUI_2			= GUICreate("<GuiStatusBarEx.au3> (UDF DEMO Child $hGUI_2)", 900, 150, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))

Local $WinGetPos2, $Pos2
Local $nStartColor_2=0x00f0ff, $nEndColor_2=0x00aaaa

$hGUI_2_StatusBarEx		= _GUICtrlStatusBarEx_Create( $hGUI_2, "150, 125, 100, 85, 100, -1", 27, $nStartColor_2, $nEndColor_2)	; $hGUI_2_StatusBarEx=_GUICtrlStatusBarEx_Create( $hGUI_2, "150,125,100,85,100,-1", 60)  > (Parent Handle 2, "Width,of,Parts,..,-1", StatusBarEx 2 Height, Start color gradient, End color gradient)

$hGUI_2_Button_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   1, "1", "Get"         ,  0,  0,   0,  0, ""             , ""                            , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Checkbox_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   2, "2", "Checkbox"    ,  0,  0,   0,  0, "SIZEABLE_AUTO", ""                            , "", 0x00FFF0,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Combo_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   3, "3", "Combo|"&$var1,  0,  0,   0, 10, "SIZEABLE_AUTO", $CBS_DROPDOWN+$WS_VSCROLL     , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Input_UpDown_1	= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   8, "4", "5|10|0"      ,  0,  0,   0,  0, ""             , ""                            , "", 0xFFFF00,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Button_2		= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   1, "5", "Start"       ,  0,  0,  50,  0, "FIXED_LEFT"   , ""                            , "", 0xAAFFAA,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Progress_1		= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   7, "5", ""            , 57,  0,  70,  0, "SIZEABLE_LEFT", ""                            , "", 0xFFFFFF,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Label_1			= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   6, "5", "0 %"         , 57,  0,  70,  0, "SIZEABLE_LEFT", $SS_CENTER+$SS_CENTERIMAGE    , "", $GUI_BKCOLOR_TRANSPARENT,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")
$hGUI_2_Label_2			= _GUICtrlStatusBarEx_CreateControl( $hGUI_2,   6, "5", "Label2"      ,  0,  0, 185,  0, "FIXED_RIGHT"  , $SS_CENTER+$SS_CENTERIMAGE    , "", 0xAAAAAA,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier new")

_GUICtrlStatusBarEx_CreateFunc( $hGUI_2_Label_2, 1, 3)	; Clock Option 3

; == Show Parent GUI's =========================================================
GUISetState(@SW_SHOW, $hGUI_1)


While 1
   $GUIGetMsg	= GUIGetMsg(1)
   $msg			= $GUIGetMsg[0]

   Switch $msg
	  Case $GUI_EVENT_CLOSE
		 If $GUIGetMsg[1] = $hGUI_1 Then		; From $hGUI_1
			Exit
		 ElseIf $GUIGetMsg[1] = $hGUI_2 Then	; From $hGUI_2
			GUISetState(@SW_HIDE, $hGUI_2)
		 EndIf

; == $hGUI_1 ===================================================================
	  Case $hGUI_1_Button1						; From $hGUI_1
		 GUISetState(@SW_SHOW, $hGUI_2)

	  Case $hGUI_1_Button_1						; From $hGUI_1_StatusBarEx
		 MsgBox("", "Return text of the Button 1", "$hGUI_1_Button_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_1_Button_1), 5)

	  Case $hGUI_1_Checkbox_1					; From $hGUI_1_StatusBarEx
		 If GUICtrlRead($hGUI_1_Checkbox_1) = $GUI_CHECKED Then
			GUICtrlSetData($hGUI_1_Checkbox_1, 'Checked')
		 Else
			GUICtrlSetData($hGUI_1_Checkbox_1, 'Unchecked')
		 EndIf

	  Case $hGUI_1_Combo_1						; From $hGUI_1_StatusBarEx
		 MsgBox( "", "Return text of the Combo1", "$hGUI_1_Combo_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_1_Combo_1), 5)

	  Case $hGUI_1_Input_UpDown_1				; From $hGUI_1_StatusBarEx
		 MsgBox( "", "Return text of the Input With UpDown", "$hGUI_1_Input_UpDown_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_1_Input_UpDown_1), 5)

	  Case $hGUI_1_Date_1						; From $hGUI_1_StatusBarEx
		 MsgBox("", "Return text of the Input", "$Combo1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_1_Date_1), 5)

	  Case $hGUI_1_Button_2						; From $hGUI_1_StatusBarEx
		 For $i = 100 To 1 Step -1
			GUICtrlSetData( $hGUI_1_Progress_1, $i)
			GUICtrlSetData( $hGUI_1_Input_1, $i & " %")
			Sleep(10)
		 Next
		 GUICtrlSetData( $hGUI_1_Progress_1, 0)
		 GUICtrlSetData( $hGUI_1_Input_1, "Done")

; == $hGUI_2 ===================================================================
	  Case $hGUI_2_Button_1						; From $hGUI_2_StatusBarEx
		 MsgBox("", "Return text of the Button 1", "$hGUI_2_Button_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_2_Button_1), 5)

	  Case $hGUI_2_Checkbox_1					; From $hGUI_2_StatusBarEx
		 If GUICtrlRead($hGUI_2_Checkbox_1) = $GUI_CHECKED Then
			GUICtrlSetData($hGUI_2_Checkbox_1, 'Checked')
		 Else
			GUICtrlSetData($hGUI_2_Checkbox_1, 'Unchecked')
		 EndIf

	  Case $hGUI_2_Combo_1						; From $hGUI_2_StatusBarEx
		 MsgBox( "", "Return text of the Combo1", "$hGUI_2_Combo_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_2_Combo_1), 5)

	  Case $hGUI_2_Input_UpDown_1				; From $hGUI_2_StatusBarEx
		 MsgBox( "", "Return text of the Input With UpDown", "$hGUI_2_Input_UpDown_1 return: " & @CRLF&@CRLF & GUICtrlRead( $hGUI_2_Input_UpDown_1), 5)

	  Case $hGUI_2_Button_2						; From $hGUI_2_StatusBarEx
		 For $i = 0 To 100 Step 1
			GUICtrlSetData( $hGUI_2_Progress_1, $i)
			GUICtrlSetData( $hGUI_2_Label_1, $i & " %")
			Sleep(50)
		 Next
		 GUICtrlSetData( $hGUI_2_Progress_1, 0)
		 GUICtrlSetData( $hGUI_2_Label_1, "0 %")

   EndSwitch

   $WinGetPos1	= WinGetPos($hGUI_1)			; From $hGUI_1_StatusBarEx
   If $Pos1 <>	$WinGetPos1[0]&","&$WinGetPos1[1]&","&$WinGetPos1[2]&","&$WinGetPos1[3] Then
	  $Pos1 =	$WinGetPos1[0]&","&$WinGetPos1[1]&","&$WinGetPos1[2]&","&$WinGetPos1[3]
	  _GUICtrlStatusBar_SetText( $hGUI_1_StatusBarEx, $Pos1, 0)
   EndIf

   $WinGetPos2	= WinGetPos($hGUI_2)			; From $hGUI_2_StatusBarEx
   If $Pos2 <>	$WinGetPos2[0]&","&$WinGetPos2[1]&","&$WinGetPos2[2]&","&$WinGetPos2[3] Then
	  $Pos2 =	$WinGetPos2[0]&","&$WinGetPos2[1]&","&$WinGetPos2[2]&","&$WinGetPos2[3]
	  _GUICtrlStatusBar_SetText( $hGUI_2_StatusBarEx, $Pos2, 0)
   EndIf
WEnd
Fichiers joints
GuiStatusBarEx - UDF DEMO.au3
(10.55 Kio) Téléchargé 1092 fois
GuiStatusBarEx.au3
(22.54 Kio) Téléchargé 1105 fois
J'ai été diagnostiqué pour trouble de la concentration, soyez indulgent
Merci à tous pour votre aide.

Mon UDF GuiStatusBar facile
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 22/04/2020, 04h15

#20

Message par mikell »

Raahhh ta video sur youtube elle me fend le coeur :mrgreen:

Donc tu as 2 soucis
1) tu perds le fond de la gui1 au redimensionnement après avoir refermé la gui2
La solution semble évidente

   Switch $msg
     Case $GUI_EVENT_CLOSE
       If $GUIGetMsg[1] = $hGUI_1 Then    ; From $hGUI_1
         Exit
       ElseIf $GUIGetMsg[1] = $hGUI_2 Then   ; From $hGUI_2
         GUISetState(@SW_HIDE, $hGUI_2)
         GUISwitch($hGUI_1)  ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       EndIf
MAIS il reste un autre souci, quand on redimensionne la gui1 alors que la 2 est ouverte... :!:

2) le clignotement avec l'heure, et ça je te cache pas que c'est nettement plus emmerdant délicat parce que ça veut dire que le WM_PAINT rame (il est envoyé à chaque update du label) le pauvre
Il y a plusieurs solutions. La plus simple que j'ai trouvée (elle est pas parfaite mais elle devrait suffire) c'est juste de lui donner moins de boulot

Func WM_PAINT($hWnd, $msg, $wParam, $lParam)
   For $i = 0 To UBound($MultiStatusBarEx, 1)-1
     If $hWnd = $MultiStatusBarEx[$i][0] Then
;~        ConsoleWrite( 'Line='&@ScriptLineNumber&', '&$hWnd &"="&$MultiStatusBarEx[$i][0]&'>'&$MultiStatusBarEx[$i][1]&@CRLF)
      $tRECT = _WinAPI_GetWindowRect($MultiStatusBarEx[$i][1])
       _WinAPI_RedrawWindow( $MultiStatusBarEx[$i][1], $tRECT, "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
     EndIf
   Next
   Return $GUI_RUNDEFMSG
EndFunc

Heu maintenant je me permets une chtite remarque en passant, parce que je reconnais les symptomes. On écrit une UDF, on se prend au jeu, on se laisse entrainer par l'enthousiasme, et on finit par la gaver de trucs certes bien sympathiques mais qui ne devraient pas y être, comme le gradient de couleur pour la gui (et si je préfère une gui avec un fond uni ou avec une image ?) qui n'a rien à faire dans la fonction de création de la statusbar
Ton UDF ça doit être la statusbar, les controles épi voilà. Après la gui c'est à l'utilisateur de la customiser s'il le souhaite
Mais tu as encore du boulot, faut mettre tout ça bien propre, clair et facile à utiliser, avec gestion d'erreur fignolée, faire des crash-tests etc
Bon courage, mais au stade actuel tu en vois le bout :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre