Имя пользователя:
Пароль:
 

Название темы: Диалог и изображениями
Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Как то так:

Код: Выделить весь код
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include 'GUIScrollbars_Size.au3'

Global $iGUI_W = 600
Global $iGUI_H = 600

Global $sImages_Path = @ScriptDir & '\Images'

$hGUI = GUICreate('Example', $iGUI_W, $iGUI_H)

$aImages = _Images_Load(200, 200)

GUIRegisterMsg($WM_VSCROLL, 'WM_VSCROLL')
GUISetState()

While 1
    $iMsg = GUIGetMsg()

    Switch $iMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aImages[1][0] To $aImages[$aImages[0][0]][0]
            For $i = 1 To $aImages[0][0]
                If $iMsg = $aImages[$i][0] Then
                    MsgBox(0, @ScriptName, 'Image ckicked:' & @CRLF & $aImages[$i][1], 0, $hGUI)
                    ExitLoop
                EndIf
            Next
    EndSwitch
WEnd

Func _Images_Load($iWidth, $iHeight)
    If $iWidth > $iGUI_W Then
        Return 0
    EndIf

    Local $hFind = FileFindFirstFile($sImages_Path & '\*.jpg')
    Local $iTop = 0, $iLeft = 0
    Local $aImages[1][2], $aSize

    While 1
        $sFile = FileFindNextFile($hFind)
        If @error Then ExitLoop

        $aImages[0][0] += 1
        ReDim $aImages[$aImages[0][0] + 1][2]

        $aImages[$aImages[0][0]][0] = GUICtrlCreatePic($sImages_Path & '\' & $sFile, $iLeft, $iTop, $iWidth, $iHeight)
        $aImages[$aImages[0][0]][1] = $sImages_Path & '\' & $sFile

        $iLeft += $iWidth

        If $iLeft + $iWidth > $iGUI_W Then
            $iLeft = 0
            $iTop += $iHeight
        EndIf
    WEnd

    If $iTop + $iHeight > $iGUI_H Then
        _GUIScrollBars_Init($hGUI)
        _GUIScrollBars_ShowScrollBar($hGUI, $SB_VERT, True)
        _GUIScrollBars_ShowScrollBar($hGUI, $SB_HORZ, False)

        $aSize = _GUIScrollbars_Size(0, $iTop + ($iHeight / 2), $iGUI_W, $iGUI_H)

        If Not @error Then
            _GUIScrollBars_SetScrollInfoPage($hGUI, $SB_VERT, $aSize[2])
            _GUIScrollBars_SetScrollInfoMax($hGUI, $SB_VERT, $aSize[3])
        EndIf
    EndIf

    FileClose($hFind)

    Return $aImages
EndFunc

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

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

    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, 'nMin')
    $Max = DllStructGetData($tSCROLLINFO, 'nMax')
    $Page = DllStructGetData($tSCROLLINFO, 'nPage')
    $yPos = DllStructGetData($tSCROLLINFO, 'nPos')
    $Pos = $yPos
    $TrackPos = DllStructGetData($tSCROLLINFO, 'nTrackPos')

    Switch $nScrollCode
        Case $SB_TOP
            DllStructSetData($tSCROLLINFO, 'nPos', $Min)
        Case $SB_BOTTOM
            DllStructSetData($tSCROLLINFO, 'nPos', $Max)
        Case $SB_LINEUP
            DllStructSetData($tSCROLLINFO, 'nPos', $Pos - 1)
        Case $SB_LINEDOWN
            DllStructSetData($tSCROLLINFO, 'nPos', $Pos + 1)
        Case $SB_PAGEUP
            DllStructSetData($tSCROLLINFO, 'nPos', $Pos - $Page)
        Case $SB_PAGEDOWN
            DllStructSetData($tSCROLLINFO, 'nPos', $Pos + $Page)
        Case $SB_THUMBTRACK
            DllStructSetData($tSCROLLINFO, 'nPos', $TrackPos)
    EndSwitch

    DllStructSetData($tSCROLLINFO, 'fMask', $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)

    $Pos = DllStructGetData($tSCROLLINFO, 'nPos')
    If ($Pos <> $yPos) Then
        _GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
        $yPos = $Pos
    EndIf

    Return $GUI_RUNDEFMSG
EndFunc
Нужно скачать GUIScrollbars_Size.au3 тут и положить в папку со скриптом.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 02:39, 02-03-2019 | #3

Название темы: Диалог и изображениями