Aide et conseils concernant AutoIt et ses outils.
-
jpascal
- Niveau 5

- Messages : 117
- Enregistré le : jeu. 16 oct. 2008 15: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_idMemoExample
()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 memoFunc 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

- Messages : 19
- 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 : 245
- 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 2

- Messages : 19
- 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 5

- Messages : 117
- Enregistré le : jeu. 16 oct. 2008 15: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 TrueEndFunc ;==>_GUICtrlStatusBar_SetParts
AutoIt 3.3.15.1 / SciTE 4.1.0 / Windows 7 & 10 x64