[..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jpascal
Niveau 6
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

[..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

#1

Message par jpascal »

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
Niveau 4
Messages : 61
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

Re: [..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

#2

Message par rgx »

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
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

#3

Message par mdanielm »

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
Niveau 4
Messages : 61
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

Re: [..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

#4

Message par rgx »

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
Niveau 6
Messages : 226
Enregistré le : jeu. 16 oct. 2008 16:21
Status : Hors ligne

Re: [..] Résultats incohérents avec fonction _GUICtrlStatusBar_SetParts()

#5

Message par jpascal »

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
Répondre