Aide et conseils concernant AutoIt et ses outils.
jpascal
Niveau 6
Messages : 239 Enregistré le : jeu. 16 oct. 2008 16:21
Status :
Hors ligne
#1
Message
par jpascal » lun. 25 nov. 2019 11:50
Bonjour,
Voici le code issu de l'aide d'AutoIt :
#include <GUIConstantsEx.au3> #include <GuiStatusBar.au3> #include <WindowsConstants.au3> Global $g_idMemo Example
( ) Func Example
( ) Local $hGUI , $hStatus Local $aParts [ 3 ] = [ 75 , 150 , - 1 ] ; Create GUI $hGUI = GUICreate ( "StatusBar Set Parts" , 400 , 300 ) $hStatus = _GUICtrlStatusBar_Create ( $hGUI ) ; Create memo control $g_idMemo = GUICtrlCreateEdit ( "" , 2 , 2 , 396 , 274 , $WS_VSCROLL ) GUICtrlSetFont ( $g_idMemo , 9 , 400 , 0 , "Courier New" ) GUISetState ( @SW_SHOW ) ; Set parts _GUICtrlStatusBar_SetParts ( $hStatus , $aParts ) ;Set Text/ Get Width Local $iParts = _GUICtrlStatusBar_GetCount ( $hStatus ) For $iI = 1 To $iParts _GUICtrlStatusBar_SetText ( $hStatus , "Text " & $iI , $iI - 1 ) MemoWrite
( "Part " & $iI & " width .: " & _GUICtrlStatusBar_GetWidth ( $hStatus , $iI - 1 ) ) Next ; Loop until the user exits. Do Until GUIGetMsg ( ) = $GUI_EVENT_CLOSE GUIDelete ( ) EndFunc ;==>Example ; Write message to memo Func MemoWrite
( $sMessage = "" ) GUICtrlSetData ( $g_idMemo , $sMessage & @CRLF , 1 ) EndFunc ;==>MemoWrite
Au lieu d'obtenir une barre de status avec trois parties de la taille 75, 150 et le reste, les tailles obtenues sont respectivement 75, 73 et 248.
Avez-vous le même problème ?
Est-ce dû à la version d'AutoIt que j'utilise ?
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1
rgx
Niveau 4
Messages : 62 Enregistré le : sam. 16 nov. 2019 17:53
Status :
Hors ligne
#2
Message
par rgx » lun. 25 nov. 2019 17:53
Bonjour,
J'obtiens la même chose (aussi faux)
D'ailleurs c'est l'exemple donné dans la doc (fr et us) pour _GUICtrlStatusBar_Create
(AutoIt 3.3.14.5)
mdanielm
Membre émérite
Messages : 254 Enregistré le : mer. 11 déc. 2013 19:48
Status :
Hors ligne
#3
Message
par mdanielm » lun. 25 nov. 2019 19:05
Bonsoir,
Je confirme que des exemples de la doc EN et donc FR sont obscurs.
J'en ai corrigé plusieurs, si de votre coté vous arrivez à mettre au point celui là, passez-moi le, je le mettrais dans la doc FR.
Cordialement.
rgx
Niveau 4
Messages : 62 Enregistré le : sam. 16 nov. 2019 17:53
Status :
Hors ligne
#4
Message
par rgx » mar. 26 nov. 2019 09:59
Bonjour,
J'ai trouvé ça
https://www.autoitscript.com/trac/autoit/ticket/3518
"
_GUICtrlStatusBar_SetParts() - cannot set parts from $aPartWidth "
Marqué comme
Fixed , donc devrait être déjà corrigé.
Je ne vois pas comme l'appliquer ?
jpascal
Niveau 6
Messages : 239 Enregistré le : jeu. 16 oct. 2008 16:21
Status :
Hors ligne
#5
Message
par jpascal » jeu. 28 nov. 2019 15:38
En effet, je n'ai pas le code correspondant dans le fichier GuiStatusBar.au3 :
; #FUNCTION# ==================================================================================================================== ; Author ........: Gary Frost (gafrost) ; Modified.......: ; =============================================================================================================================== Func _GUICtrlStatusBar_SetParts ( $hWnd , $vPartEdge = - 1 , $vPartWidth = 25 ) If IsArray ( $vPartEdge ) And IsArray ( $vPartWidth ) Then Return False ;== start sizing parts Local $tParts , $iParts If IsArray ( $vPartEdge ) Then ; adding array of parts (contains widths) $vPartEdge [ UBound ( $vPartEdge ) - 1 ] = - 1 $iParts = UBound ( $vPartEdge ) $tParts = DllStructCreate ( "int[" & $iParts & "]" ) For $x = 0 To $iParts - 2 DllStructSetData ( $tParts , 1 , $vPartEdge [ $x ] , $x + 1 ) Next DllStructSetData ( $tParts , 1 , - 1 , $iParts ) Else If $vPartEdge < - 1 Then Return False If IsArray ( $vPartWidth ) Then ; adding array of part widths (make parts an array) $iParts = UBound ( $vPartWidth ) $tParts = DllStructCreate ( "int[" & $iParts & "]" ) Local $iPartRightEdge = 0 For $x = 0 To $iParts - 2 $iPartRightEdge += $vPartWidth [ $x ] If $vPartWidth [ $x ] <= 0 Then Return False DllStructSetData ( $tParts , 1 , $iPartRightEdge , $x + 1 ) Next DllStructSetData ( $tParts , 1 , - 1 , $iParts ) ElseIf $vPartEdge > 1 Then ; adding parts with default width $iParts = $vPartEdge $tParts = DllStructCreate ( "int[" & $iParts & "]" ) For $x = 1 To $iParts - 1 DllStructSetData ( $tParts , 1 , $vPartWidth * $x , $x ) Next DllStructSetData ( $tParts , 1 , - 1 , $iParts ) Else ; defaulting to 1 part $iParts = 1 $tParts = DllStructCreate ( "int" ) DllStructSetData ( $tParts , 1 , - 1 ) EndIf EndIf ;== end set sizing If _WinAPI_InProcess ( $hWnd , $__g_hSBLastWnd ) Then _SendMessage ( $hWnd , $SB_SETPARTS , $iParts , $tParts , 0 , "wparam" , "struct*" ) Else Local $iSize = DllStructGetSize ( $tParts ) Local $tMemMap Local $pMemory = _MemInit
( $hWnd , $iSize , $tMemMap ) _MemWrite
( $tMemMap , $tParts ) _SendMessage ( $hWnd , $SB_SETPARTS , $iParts , $pMemory , 0 , "wparam" , "ptr" ) _MemFree
( $tMemMap ) EndIf _GUICtrlStatusBar_Resize ( $hWnd ) Return True EndFunc ;==>_GUICtrlStatusBar_SetParts
AutoIt 3.3.16.1 - AutoIt3Wrapper 21.316.1639.1