Что нового

[Элементы GUI] Глючит полоса прокрутки

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
Обяснить это сложно лучше вылажу архив со скриптом и иконками
http://loh1024.narod.ru/
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Anton [?]
Обяснить это сложно лучше вылажу архив со скриптом и иконками
Но объяснить всё же придётся, т.к я лично не понял в чём проблема...
 
Автор
A

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
Файл надеюсь нормально качается?
Ну попробую объяснить...
На первый взгляд при загрузке всё нормально, но если передвинуть ползунок полосы прокрутки и после этого навести указатель мыши на какую то иконку она перепрыгивает в исходное положение(При наведении меняется иконка, при нажатии тоже)
 
Автор
A

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
Неужели у проблемы нет решения??? :'(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
В архиве нерабочий скрипт.
 
Автор
A

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
В архиве нерабочий скрипт.
:shok: Очень странно я скачал этот архив запустил скрипт и он работает, но глючит
Возможно в версии AutoIt дело :(
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Anton [?]
Возможно в версии AutoIt дело
А возможно ты просто забыл что библиотеку «GUICtrlSetOnHover_UDF.au3» кинул в папку с includ'ами, и у тебя она читается по дефолту, но не у всех ;)
Тот у кого появится желание помочь тебе, скачает архив, запустит скрипт из него, увидит ошибку об отсутствий библиотеки, и желание помочь сразу пропадёт (ещё ведь нужно качать библиотеку, и кидать рядом со скриптом...).
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Глюк на самом деле не в прокрутке, а в обновлений элементов. Трюк с изменением позиций элементов (типа "встряска" для них :smile: ) в данной ситуаций решает проблему.

Вот подкорректированный и оптимизированный вариант:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <GUICtrlSetOnHover_UDF.au3> ;Библиотека "событие при наведении"
;

Global $Images_Path = @ScriptDir & "\Images"
Global $sRunApp = ""

$Maper = GUICreate("Мапер", 600, 150, -1, -1);,$WS_POPUP)

GUICtrlCreateGroup("Hammer Editor", 5, 5, 235, 105) ; Создание группы Hammer Editor
$CSM_Hammer = GUICtrlCreateIcon($Images_Path & "\CSM_Hammer.ico", 0, 10, 17, 64, 64)
$Hammer_v35 = GUICtrlCreateIcon($Images_Path & "\Hammer34.ico", 0, 90, 17, 64, 64)
$Hammer_v34 = GUICtrlCreateIcon($Images_Path & "\Hammer34.ico", 0, 170, 17, 64, 64)
GUICtrlCreateLabel("CSM Hammer", 10, 93, 65, 15)
GUICtrlCreateLabel("Hammer v3.5", 90, 93, 65, 15)
GUICtrlCreateLabel("Hammer v3.4", 170, 93, 65, 15)
_GUICtrl_SetOnHover($CSM_Hammer, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($Hammer_v35, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($Hammer_v34, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)

GUICtrlCreateGroup("Декомпиляторы", 245, 5, 160, 105) ; Создание группы Декомпиляторы
$Bsp2Map = GUICtrlCreateIcon($Images_Path & "\bsp2map.ico", 0, 250, 17, 64, 64)
$WinBsp = GUICtrlCreateIcon($Images_Path & "\WinBSP.ico", 0, 330, 17, 64, 64)
GUICtrlCreateLabel("BSP To MAP", 250, 93, 65, 15)
GUICtrlCreateLabel("   Win BSP", 330, 93, 65, 15)
_GUICtrl_SetOnHover($Bsp2Map, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($WinBsp, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)

GUICtrlCreateGroup("Pak Editors", 410, 5, 155, 105) ; Создание группы Pak Editors
$PakExplorer = GUICtrlCreateIcon($Images_Path & "\PakExplorer.ico", 0, 415, 17, 64, 64)
$PakScape = GUICtrlCreateIcon($Images_Path & "\PakScape.ico", 0, 495, 17, 64, 64)
GUICtrlCreateLabel("Pak Explorer", 415, 93, 65, 15)
GUICtrlCreateLabel(" Pak Scape", 495, 93, 65, 15)
_GUICtrl_SetOnHover($PakExplorer, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($PakScape, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)

GUICtrlCreateGroup("Разное", 570, 5, 235, 105) ; Создание группы Разное
$BspView = GUICtrlCreateIcon($Images_Path & "\BspView.ico", 0, 575, 17, 64, 64)
$Wally = GUICtrlCreateIcon($Images_Path & "\Wally.ico", 0, 655, 17, 64, 64)
$Calc = GUICtrlCreateIcon($Images_Path & "\calc.ico", 0, 735, 17, 64, 64)
GUICtrlCreateLabel(" BSP View", 575, 93, 65, 15)
GUICtrlCreateLabel("Wally v1.55", 655, 93, 65, 15)
GUICtrlCreateLabel("Калькулятор", 735, 93, 65, 15)
_GUICtrl_SetOnHover($BspView, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($Wally, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($Calc, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)

GUICtrlCreateGroup("Разное", 810, 5, 235, 105) ; Создание группы Разное
$CS = GUICtrlCreateIcon($Images_Path & "\CS.ico", 0, 815, 17, 64, 64)
$HL = GUICtrlCreateIcon($Images_Path & "\HL.ico", 0, 895, 17, 64, 64)
GUICtrlCreateLabel("Месть терр.", 815, 93, 65, 15)
GUICtrlCreateLabel("HL Базука", 895, 93, 65, 15)
_GUICtrl_SetOnHover($CS, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)
_GUICtrl_SetOnHover($HL, "ButtonSelect", "ButtonDeSelect", "ButtonDown", "ButtonUp", 0, 0)

GUISetState()

$iScrollInfoMax = 150

GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")

_GUIScrollBars_Init($Maper, -1, 1)
_GUIScrollBars_SetScrollInfoMax($Maper, $SB_HORZ, $iScrollInfoMax)
_GUIScrollBars_SetScrollInfoMax($Maper, $SB_VERT, 0)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	
	If $sRunApp = "" Then ContinueLoop
	$sMessage = ""
	
	Switch $sRunApp
		Case "CSM_Hammer"
			$sMessage = "Запуск CSM Hammer"
		Case "Hammer_v35"
			$sMessage = "Запуск Hammer v3.5"
		Case "Hammer_v34"
			$sMessage = "Запуск Hammer v3.4"
		Case "Bsp2Map"
			$sMessage = "Запуск BSP2 To MAP"
		Case "WinBsp"
			$sMessage = "Запуск Win BSP"
		Case "PakExplorer"
			$sMessage = "Запуск Pak Explorer"
		Case "PakScape"
			$sMessage = "Запуск Pak Scape"
		Case "BspView"
			$sMessage = "Запуск BSP View"
		Case "Wally"
			$sMessage = "Запуск Wally"
		Case "Calc"
			$sMessage = "Запуск Калькулятора"
		Case "CS"
			$sMessage = "Запуск Counter - Strice Месть террористов"
		Case "HL"
			$sMessage = "Запуск Half - Life Базука"
	EndSwitch
	
	MsgBox(64, "Runing...", $sMessage, 0, $Maper)
	$sRunApp = ""
WEnd

Func ButtonDeSelect($iCtrlID)
	$sApp = _GetAppVal($iCtrlID)
	GUICtrlSetImage($iCtrlID, $Images_Path & "\" & $sApp & ".ico", 0)
EndFunc   ;==>ButtonDeSelect

Func ButtonDown($iCtrlID)
	$sApp = _GetAppVal($iCtrlID)
	GUICtrlSetImage($iCtrlID, $Images_Path & "\" & $sApp & "_d.ico", 0)
EndFunc   ;==>ButtonDown

Func ButtonSelect($iCtrlID)
	Local $aCtrlPos = ControlGetPos($Maper, "", $iCtrlID)
	GUICtrlSetPos($iCtrlID, $aCtrlPos[0], $aCtrlPos[1] - 1)
	GUICtrlSetPos($iCtrlID, $aCtrlPos[0], $aCtrlPos[1])
	
	$sApp = _GetAppVal($iCtrlID)
	GUICtrlSetImage($iCtrlID, $Images_Path & "\" & $sApp & "_s.ico", 0)
EndFunc   ;==>ButtonSelect

Func ButtonUp($iCtrlID)
	$sApp = _GetAppVal($iCtrlID)
	$sRunApp = _GetAppVal($iCtrlID, 1)
	GUICtrlSetImage($iCtrlID, $Images_Path & "\" & $sApp & "_s.ico", 0)
EndFunc   ;==>ButtonUp

Func _GetAppVal($iCtrlID, $iMode = 0)
	$aApps = StringSplit("CSM_Hammer|Hammer_v35|Hammer_v34|Bsp2Map|WinBsp|PakExplorer|PakScape|BspView|Wally|Calc|CS|HL", "|")
	
	For $i = 1 To $aApps[0]
		If $iCtrlID = Eval($aApps[$i]) Then
			If $iMode = 0 Then
				$aApps[$i] = StringReplace($aApps[$i], "_v", "")
				$aApps[$i] = StringReplace($aApps[$i], "35", "34")
			EndIf
			
			Return $aApps[$i]
		EndIf
	Next
EndFunc   ;==>_GetAppVal

Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
	#forceref $Msg, $lParam
	Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
	
	Local $index = -1, $xChar, $xPos
	Local $Min, $Max, $Page, $Pos, $TrackPos
	
	For $x = 0 To UBound($aSB_WindowInfo) - 1
		If $aSB_WindowInfo[$x][0] = $hWnd Then
			$index = $x
			$xChar = $aSB_WindowInfo[$index][2]
			ExitLoop
		EndIf
	Next
	
	If $index = -1 Then Return 0
	
;~  ; Get all the horizontal scroll bar information
	Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_HORZ)
	$Min = DllStructGetData($tSCROLLINFO, "nMin")
	$Max = DllStructGetData($tSCROLLINFO, "nMax")
	$Page = DllStructGetData($tSCROLLINFO, "nPage")
	; Save the position for comparison later on
	$xPos = DllStructGetData($tSCROLLINFO, "nPos")
	$Pos = $xPos
	$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
	
	#forceref $Min, $Max
	Switch $nScrollCode
		Case $SB_LINELEFT ; user clicked left arrow
			DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
		Case $SB_LINERIGHT ; user clicked right arrow
			DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
		Case $SB_PAGELEFT ; user clicked the scroll bar shaft left of the scroll box
			DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
		Case $SB_PAGERIGHT ; user clicked the scroll bar shaft right of 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_HORZ, $tSCROLLINFO)
	_GUIScrollBars_GetScrollInfo($hWnd, $SB_HORZ, $tSCROLLINFO)
	;// If the position has changed, scroll the window and update it
	$Pos = DllStructGetData($tSCROLLINFO, "nPos")
	If ($Pos <> $xPos) Then _GUIScrollBars_ScrollWindow($hWnd, $xChar * ($xPos - $Pos), 0)
	
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_HSCROLL
 
Автор
A

Anton

Твори! Пусть завистники твои захлебываются пылью!
Сообщения
69
Репутация
3
Спасибо большое, я и не обратил внимание что использую библиотеки которые не у всех есть, в следующий раз буду внимательнее.
 
Верх