Что нового

[Элементы GUI] Перекрытие Gui элементов

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Как можно избавится от прорисовки элементов под GUICtrlCreateList ?

Пример
Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 254, 229, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
$Button1 = GUICtrlCreateButton("аляCombo", 16, 16, 100, 25)
GUICtrlSetOnEvent(-1, 'click')
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 32, 60)
$Radio1 = GUICtrlCreateRadio("Radio1", 32, 100)
$Radio2 = GUICtrlCreateRadio("Radio1", 32, 140)
$List1 = GUICtrlCreateList("", 16, 40, 100, 130)
GUICtrlSetData(-1, "Item1|Item2|Item3|Item4|Item5")
GUICtrlSetState(-1, $GUI_HIDE)

GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
	Sleep(100)
WEnd

Func click()
	If GUICtrlGetState($List1) = 96 Then
		GUICtrlSetState($List1, $GUI_SHOW)
	Else
		GUICtrlSetState($List1, $GUI_HIDE)
	EndIf
EndFunc   ;==>click
Func SpecialEvents();Выход
	Exit
EndFunc   ;==>SpecialEvents
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Можно так:

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 254, 229, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
$Button1 = GUICtrlCreateButton("аляCombo", 16, 16, 100, 25)
GUICtrlSetOnEvent(-1, 'click')
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 32, 60)
$Radio1 = GUICtrlCreateRadio("Radio1", 32, 100)
$Radio2 = GUICtrlCreateRadio("Radio1", 32, 140)
$List1 = GUICtrlCreateList("", 16, 40, 100, 130)
GUICtrlSetData(-1, "Item1|Item2|Item3|Item4|Item5")
GUICtrlSetState(-1, $GUI_HIDE)

GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
While 1
    Sleep(100)
WEnd

Func click()
    If GUICtrlGetState($List1) = 96 Then
        GUICtrlSetState($List1, $GUI_SHOW)
		GUICtrlSetState($Checkbox1,$GUI_DISABLE)
		GUICtrlSetState($Radio1,$GUI_DISABLE)
		GUICtrlSetState($Radio2,$GUI_DISABLE)
    Else
		GUICtrlSetPos($Checkbox1,32,60)
		GUICtrlSetState($List1,$GUI_HIDE)
		GUICtrlSetState($Checkbox1,$GUI_ENABLE)
		GUICtrlSetState($Radio1,$GUI_ENABLE)
		GUICtrlSetState($Radio2,$GUI_ENABLE)
    EndIf
EndFunc   ;==>click
Func SpecialEvents();Выход
    Exit
EndFunc
 
Автор
R

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Скрывать элементы под GUICtrlCreateList это будет методом на самый последний вариант.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Почему скрывать? Отключать и включать их отображение на форме.
 
Автор
R

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Потому что если отключать просто, то они все равно просвечиваются, просто больше не нажимаются.
Это приведена простенькая форма для примера, если эти скрытия элементов в рабочей форме реализовывать, с десятками элементов, то это будет жесть, пол кода gui уйдет на $GUI_HIDE\$GUI_SHOW
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Может тогда проще скрывать и показывать?

Код:
Func click()
    If GUICtrlGetState($List1) = 96 Then
        GUICtrlSetState($List1, $GUI_SHOW)
        GUICtrlSetState($Checkbox1,$GUI_HIDE)
        GUICtrlSetState($Radio1,$GUI_HIDE)
        GUICtrlSetState($Radio2,$GUI_HIDE)
    Else
        GUICtrlSetPos($Checkbox1,32,60)
        GUICtrlSetState($List1,$GUI_HIDE)
        GUICtrlSetState($Checkbox1,$GUI_SHOW)
        GUICtrlSetState($Radio1,$GUI_SHOW)
        GUICtrlSetState($Radio2,$GUI_SHOW)
    EndIf
EndFunc   ;==>click
 
Автор
R

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Я об этом и говорил, это на крайний случай ;D

Может есть способ решить проблему стилями?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rusreg79 [?]
Может есть способ решить проблему стилями?
Вряд ли.
[?]
пол кода gui уйдет на $GUI_HIDE\$GUI_SHOW
Попробуйте создавать элементы партиями, а потом в нужном месте их обрабатывайте функцией типа
Код:
Func _HIDE_SHOW($fFlag = False)
	Local $iState_1 = $GUI_HIDE, $iState_2 = $GUI_SHOW
	If $fFlag Then
		$iState_1 = $GUI_SHOW
		$iState_2 = $GUI_HIDE
	EndIf
	For $i = $Button1 To $Radio2
		GUICtrlSetState($i, $iState_1)
	Next
	For $i = $Button12 To $Radio22
		GUICtrlSetState($i, $iState_2)
	Next
EndFunc   ;==>_HIDE_SHOW
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
А можно и совсем другим путем:
Код:
#include <GUIConstants.au3>
Opt('GUIOnEventMode', 1)

$Form1 = GUICreate('Form1', 254, 229, 192, 124)

GUISetOnEvent($GUI_EVENT_CLOSE, 'SpecialEvents')

GUICtrlCreateTab(0, 0, 254, 229)
GUICtrlCreateTabItem('Radio')
	$Checkbox1 = GUICtrlCreateCheckbox('Checkbox1', 32, 60)
	$Radio1 = GUICtrlCreateRadio('Radio1', 32, 100)
	$Radio2 = GUICtrlCreateRadio('Radio1', 32, 140)
GUICtrlCreateTabItem('Combo')
	$List1 = GUICtrlCreateList('', 16, 40, 100, 130)
	GUICtrlSetData(-1, 'Item1|Item2|Item3|Item4|Item5')
GUICtrlCreateTabItem('')


GUISetState(@SW_SHOW)

While 1
	Sleep(100)
WEnd

Func SpecialEvents()
	Exit
EndFunc   ;==>SpecialEvents
 
Верх