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

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

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

#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.15.1 / SciTE 4.1.0 / Windows 7 & 10 x64

rgx
Niveau 2
Niveau 2
Messages : 19
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#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)

Avatar du membre
mdanielm
Membre émérite
Membre émérite
Messages : 245
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 » 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 2
Niveau 2
Messages : 19
Enregistré le : sam. 16 nov. 2019 17:53
Status : Hors ligne

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

#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 5
Niveau 5
Messages : 117
Enregistré le : jeu. 16 oct. 2008 15:21
Status : Hors ligne

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

#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.15.1 / SciTE 4.1.0 / Windows 7 & 10 x64

Répondre