kasper_sky
Antivirus
- Сообщения
- 116
- Репутация
- 1
Доброго времени суток.
Итак, у меня есть большое количество контролов(допустим, элементов Label), которое не помещается в окно GUI. Можно ли создать какую-нибудь перемотку контролов(например, вертикальную)?
P.S. Иные элементы(вроде ListView и т.д.) со стандартным скроллом не особо интересуют(специфика выполнения оформления GUI).
За код сильно не пинайте..
Элементы для "скроллинга" будут размещаться в левой части GUI, как первые три лэйбла.
Итак, у меня есть большое количество контролов(допустим, элементов Label), которое не помещается в окно GUI. Можно ли создать какую-нибудь перемотку контролов(например, вертикальную)?
P.S. Иные элементы(вроде ListView и т.д.) со стандартным скроллом не особо интересуют(специфика выполнения оформления GUI).
За код сильно не пинайте..
Элементы для "скроллинга" будут размещаться в левой части GUI, как первые три лэйбла.
Код:
#include <StaticConstants.au3>
#include <GUIConstants.au3>
#include <WinAPI.au3>
Const $iContactCtrlHeight = 23 ; Cannot be lower than 18
Const $iContactCtrlDistance = 4
Const $iWidth = 170
Const $clSelectedContact = 0x4f739a
Const $clHoverContact = 0xe1e7ed
Const $clNewMessageContact = 0x9040A0
Const $clNormalContact = $GUI_BKCOLOR_TRANSPARENT
Const $clSelectedContactFont = 0xFFFFFF
Const $clNormalContactFont = 0x000000
Global $iFirstH = _CntFirstH()
Global $iMainH = _CntMainH()
Local $posY = $iContactCtrlDistance
Global $ahContacts[3][2]
Global $iContactsCtrlHover = 999999999999, $iContactsCtrlActive = -1
$hVkGUI = GuiCreate('VK | 1 новое сообщение', 800, 500)
GUISetFont(11)
; Separator
GUICtrlCreateLabel('', 179, 0, 1, 500)
GUICtrlSetBkColor(-1, 0x909090)
; Main photo
$hMainPic = GUICtrlCreatePic('', $iWidth + 16, 4, 50, 50)
; Main name label
Global $hNameLabel = GUICtrlCreateLabel('', $iWidth + 72, 2, (800 - $iWidth - 80), 26)
GUICtrlSetFont(-1, 18)
GUICtrlSetColor(-1, 0x1B486A)
;~ GUICtrlSetBkColor(-1, 0xFF0000)
; Secondary name label
Global $hNameLabel2 = GUICtrlCreateLabel('', $iWidth + 73, 28, (800 - $iWidth - 80), 16)
GUICtrlSetColor(-1, 0x97A5B5)
;~ GUICtrlSetBkColor(-1, 0xFF00F0)
$ahContacts[0][0] = GUICtrlCreateLabel('', 4, $posY, $iWidth, $iFirstH)
GUICtrlSetBkColor(-1, $clNormalContact)
$posY += $iFirstH
$ahContacts[0][1] = GUICtrlCreateLabel('Zero Contact', 4, $posY, $iWidth, $iMainH, $SS_CENTER)
GUICtrlSetBkColor(-1, $clNormalContact)
$posY += $iMainH
$posY += $iContactCtrlDistance
$ahContacts[1][0] = GUICtrlCreateLabel('', 4, $posY, $iWidth, $iFirstH)
GUICtrlSetBkColor(-1, $clNormalContact)
$posY += $iFirstH
$ahContacts[1][1] = GUICtrlCreateLabel('First Contact', 4, $posY, $iWidth, $iMainH, $SS_CENTER)
GUICtrlSetBkColor(-1, $clNormalContact)
$posY += $iMainH
$posY += $iContactCtrlDistance
$ahContacts[2][0] = GUICtrlCreateLabel('', 4, $posY, $iWidth, $iFirstH)
GUICtrlSetBkColor(-1, $clNormalContact)
$posY += $iFirstH
$ahContacts[2][1] = GUICtrlCreateLabel('Second Contact', 4, $posY, $iWidth, $iMainH, $SS_CENTER)
GUICtrlSetBkColor(-1, $clNormalContact)
GUISetState()
;~ $hTimer = TimerInit()
Do
;~ If TimerDiff($hTimer) > 10000 Then
;~ $hTimer = TimerInit()
;~ GUICtrlSetBkColor($ahContacts[2][0], $clNewMessageContact)
;~ GUICtrlSetBkColor($ahContacts[2][1], $clNewMessageContact)
;~ GUICtrlSetColor($ahContacts[2][1], $clSelectedContactFont)
;~ EndIf
$msg = GUIGetMsg()
$aCursorInfo = GUIGetCursorInfo()
; Hover func
If IsArray($aCursorInfo) Then
For $cnt = 0 To (UBound($ahContacts) - 1) Step 1
If $aCursorInfo[4] = $ahContacts[$cnt][0] Or $aCursorInfo[4] = $ahContacts[$cnt][1] Then
If $iContactsCtrlHover <> $cnt Then
If $iContactsCtrlHover <> 999999999999 And $iContactsCtrlHover <> $iContactsCtrlActive Then
GUICtrlSetBkColor($ahContacts[$iContactsCtrlHover][0], $clNormalContact)
GUICtrlSetBkColor($ahContacts[$iContactsCtrlHover][1], $clNormalContact)
EndIf
If $cnt <> $iContactsCtrlActive Then
GUICtrlSetBkColor($ahContacts[$cnt][0], $clHoverContact)
GUICtrlSetBkColor($ahContacts[$cnt][1], $clHoverContact)
GUICtrlSetColor($ahContacts[$cnt][1], $clNormalContactFont)
EndIf
$iContactsCtrlHover = $cnt
EndIf
ElseIf $aCursorInfo[4] = 0 Then
If $iContactsCtrlHover <> 999999999999 And $iContactsCtrlHover <> $iContactsCtrlActive Then
GUICtrlSetBkColor($ahContacts[$iContactsCtrlHover][0], $clNormalContact)
GUICtrlSetBkColor($ahContacts[$iContactsCtrlHover][1], $clNormalContact)
$iContactsCtrlHover = 999999999999
EndIf
EndIf
Next
EndIf
; Select func
For $cnt = 0 To (UBound($ahContacts) - 1) Step 1
If $msg = $ahContacts[$cnt][0] Or $msg = $ahContacts[$cnt][1] Then
;~ ConsoleWrite(@CRLF & '! $cnt = ' & $cnt & @CRLF)
;~ ConsoleWrite('! $iContactsCtrlActive = ' & $iContactsCtrlActive & @CRLF)
If $iContactsCtrlActive <> -1 Then
GUICtrlSetBkColor($ahContacts[$iContactsCtrlActive][0], $clNormalContact)
GUICtrlSetBkColor($ahContacts[$iContactsCtrlActive][1], $clNormalContact)
GUICtrlSetColor($ahContacts[$iContactsCtrlActive][1], $clNormalContactFont)
EndIf
GUICtrlSetBkColor($ahContacts[$cnt][0], $clSelectedContact)
GUICtrlSetBkColor($ahContacts[$cnt][1], $clSelectedContact)
GUICtrlSetColor($ahContacts[$cnt][1], $clSelectedContactFont)
$iContactsCtrlActive = $cnt
_ShowDialog($cnt)
EndIf
Next
Until $msg = -3
Func _CntFirstH()
$iHeight = $iContactCtrlHeight
$iHeight -= 16
$iHeight /= 2
Return Floor($iHeight)
EndFunc
Func _CntMainH()
$iHeight = $iContactCtrlHeight
$iHeight -= 16
$iHeight /= 2
Return Round($iHeight) + 16
EndFunc
Func _ShowDialog($iNum)
Switch $iNum
Case 0
GUICtrlSetData($hNameLabel, 'Нулевой контакт')
GUICtrlSetData($hNameLabel2, 'В поиске...')
GUICtrlSetImage($hMainPic, '')
Case 1
GUICtrlSetData($hNameLabel, 'Первый контакт')
GUICtrlSetData($hNameLabel2, 'Онлайн')
;~ GUICtrlSetImage($hMainPic, @DesktopDir & '\1.jpg')
Case 2
GUICtrlSetData($hNameLabel, 'Второй контакт')
GUICtrlSetData($hNameLabel2, 'Печатает...')
;~ GUICtrlSetImage($hMainPic, @DesktopDir & '\2.jpg')
Case Else
;
EndSwitch
EndFunc