Page 3 sur 4

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : ven. 01 mai 2020 18:29
par Anthony
mikell a écrit : ven. 01 mai 2020 17:58 Ce qui marche très bien chez moi (même avec le AdlibRegister) c'est ça
Reste à le tester avec w7 et avec les OS ultramodernes Image

$new_heure = _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1])
ControlSetText($MultiStatusBarEx[$i][0], "", $ClockStatusBarEx[$i][0], $new_heure)
çà me plait bien :mrgreen:

Grosse mise à jour voir Post #1, j'ai tout intégré et mis à jour la fonction _GUICtrlCreateGradient, es-ce aussi bien que la fonction de walkson :?:

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : ven. 01 mai 2020 18:58
par mikell
Tu devrais pas te précipiter comme ça, et attendre les tests :!:
Par exemple, avec la nouvelle fonction _GUICtrlCreateGradient, j'ai le gros bouton de la gui1 qui disparait si on déplace ou redimensionne la gui
à part ça ya plus rien qui flicke

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : ven. 01 mai 2020 19:07
par Anthony
mikell a écrit : ven. 01 mai 2020 18:58 Tu devrais pas te précipiter comme ça, et attendre les tests :!:
Par exemple, avec la nouvelle fonction _GUICtrlCreateGradient, j'ai le gros bouton de la gui1 qui disparait si on déplace ou redimensionne la gui
à part ça ya plus rien qui flicke
:| oups, je pensais que c'était bon... désolé, alors j'attend vos retours :wink:

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 14h45

Posté : ven. 01 mai 2020 22:40
par JoeBar
Anthony a écrit : ven. 01 mai 2020 14:39
JoeBar a écrit : jeu. 30 avr. 2020 10:11 Salut, il est sympa ton UDF, mais à chaque actualisation de l'heure, ça flicke ...
Il est très probable que votre OS soit Win 7 :?:
Cette mise à jour règle t'elle le problème ? (voir post #1)

Mise à jour, suppression de l'ancienne version (AdlibRegister) de l'heure et mise à jour avec (_Timer_SetTimer), merci walkson :mrgreen:
Non je suis sur W10, mais avec ton patch, ça a disparu :)

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : ven. 01 mai 2020 23:18
par Anthony
JoeBar a écrit : ven. 01 mai 2020 22:40
Anthony a écrit : ven. 01 mai 2020 14:39

Il est très probable que votre OS soit Win 7 :?:
Cette mise à jour règle t'elle le problème ? (voir post #1)

Mise à jour, suppression de l'ancienne version (AdlibRegister) de l'heure et mise à jour avec (_Timer_SetTimer), merci walkson :mrgreen:
Non je suis sur W10, mais avec ton patch, ça a disparu :)
Moi aussi Win X, es-ce que vous avez (juste pour info) un clignotement ou un écrasement de la date en modifiant dans la démo:

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,"",$GUI_BKCOLOR_TRANSPARENT,"8.5|$FW_NORMAL|$GUI_FONTNORMAL|Courier New|0x0000FF")



Et dans l'UDF:

Code : Tout sélectionner

;	  GUICtrlSetData( $ClockStatusBarEx[$i][0], _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1]))
 	  $new_heure = _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1])
 	  ControlSetText($MultiStatusBarEx[$i][0], "", $ClockStatusBarEx[$i][0], $new_heure)
ControlSetText.jpg
ControlSetText.jpg (4.32 Kio) Vu 19603 fois



ou comme çà

Code : Tout sélectionner

	  GUICtrlSetData( $ClockStatusBarEx[$i][0], _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1]))
; 	  $new_heure = _DateTimeFormat( _NowCalc(), $ClockStatusBarEx[$i][1])
; 	  ControlSetText($MultiStatusBarEx[$i][0], "", $ClockStatusBarEx[$i][0], $new_heure)
GUICtrlSetData.jpg
GUICtrlSetData.jpg (4.27 Kio) Vu 19603 fois

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : sam. 02 mai 2020 15:30
par walkson
Bonjour,
Je viens de tester l'UDF et tout fonctionne normalement (pas de scintillement ou autre)
Par contre, il faudrait préciser que tous les contrôles sur la GUI doivent se situer sous les _GUICtrlStatusBarEx_CreateControl() et autres, sinon ils ne sont pas accessibles !
J'ai vu qu'il y a de nouvelles fonctions mais je ne suis pas certain de leur utilité... Proposition:
; #FUNCTION#=====================================================================================================================
; Author ........: Anthony Baillou
; Modified.......: Anthony Baillou
;
; Name ..........: _GUICtrlStatusBarEx_CreateFunc
; Description ...: Ajoute une fonction à un objet
; Syntax ........: _GUICtrlStatusBarEx_CreateFunc( $id_Ctrl, $IndexControl, $iState)
; Parameters ....: $id_Ctrl             - Handle du contrôle.
;                  $IndexFunc           - Index de la fonction.1 = clock, 2 = progressbar
;                  $iState             - Options de la fonction.
; Clock..........: $id_Ctrl, 1, [$iState]
;                                      [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).
; ProgressBar.........: $id_Ctrl, 2, [$iState]
;                                      $iState = $PBM_NORMAL - normal state (green)
;                                      $iState = $PBM_ERROR - error state (red)
;                                      $iState = $PBM_PAUSED - paused style (yellow)
; ===============================================================================================================================
Func _GUICtrlStatusBarEx_CreateFunc( $id_Ctrl="", $IndexFunc="", $iState="")
   If $IndexFunc < 1 Or $IndexFunc > 1 Then Return SetError(1)
   Switch $IndexFunc
     Case 1
       Local $avar[1][2] = [[$id_Ctrl, $iState]]
       _ArrayAdd( $ClockStatusBarEx, $avar)
       If UBound($ClockStatusBarEx, 1) = 1 Then
          _Timer_SetTimer( $MultiStatusBarEx[0][0], 1000, "_UpdateStatusBarClockEx")
          OnAutoItExitRegister ( "_GUICtrlStatusBarEx_Exit" )
       EndIf
      Case 2
         GUICtrlSendMsg($id_Ctrl, $PBM_SETSTATE, $iState, 0)
   EndSwitch
EndFunc
Au moins $IndexFunc aura une utilité :P
Par contre les entêtes des fonctions ne sont pas à jour, voir fausse comme
$SetBackGroundEx - [optional] "StartColor|EndColor|StatusBarColor". Default is "". dans _GUICtrlStatusBarEx_Create()
si $SetBackGroundEx n'est pas renseigné, il y a bug !!!
N'oubliez pas que ceux qui utiliseront votre UDF se baseront sur les entêtes ! (et peut être vous même...)
Il manque sérieusement un bonne gestion d'erreurs comme
Func _GUICtrlStatusBarEx_Create( $hWnd, $SetPartsEx, $SetPartsHeightEx, $SetBackGroundEx)
   If Not IsHWnd($hWnd) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
   If $SetPartsEx = "" or $SetPartsHeightEx = "" Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
   $SetBackGroundEx = StringSplit( $SetBackGroundEx, "|")
   If Not IsArray($SetBackGroundEx) Or $SetBackGroundEx[0] < 3 Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
etc ...............
J'ai envoyé un mail au Premier Ministre pour maintenir le confinement jusqu'à la fin juin pour que vous puissiez finir votre UDF :lol:
Une p'tit pensée pour Mikell viewtopic.php?f=3&t=13392&p=93696&hilit=mikell#p93696

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 14:17
par Anthony
OK je suis dessus, dis-moi walkson,
les variables sont à l'axe:
X=0
Y=0
Le problème que je rencontre est que 0 est considéré comme

Code : Tout sélectionner

If $nX = "" Or $nY = "" Or $nWidth = "" Or $nHeight = "" Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
Idem pour:

Code : Tout sélectionner

If Not $nX Or Not $nY Or Not $nWidth Or Not $nHeight Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
:roll:
PS: Edouard Philippe t'as entendu tu as le bras long, on est bon et pour l'instant jusqu'au 24 juillet 2020 :lol:

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 16:34
par walkson
Je reconnais que je me mélange un peu les pinceaux entre une variable nulle et une variable vide.
L'idéal est de tester
Global $nb = 1

essai(0,0,0,0);1
essai("","","","");2
essai("0","0","0","0");3
$A = Number(0)
essai($A,$A,$A,$A);4
$A = Number("0")
essai($A,$A,$A,$A);5
$A = "a"
essai($A,$A,$A,$A);6
$A = "1"
essai($A,$A,$A,$A);7
Local $B
essai($B,$B,$B,$B);8
Func essai($nX,$nY,$nWidth,$nHeight)
   ConsoleWrite("Test " & $nb & @TAB & VarGetType($nX) & @CRLF)
   If $nX = "" Or $nY = "" Or $nWidth = "" Or $nHeight = "" Then ConsoleWrite("Test " & $nb & @TAB & @ScriptLineNumber & @CRLF)
   If $nX = 0 Or $nY = 0 Or $nWidth = 0 Or $nHeight = 0 Then ConsoleWrite("Test " & $nb & @TAB & @ScriptLineNumber & @CRLF)
   If $nX == 0 Or $nY == 0 Or $nWidth == 0 Or $nHeight == 0 Then ConsoleWrite("Test " & $nb & @TAB & @ScriptLineNumber & @CRLF)
   If Not $nX Or Not $nY Or Not $nWidth Or Not $nHeight Then ConsoleWrite("Test " & $nb & @TAB & @ScriptLineNumber & @CRLF)
   If Not Number($nX) Or Not Number($nY) Or Not Number($nWidth) Or Not Number($nHeight) Then  ConsoleWrite("Test " & $nb & @TAB & @ScriptLineNumber & @CRLF)
   ConsoleWrite("=============================" & @CRLF)
   $nb += 1
EndFunc
avec $A = "" VarGetType($A) renvoie String et avec $A = 0 VarGetType($A) renvoie Int32. Ce peut être un moyen de différencier la variable mais Michel (ou d'autres) aura de meilleurs idées que moi
Si c'est pour une fonction et que le 0 est accepté dans un des critères, le plus simple est Func essai($nX = 0,$nY = 0) mais là, je suppute....

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 17:08
par mikell
Non Vincent tu as raison
Si la fonction attend une valeur numérique, il faut lui fournir une valeur numérique. Et des coordonnées sont des valeurs numériques
Le type des variables doit être respecté épi voilà :mrgreen:
Le problème c'est que souvent on fait du stayle en laissant AutoIt faire le boulot d'interprétation, ça peut marcher mais ce n'est pas de bonne pratique
"If not $x " c'est pour du booléen (true/false ou 1/0) , et pour du numérique, c'est "If $x = 0 "

$x = "test"
Msgbox(0,"", Number($x) )  ; retour 0 , normal
Msgbox(0,"", not $x )  ; retour false ? et pourquoi c'est pas true puisque ça vaut 0 ??
Msgbox(0,"", Number(not $x) )

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 18:44
par Anthony
Bon bah je sèche, $iState = 0 et c'est un nombre :P

Code : Tout sélectionner

_GUICtrlStatusBarEx_CreateFunc( $hGUI_1_Label_1, 1, 0)
Func _GUICtrlStatusBarEx_CreateFunc( $id_Ctrl, $IndexFunc, $iState)
	If Not Number($id_Ctrl) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))	; Ligne 293
	If Not Number($iState) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))	; Ligne 294
Error.jpg
Error.jpg (3.73 Kio) Vu 19536 fois

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 18:54
par mikell
Bin oui, quoi, c'est normal...
If Not Number($iState) Then Return SetError
c'est comme si tu mettais
If True Then Return SetError
et Autoit, pas contrariant, il fait ce que tu lui demandes..

$iState = 0
Msgbox(0,"", Not Number($iState) )
If Not Number($iState) Then Msgbox(0,"", "et voilà")

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:03
par Anthony
çà fume, où sont les clef... dans ta main cheri :shock:
Donc là on est bon :roll:

Code : Tout sélectionner

If Not Number($id_Ctrl>= 0) Or Not Number($iState >= 0) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:06
par mikell
Mais aaaaattends.... par hasard tu ne chercherais pas à vérifier si $iState est un nombre ou pas ?
Si c'est le cas, il faut utiliser IsNumber
Image

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:10
par Anthony
Si, si merci j'allais oublier Image :lol:

Code : Tout sélectionner

If IsNumber($id_Ctrl>= 0) Or IsNumber($iState >= 0) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:14
par mikell
Tin ! mélange pas tout
If Not IsNumber($id_Ctrl) Or Not IsNumber($iState) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:22
par Anthony
:oops: Merci, je vais me faire une pause café 8)

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:26
par jchd
D'un autre côté et quand on sait ce qu'on fait on peut laisser agir la plupart des conversion natives d'AutoIt qui sont plus véloces que toute périphrase en code.

Code : Tout sélectionner

Local $a = [0, 0.0, "", "0", "0.0", Ptr(0), False, Null, Default]

ConsoleWrite("Type" & @TAB & "Value" & @TAB & @TAB & "0" & @TAB & "0.0" & @TAB & '""' & @TAB & '"0"' & @TAB & '"0.0"' & @TAB & "Ptr(0)" & @TAB & "False" & @TAB & "Null" & @TAB & "Default" & @LF)
For $i = 0 To UBound($a) - 1
	ConsoleWrite(VarGetType($a[$i]) & @TAB & StringFormat("%-8s", $a[$i]))
	For $j = 0 To $i
		ConsoleWrite(@TAB & ($a[$i] = $a[$j]))
	Next
	ConsoleWrite(@LF)
Next

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 19:48
par walkson
petite remarque en passant
If Not Number($id_Ctrl) Then Return SetError(1,0,MsgBox(16,"Error",@ScriptLineNumber))
Dans le cas présent, on ne contrôle pas un nombre mais un Handle. C'est pas pareil :mrgreen:
Faut visiter tous les "Is...."

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 03/05/2020, 19h45

Posté : dim. 03 mai 2020 19:55
par Anthony
J'ai mis à jour, le post #1 (03/05/2020, 19h45)
Un Handle ou un ID ?
Je deviens fou :lol:

Code : Tout sélectionner

$id_Ctrl=13
$id_Ctrl=25
je ne touche rien pour l'instant, je comprend plus :cry:

Re: [UDF] GuiStatusBar facile avec plusieurs GUI (GuiStatusBarEx.au3) update 01/05/2020, 18h30

Posté : dim. 03 mai 2020 21:32
par mikell
jchd a écrit : dim. 03 mai 2020 19:26quand on sait ce qu'on fait on peut laisser agir la plupart des conversion natives d'AutoIt qui sont plus véloces que toute périphrase en code
Quand on sait ce qu'on fait, oui :mrgreen:
Parce que sinon, au mieux on n'apprend même pas les bases et au pire on n'écrit que des conneries, et si en plus on pratique ce genre de frivolité dans le cadre d'une gestion d'erreur... Image