Что нового

Прокрутка и фиксация позиции

Notum

Новичок
Сообщения
71
Репутация
0
Необходимо добавить в интерфейс программы прокрутку.
Вроде как корретка вниз появляется, но реально она ничего не прокручивает.
Хочется, что бы работала прокрутка и после того, как прокрутил вниз - фокус там и остался, а не прыгал вверх.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIResizeMode", $GUI_DOCKWIDTH)
Opt("GUIResizeMode", $GUI_DOCKHEIGHT)
$Form2 = GUICreate("Form2", 465, 488, 523, 282, BitOR($GUI_SS_DEFAULT_GUI,$WS_VSCROLL))
$Group1 = GUICtrlCreateGroup("Настройки", 8, 8, 457, 49)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 8, 80, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Group3", 8, 208, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Group4", 8, 336, 457, 121)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Group5", 8, 480, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("Group6", 8, 592, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group7 = GUICtrlCreateGroup("Group6", 8, 714, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Re: Прокрутка и фиксация

Notum
_GUIScrollBars_Init()
Почитайте пример, да он большой но если разжевывать его шаг за шагом то вполне можно понять основную конструкцию
 
Автор
N

Notum

Новичок
Сообщения
71
Репутация
0
MnM
комментарии к _GUIScrollBars_Init крайне скудны и мне не удалось разобраться до конца.
По этому я и написал здесь о помощи.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIScrollBars.au3>
#include <WindowsConstants.au3>
#include <ScrollBarConstants.au3>
$GUI = GUICreate("Form2", 465, 488, -1, -1,BitOR($GUI_SS_DEFAULT_GUI,$WS_VSCROLL))
$Group1 = GUICtrlCreateGroup("Настройки", 8, 8, 457, 49)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Group2", 8, 80, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Group3", 8, 208, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Group4", 8, 336, 457, 121)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Group5", 8, 480, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group6 = GUICtrlCreateGroup("Group6", 8, 592, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group7 = GUICtrlCreateGroup("Group6", 8, 714, 457, 105)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUIRegisterMsg($WM_VSCROLL, "__VScrolls")
_GUIScrollBars_Init($GUI,0,50)
GUISetState(@SW_SHOW)
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
Func __VScrolls($hWnd,$Msg,$wPar,$lPar)
	#forceref $Msg, $wPar, $lPar
	Local $nScrollCode = BitAND($wPar, 0x0000FFFF)
	Local $index = -1, $yChar, $yPos
	Local $Min, $Max, $Page, $Pos, $TrackPos
	For $x = 0 To UBound($aSB_WindowInfo) - 1
		If $aSB_WindowInfo[$x][0] = $hWnd Then
			$index = $x
			$yChar = $aSB_WindowInfo[$index][3]
			ExitLoop
		EndIf
	Next
	If $index = -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

Вот например вот так
OffTopic:
Сам то же не знал как это сделать, но вот разжевал



Добавлено:
Сообщение автоматически объединено:

_GUIScrollBars_Init($GUI,0,50) чем больше число находящиеся в 3 параметре тем дольше\длиннее будет листать scroll вниз
 
Верх