les ascenseur qui ne descendent pas

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Ciol13
Niveau 3
Niveau 3
Messages : 34
Enregistré le : mer. 01 juin 2016 20:10
Status : Hors ligne

les ascenseur qui ne descendent pas

#1

Message par Ciol13 »

Je cherche, je cherche, mais je ne trouve point comment faire marcher ce put... d'ascenseur, soit ça défile pas, soit ça fait une erreur, bref, même le chat gpt il bloque complet, help, au secours

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>

; Chemin du fichier INI à ouvrir
Local $sDesktop = @ScriptDir & "\Export\export_agora.ini"

; Vérifier si le fichier INI existe
If Not FileExists($sDesktop) Then
    MsgBox($MB_ICONERROR, "Erreur", "Le fichier INI n'a pas été trouvé.")
    Exit
EndIf

; Liste des clés à afficher
Local $aKeys[9] = ["Fiche automate", "GMR", "GDP", "Ouvrage(IDR)", "Niveau de tension", "N°Sem", "Date MEC (fin OG)", "Pilote Chantier", "Manager de Projet"]

; Récupérer toutes les sections du fichier INI
Local $aSections = IniReadSectionNames($sDesktop)
If @error Then
    MsgBox($MB_ICONERROR, "Erreur", "Impossible de lire les sections du fichier INI.")
    Exit
EndIf

; Créer la GUI principale
Local $hGUI = GUICreate("New Exp Agora", 800, 600, 0, 0)
Local $hScroll = GUICtrlCreateScrollBar($hGUI, 780, 0, 20, 600) ; Créer l'ascenseur
Local $iYPos = 10 ; Position verticale de départ
Local $iMaxHeight = 0 ; Hauteur maximale

; Créer des labels pour chaque section et chaque clé
For $i = 1 To UBound($aSections) - 1
    Local $sSection = $aSections[$i]

    ; Lire la valeur de la clé "Fiche automate"
    Local $sAutomate = IniRead($sDesktop, $sSection, "Fiche automate", " -")

    ; Vérifier si la valeur "Fiche automate" est différente de " -"
    If StringStripWS($sAutomate, 3) <> "-" Then
        ; Créer le label pour la section
        Local $hLabelSection = GUICtrlCreateLabel($sSection, 10, $iYPos, 700)
        $iYPos += 20 ; Espace après le label de section

        For $j = 0 To UBound($aKeys) - 1
            Local $sKey = $aKeys[$j]
            Local $sValue = IniRead($sDesktop, $sSection, $sKey, "Non défini")
            Local $sLabel = $sKey & ": " & $sValue

            ; Créer le label pour la clé
            GUICtrlCreateLabel($sLabel, 10, $iYPos, 700)
            $iYPos += 20 ; Espace après le label de clé
        Next

        $iYPos += 10 ; Espace entre les sections
    EndIf
Next

$iMaxHeight = $iYPos ; Enregistrer la hauteur maximale des labels

; Ajuster la plage de défilement
GUICtrlSetData($hScroll, 0, $iMaxHeight - 600) ; Définir la plage de défilement

; Afficher la GUI
GUISetState(@SW_SHOW, $hGUI)

; Boucle d'attente pour gérer l'ascenseur
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_VSCROLL
            ; Obtenir la position actuelle de l'ascenseur
            Local $iScrollPos = GUICtrlRead($hScroll)
            ; Déplacer tous les labels en fonction de la position de l'ascenseur
            For $k = 1 To $iMaxHeight / 20
                Local $labelID = $k + 1 ; ID du label à mettre à jour
                GUICtrlSetPos($labelID, 10, 10 + ($k * 20) - $iScrollPos) ; Met à jour les positions
            Next
    EndSwitch
WEnd

; Fermer la GUI
GUIDelete($hGUI)
Si quelqu'un peut m'expliquer là, parce que je sèche, vraiment, j'ai cherché partout, j'ai jamais réussi à faire fonctionner un de ces scroll bar, ni horizontal, ni vertical

bon, peut être aussi que je suis un boulet, ça s'étudie !!!
Bonne soirée, et merci à tous
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1034
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: les ascenseur qui ne descendent pas

#2

Message par walkson »

Bonjour,
Le problème est que GUICtrlCreateScrollBar() n'existe pas :wink:
Soit vous utilisez GUICtrlCreateSlider()
Soit vous utilisez _GUIScrollBars_Init()
Un exemple venant de Melba sur le forum anglais

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SliderConstants.au3>

Global $fHSlider = False
Global $fVSlider = False
Global $readV, $readH
$hGUI = GUICreate("Test", 500, 500)

$hHSlider= GUICtrlCreateSlider(10, 10, 400, 20, BitOR($TBS_BOTH, $TBS_NOTICKS))
$hHSlider_Handle = GUICtrlGetHandle(-1)
GUICtrlSetLimit(-1,400)

$hVSlider= GUICtrlCreateSlider(10, 50, 20, 400, BitOR($TBS_BOTH, $TBS_NOTICKS, $TBS_VERT))
$hVSlider_Handle = GUICtrlGetHandle(-1)
GUICtrlSetLimit(-1,400)

$labelH = GUICtrlCreateLabel("",5,450,50,25,0x1000)
$labelV = GUICtrlCreateLabel("",440,50,50,25,0x1000)

GUISetState()

GUIRegisterMsg($WM_HSCROLL, "MY_WM_HVSCROLL")
GUIRegisterMsg($WM_VSCROLL, "MY_WM_HVSCROLL")

While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch

    ; Example code
    If $fHSlider = True Then
        $fHSlider = False
        GUICtrlSetData($labelH,$readH)
		GUICtrlSetPos($labelH,$readH + 10)
    EndIf
    If $fVSlider = True Then
        $fVSlider = False
        GUICtrlSetData($labelV,$readV)
		GUICtrlSetPos($labelV,440,$readV + 50)
    EndIf

WEnd

; Using GUICtrlSendToDummy triggers GUIGetMsg()
Func MY_WM_HVSCROLL($hWnd, $iMsg, $wParam, $lParam)

    #forceref $hWnd, $wParam
    Switch $iMsg
        Case $WM_HSCROLL
            Switch $lParam
                Case $hHSlider_Handle
					$readH = GUICtrlRead($hHSlider)
                    $fHSlider = True
            EndSwitch
        Case $WM_VSCROLL
            Switch $lParam
                Case $hVSlider_Handle
					$readV = GUICtrlRead($hVSlider)
                    $fVSlider = True
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG

EndFunc   ;==>MY_WM_HVSCROLL
Ou bien ceci:

Code : Tout sélectionner

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiScrollBars.au3>
#include <ScrollBarConstants.au3>

$hGUI = GUICreate("Test", 500, 500)
GUISetBkColor(0xCECECE, $hGUI)

$hLabel_1 = GUICtrlCreateLabel("Scroll position", 10, 10, 100, 20)
$hLabel_2 = GUICtrlCreateLabel("0", 10, 25, 50, 15, 0x1000)
GUICtrlSetBkColor(-1, 0xffff00)
$button = GUICtrlCreateButton("Clic",100,100,50,30)
GUISetState()

$hScroller = GUICreate("Child GUI", 17, 480, 480, 10, $WS_CHILD, -1, $hGUI)
GUISetState()

_GUIScrollBars_Init($hScroller)
_GUIScrollBars_ShowScrollBar($hScroller, $SB_HORZ , False)
_GUIScrollBars_SetScrollRange($hScroller, $SB_VERT, 0, 480) ; You have to play with the max figure to get 0-100

GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")

$iCurr_Scroll_Pos = 9999
$aa = 0
While 1

    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
		Case $button
			If $aa <> 175 Then
				$aa = 175
			Else
				$aa = 0
			EndIf

			_GUIScrollBars_SetScrollInfoPos($hScroller,$SB_VERT, $aa)
			$posi = _GUIScrollBars_GetScrollPos ( $hScroller, $SB_VERT )
			GUICtrlSetData($hLabel_2, $posi)
			GUICtrlSetPos($hLabel_2,10,$posi + 25)

    EndSwitch

WEnd

; This function comes directly from the _GUIScrollBars_Init example - except the <<<<<<<<<<<< line

Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
    #forceref $Msg, $wParam, $lParam
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos

    For $x = 0 To UBound($__g_aSB_WindowInfo) - 1
        If $__g_aSB_WindowInfo[$x][0] = $hWnd Then
            $index = $x
            $yChar = $__g_aSB_WindowInfo[$index][3]
            ExitLoop
        EndIf
    Next
    If $index = -1 Then Return 0

    ; Get all the vertial scroll bar information
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    ; Save the position for comparison later on
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")

    Switch $nScrollCode
        Case $SB_TOP ; user clicked the HOME keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Min)

        Case $SB_BOTTOM ; user clicked the END keyboard key
            DllStructSetData($tSCROLLINFO, "nPos", $Max)

        Case $SB_LINEUP ; user clicked the top arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)

        Case $SB_LINEDOWN ; user clicked the bottom arrow
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)

        Case $SB_PAGEUP ; user clicked the scroll bar shaft above the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)

        Case $SB_PAGEDOWN ; user clicked the scroll bar shaft below the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)

        Case $SB_THUMBTRACK ; user dragged the scroll box
            DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch

;~    // Set the position and then retrieve it.  Due to adjustments
;~    //   by Windows it may not be the same as the value set.

    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    ;// If the position has changed, scroll the window and update it
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")

    If ($Pos <> $yPos) Then
        _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
        $yPos = $Pos
        GUICtrlSetData($hLabel_2, $Pos)
		GUICtrlSetPos($hLabel_2,10,$Pos + 25)
    EndIf

    Return $GUI_RUNDEFMSG

EndFunc   ;==>WM_VSCROLL
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre